我主要是想用ds-co2-20 CO2感測器感測CO2濃度之後把數據傳到資料庫,可是目前我只試成功過Arduino OUN板能讀出數值而已,可是UNO板又沒辦法直接把數值傳到資料庫,而我常用的NodeMCU也就是esp8266又沒有5V的供電,程式的部分也跟UNO板不太一樣,我找了很久都沒找到能用esp8266去讀取ds-co2-20 CO2感測器的方法,我也有在想要不要買esp32來試試看
請問高手們有沒有甚麼方法用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);
}
}
結果
我想你應該先釐清你的資料庫要架在哪邊?走什麼通訊(ethernet/UART/internet)與其溝通(上傳)
再考慮選用什麼平台實作(arduino/esp32/ESP8266)與通訊功能模組實作。
首先你應該先對你的想法要有架構,再去搞懂其架構所要搭配的硬體
我資料庫是架在樹莓派(目前還只能用內網ip連進去),像溫溼度感測器(DHT22)也都是透過esp8266讀取數值後傳到php,再由php程式送到資料庫,我的敘述可能說得不太好,我主要是想知道讓esp8266或esp32能讀到Co2感測器的數值而已,傳到資料庫的部分已經弄好了
那接下來你得了解模組通訊協定(溝通方式)是什麼,此例是使用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位址才是你想要的數值。
不知道你有沒有更了解,這個模組在幹嘛了
感謝建議 我先研究看看