我寫了一隻程式想要透過ESP32 NODEMCU-32S連接DS-CO2-20
這是我的程式碼
#include <HardwareSerial.h>
// CO2感測器使用的引腳位
byte request[] = {0x42, 0x4d, 0xe3, 0x00, 0x00, 0x01, 0x72}; // 請求讀取 CO2 濃度
byte response[9]; // 緩存區接收數據的,長度 9,請求命令的字節數相同
HardwareSerial CO2Serial(1); // 初始化 HardwareSerial 物件
void setup() {
// 初始化序列埠
Serial.begin(9600);
CO2Serial.begin(9600, SERIAL_8N1,4,2); //
}
void loop() {
CO2Serial.write(request, sizeof(request)); // 發送讀取 CO2 濃度的命令
delay(100);
CO2Serial.readBytes(response, sizeof(response)); // 讀取 CO2 濃度的
int co2 = (response[4] << 8) | response[5]; // 提取 CO2 濃度數值
Serial.print("CO2 concentration: "); // 輸出 CO2 濃度數值
Serial.println(co2);
delay(500);
}
測出來的數值不知道為啥都會是0
但是我DS-CO2-20感測器的燈是有閃爍的代表他有通到電
有兩個方向供你查修
1.
因為你使用
HardwareSerial CO2Serial(1);
先確認與DS-CO2-20連結是否有問題
(ESP)---------------(DS-CO2-20)
TXD=GPIO10 -> pin4(RX)
RXD=GPIO9 -> pin3(TX)
由於你敘述沒有提到這個部分,想先確認一下
我上網看DS-CO2-20的datasheet回應的bytes長度是12,不確定你手上的是不是跟別人不同規格,這方便你得自行看你賣家提供的手冊
1.我有將我的DS-CO2-20感測器的RX插入到ESP32 NODEMCU-32S的GPIO10了,TX插入到GPIO9了
2.我有改了一下程式碼
但結果還是一樣數值都為0
但我在ARDUINO UNO板中可以測試到我的DS-CO2-20感測器能跑出值來
可以證明感測器沒有壞掉
雖然沒用過readBytes但還是試看看
void loop() {
CO2Serial.write(request, sizeof(request)); // 發送讀取 CO2 濃度的命令
delay(500);
if(CO2Serial.available())
{
CO2Serial.readBytes(response, sizeof(response)); // 讀取 CO2 濃度的
int co2 = (response[4] << 8) | response[5]; // 提取 CO2 濃度數值
Serial.print("CO2 concentration: "); // 輸出 CO2 濃度數值
Serial.println(co2);
}
delay(500);
你可能讀取資料有問題,讀取格式前兩位元應該是request[0]=0x42,request[1]=0x4d
你可能一直讀取到無效數值,導致數值都是0
試了,偵測到的數值還是為0。
可是我這樣的程式碼,在ARDUINO UNO板當中是可以接收到數值的,還會是資料讀取的問題嗎?