iT邦幫忙

1

ESP32連接DS-CO2-20的問題

  • 分享至 

  • xImage

我寫了一隻程式想要透過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感測器的燈是有閃爍的代表他有通到電
https://ithelp.ithome.com.tw/upload/images/20230410/20159403eGMv0AaMUX.png

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

2
sfc507
iT邦新手 4 級 ‧ 2023-04-10 09:49:13
最佳解答

有兩個方向供你查修
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.我有改了一下程式碼
https://ithelp.ithome.com.tw/upload/images/20230410/20159403FFKsnpziBK.png
但結果還是一樣數值都為0
但我在ARDUINO UNO板中可以測試到我的DS-CO2-20感測器能跑出值來
可以證明感測器沒有壞掉

sfc507 iT邦新手 4 級 ‧ 2023-04-11 09:49:13 檢舉

雖然沒用過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板當中是可以接收到數值的,還會是資料讀取的問題嗎?

sfc507 iT邦新手 4 級 ‧ 2023-04-12 09:32:34 檢舉

那退一步來說,先打程式放在setup()驗證,只傳一次,一讀一回把讀到長度12的資料都印出來,確認前兩位元應該是request[0]=0x42,request[1]=0x4d,先確認你的模組是不是好的

他好像也不是好的 我再檢查一下我的程式是否有錯 謝謝你的回答 有問題的話 我能夠繼續問你?

sfc507 iT邦新手 4 級 ‧ 2023-04-19 09:07:11 檢舉

好的,反正先朝向先送一筆資料,看看模組有沒有回應再說~才能先釐清問題

我要發表回答

立即登入回答