iT邦幫忙

1

ds-co2-20 CO2感測器在arduino要怎麼讀取數值

  • 分享至 

  • xImage

我主要是想用ds-co2-20 CO2感測器感測CO2濃度之後把數據傳到資料庫,可是目前我只試成功過Arduino OUN板能讀出數值而已,可是UNO板又沒辦法直接把數值傳到資料庫,而我常用的NodeMCU也就是esp8266又沒有5V的供電,程式的部分也跟UNO板不太一樣,我找了很久都沒找到能用esp8266去讀取ds-co2-20 CO2感測器的方法,我也有在想要不要買esp32來試試看

https://ithelp.ithome.com.tw/upload/images/20221006/20146916K5WRzUJ0S8.jpg

請問高手們有沒有甚麼方法用esp8266或esp32讀取到ds-co2-20 CO2感測器的值?
或是或許讓Arduino UNO讀取到的數值能傳到資料庫?
有甚麼參考資料嗎?

我Arduino UNO的程式參考:
https://sites.google.com/mail3.hwsh.tc.edu.tw/earth/arduinoadvanced/co2-sensor-ds-co2-20

2022/10/12

我使用esp32有讀取出一些數值,可是數值有點奇怪

我的接線
Co2 ESP32
pin1 => 5V
pin2 => GND
pin3 => GPIO13
pin4 => GPIO12

我的程式碼

HardwareSerial myHardwareSerial(1); 

static unsigned int co2 = 0;
static unsigned int ucRxBuffer[10];

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  myHardwareSerial.begin(9600, SERIAL_8N1, 12, 13);// Serial的RX,TX
  delay(500);
  Serial2.begin(9600);
  Serial.println(F("Trying to connect."));

}

void loop() {
 
  byte request[] = {0x42, 0x4d, 0xe3, 0x00, 0x00, 0x01, 0x72};
  Serial2.write(request, 7);
  delay(500);

  while (Serial2.available()) {
    for (int i = 0; i < 12; i = i + 1) {
      ucRxBuffer[i] = Serial2.read();
    }
    co2 = ucRxBuffer[4] * 256 + ucRxBuffer[5];
    //Serial.print("CO2 PPM:");
    Serial.println(co2);
    

  }

}

結果
https://ithelp.ithome.com.tw/upload/images/20221012/20146916YqkoqWqT3A.png

froce iT邦大師 1 級 ‧ 2022-10-06 16:31:49 檢舉
用ESP8266的話。
1. 你可以考慮外部電源,如鋰電池供電板
2. 用USB供電給NodeMCU時,VIN腳可以輸出5V

一勞永逸就是換ESP32了。
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

1
sfc507
iT邦新手 4 級 ‧ 2022-10-07 09:35:58

我想你應該先釐清你的資料庫要架在哪邊?走什麼通訊(ethernet/UART/internet)與其溝通(上傳)
再考慮選用什麼平台實作(arduino/esp32/ESP8266)與通訊功能模組實作。
首先你應該先對你的想法要有架構,再去搞懂其架構所要搭配的硬體

sc05201 iT邦新手 5 級 ‧ 2022-10-07 11:57:02 檢舉

我資料庫是架在樹莓派(目前還只能用內網ip連進去),像溫溼度感測器(DHT22)也都是透過esp8266讀取數值後傳到php,再由php程式送到資料庫,我的敘述可能說得不太好,我主要是想知道讓esp8266或esp32能讀到Co2感測器的數值而已,傳到資料庫的部分已經弄好了

sfc507 iT邦新手 4 級 ‧ 2022-10-07 13:55:07 檢舉

那接下來你得了解模組通訊協定(溝通方式)是什麼,此例是使用UART,
將線路接好後。
要去研讀此模組的datasheet
https://www.icbanq.com/icdownload/data/ICBShop/Board/DS-CO2-20%20series%20data%20manual_English_V2.9.pdf
在第六頁可以知道UART的設定(如baudrate)及通訊格式

此時,你就可以看得懂你文中給的Arduino source code所代表的意義
需要由host端傳出一個7bytes的command,才會回傳此模組所量測到的數據(11 bytes);其中回傳資料中4.5bytes位址才是你想要的數值。

不知道你有沒有更了解,這個模組在幹嘛了

sc05201 iT邦新手 5 級 ‧ 2022-10-07 21:16:09 檢舉

感謝建議 我先研究看看

我要發表回答

立即登入回答