การใช้งาน IOXESP32 Modbus RTU shield / Lite กับโมดูล XY-MD02 วัดอุณหภูมิและความชื้น
ตัวอย่างการใช้งาน IOXESP32 Modbus RTU shield ต่อกับโมดูล XY-MD02 เพื่ออ่านค่าอุณหภูมิและความชื้น
XY-MD02 เป็นโมดูลวัดอุณหภูมิและความชื้นที่สื่อสารผ่าน Modbus RTU นิยมใช้ในการศึกษาการทำงานของ Modbus RTU / RS485 ในบทความนี้จะนำโมดูลดังกล่าวมาต่อเข้ากับ IOXESP32 Modbus RTU shield เพื่อทดสอบการทำงานและเรียนรู้การใช้งาน
ห้ามจ่ายไฟผ่านช่อง 7-24V พร้อมเสียบสาย USB โดยเด็ดขาด
การต่อวงจร
ให้ต่อวงจรระหว่างชุด IOXESP32 Modbus RTU shield กับ XY-MD02 ดังนี้

โมดูล IOXESP32 Modbus RTU shield ใช้ไฟจาก USB จึงไม่ต้องต่อไฟเลี้ยงเข้าอีก
XY-MD02 ใช้ไฟจากแหล่งจ่ายไฟแยก 5V ถึง 30V
IOXESP32 Modbus RTU shield และ XY-MD02 เชื่อมต่อผ่าน RS485 ด้วยสาย A และ B โดย A ต่อ A และ B ต่อ B
การเขียนโปรแกรม
ใช้โปรแกรม ArduinoIDE ในการพัฒนา ... อัพโหลดโค้ดโปรแกรมต่อไปนี้ลงบอร์ด IOXESP32
/* Dev by IOXhop.com */
float temp = 0, humi = 0;
void readXY_MD02() {
uint8_t buff[] = {
0x01, // Devices Address
0x04, // Function code
0x00, // Start Address HIGH
0x01, // Start Address LOW
0x00, // Quantity HIGH
0x02, // Quantity LOW
0x20, // CRC LOW
0x0B // CRC HIGH
};
Serial2.write(buff, sizeof(buff));
Serial2.flush(); // wait MODE_SEND completed
if (Serial2.find("\x01\x04")) {
uint8_t n = Serial2.read();
if (n != 4) {
Serial.println("Error data size");
return;
}
temp = ((uint16_t)(Serial2.read() << 8) | Serial2.read()) / 10.0;
humi = ((uint16_t)(Serial2.read() << 8) | Serial2.read()) / 10.0;
} else {
Serial.println("ERROR Timeout");
return;
}
}
void setup() {
Serial.begin(115200);
Serial2.begin(9600, SERIAL_8N1, 27, 26); // Rx, Tx
Serial2.setTimeout(200);
}
void loop() {
readXY_MD02();
Serial.print("Temperature: ");
Serial.print(temp);
Serial.println(" *C");
Serial.print("Humidity: ");
Serial.print(humi);
Serial.println(" *C");
delay(500);
}
การทดสอบ
เปิด Serial Monitor ขึ้นมา ตั้งค่าความเร็วเป็น 115200 baud หาก IOXESP32 Modbus RTU shield กับ XY-MD02 สามารถสื่อสารกันได้ ค่าอุณหภูมิและความชื้นที่วัดได้จะแสดงดังรูป

Last updated
Was this helpful?