Arduino IDE 下 NodeMCU 读取 JW01 二氧化碳传感器 485 通信完整代码
以下是读取 JW01 二氧化碳传感器的完整代码:
//定义 RS485 通信引脚
#define RE_PIN 2
#define DE_PIN 3
//定义 JW01 二氧化碳传感器的地址
#define CO2_ADDR 0x01
//定义变量
uint8_t cmd[] = {CO2_ADDR, 0x03, 0x00, 0x00, 0x00, 0x01, 0x84, 0x0A}; //读取 CO2 浓度的命令
uint8_t response[7]; //存储响应数据的数组
void setup() {
Serial.begin(9600);
//设置 RS485 通信引脚
pinMode(RE_PIN, OUTPUT);
pinMode(DE_PIN, OUTPUT);
digitalWrite(RE_PIN, LOW);
digitalWrite(DE_PIN, LOW);
}
void loop() {
//发送读取 CO2 浓度的命令
digitalWrite(RE_PIN, HIGH);
digitalWrite(DE_PIN, HIGH);
Serial.write(cmd, sizeof(cmd));
Serial.flush();
digitalWrite(DE_PIN, LOW);
//等待传感器响应
delay(100);
//读取响应数据
digitalWrite(RE_PIN, LOW);
digitalWrite(DE_PIN, LOW);
Serial.readBytes(response, 7);
//计算 CO2 浓度
uint16_t co2_ppm = response[3] << 8 | response[4];
//输出 CO2 浓度
Serial.print('CO2 concentration: ');
Serial.print(co2_ppm);
Serial.println(' ppm');
//等待 1 秒
delay(1000);
}
连接线路如下:
JW01 二氧化碳传感器:
- VCC -> 5V
- GND -> GND
- A -> A+
- B -> B-
NodeMCU:
- 5V -> 5V
- GND -> GND
- RX -> TX
- TX -> RX
- DE -> D3
- RE -> D2
注意:在使用 RS485 通信时,需要将 RE 和 DE 引脚分别连接到 NodeMCU 的 D2 和 D3 引脚,并通过代码控制这两个引脚的电平,以实现发送和接收数据的切换。同时,在使用 Serial.write() 函数发送命令时,需要调用 Serial.flush() 函数等待发送完成,否则可能会出现通信错误。
原文地址: https://www.cveoy.top/t/topic/ngDj 著作权归作者所有。请勿转载和采集!