สายไฟสีแดง — +5V
สายไฟสีดำ — -5V
สายไฟสีเหลือง — A
สายไฟสีขาว — B
1.การอ่านค่า Temp แบบ Modbus ด้วยโปรแกรม CAS Modbus Scanner
Download โปรแกรม CAS Mobus Scanner จากเวป https://store.chipkin.com/products/tools/cas-modbus-scanner
เรียกโปรแกรม CAS Modbus Scanner
คลิกขวาที่ช่างว่างด้านซ้ายจะเห็นคำว่า Add Connection
จะมีหน้าต่าง Add Connection ปรากฎขึ้นมา
เลือก Serial Port ที่ถูกต้อง Baud rate 9600, Data bits 8, Stop Bits 1, Parity None แล้วคลิก Add Serial Connection
คลิกบรรทัด COM แล้วคลิกขวาเลือก Add Device
ใส่ Slave ID เป็น 1แล้วคลิก Add Device
คลิกขวาที่ Device แล้วเลือก Add task
เลือก 04 Read Input register (3xxxx) Offset 2 Length 2
เริ่มอ่านตำแหน่งที่ 2 จำนวน 2 ค่า
ให้กดเลือกบรรทัด Read Input แล้วคลิกที่ Poll
จะเห็นข้อมูลที่อ่านจาก Sensor ได้ 2 ค่าคือ HEX 0x0135 และ 0x021A
หรือ int 16 คือ 309 และ 538 ซึ่งเท่ากับ 30.9 องศา และ 53.8 % RH
นอกจากนั้นแล้ว CAS Modbus Scanner ยังสามารถใช้ ฟังงค์ชั่น SCAN เพื่อหา Device ที่เชื่อมอยู่บน Bus ได้
โดยคลิกที่ Discover ดูละเอียดได้จาก คลิก
2.การอ่านค่า Temp แบบ Modbus ด้วยโปรแกรม qModMaster 0.5.2–3 (ไม่ควรใช้ Beta มี bug)
ดาวน์โหลดได้จาก เวป https://sourceforge.net/projects/qmodmaster/
คลิกลิ้งค์ https://sourceforge.net/projects/qmodmaster/files/qModMaster-Win32-exe-0.5.2-3.zip/download
แตกไฟล์ในโฟดเดอร์แล้วเรียกใช้งานโปรแกรม qmodmaster.exe
คลิกเลือกรูป Port (Modbus RTU) แล้วเลือก Port Serial ให้ถูกต้อง
Function Code เลือก Read Input Register (0x04) แก้ Number of Coils เป็น 2
ให้คลิก รูป terminal (Bus Monitor)
จะมีหน้าต่าง Bus Monitor Popup ขึ้นมา
คลิก Connect
คลิก READ/WRITE
ดูหน้าจอ ฺBUS/MASTER
จะเห็นข้อมูล RX ดังนี้คือ 01 04 04 01 36 02 17 5B 18
แปลงจาก 0x0136 ไปเป็น DEC หารด้วย 10 จะได้ค่าอุณหภูมิ
แปลงจาก 0x0217 ไปเป็น DEC หารด้วย 10 จะได้ค่าความชื้น
3. การอ่านค่า Temp แบบ Serial
ดาวน์โหลดโปรแกรม Hercules SETUP utility ได้ที่ คลิก
เรียกใช้โปรแกรม
เลือก TAB Serial
กำหนด Port Serial ให้ตรงแล้วคลิก Open
ในช่อง Send ให้พิมพ์ READ เสร็จแล้วคลิก Send
จะเห็นค่าอุณหภูมิที่อ่านได้และค่าความชืื้นตามตัวอย่างคือ 28.7 องศา และ Humid 52.9%
แสดงว่าอุปกรณ์ Sensor ทำงานปรกติ
เปลี่ยนคำสั่งเป็น PARAM จะเป็นข้อมูลดังภาพ
อ่านค่าจาก Sensor ด้วย ESP32 Dev Board
ตัวอย่างการเชื่อมต่อ
การเชื่อมต่อกับ ESP32 จะใช้อุปกรณ์ที่เรียกว่า RS485-TTL ดูตัวอย่างได้จาก คลิก
เชื่อมไป 5V และ GND เข้า VCC กับ GND ตามลำดับ
สายสีเหลืองจาก Sensor เชื่อมกับ A+
สายสีขาวจาก Sensor เชื่อมกับ B-
TX เข้า P17 ของ ESP32
RX เข้า P16 ของ ESP32
โปรแกรมตัวอย่างและ Arduino Lib
ดาวน์โหลด Library ได้จาก คลิก ตัวอย่างที่มากับ Library ใช้กับ Software Serial
แก้ไขโปรแกรมตัวอย่าง.ให้ใช้ Hardware Serial ของ ESP32 Dev Board ดังต่อไปนี้
/* Modified From https://robokits.co.in
*/#include <ModbusMaster.h>
#define RXD2 16
#define TXD2 17#define MODBUS_DATA_TRANSACTION_PIN 8 //DE & RE Pin of MAX485
ModbusMaster node; //object for ModbusMastershort a1,a2,a3,a4;
short b1,b2;
uint8_t Slave_ID = 1; //Slave ID of the Sensorvoid setup()
{
pinMode(MODBUS_DATA_TRANSACTION_PIN, OUTPUT);
digitalWrite(MODBUS_DATA_TRANSACTION_PIN, 0);
Serial.begin(57600); //Baud rate is 57600 8N1
Serial2.begin(9600, SERIAL_8N1, RXD2, TXD2);
node.begin(Serial2);
node.preTransmission(preTransmission);
node.postTransmission(postTransmission);
Serial.println("Temperature And Humidity Sensor");
Serial.print("Slave ID :");
Serial.println(Slave_ID);
}void loop()
{
a3 = node.readInputRegisters(Slave_ID, 1, 1);
b1 = node.getResponseBuffer(0);
delay(2);
node.clearResponseBuffer();a4 = node.readInputRegisters(Slave_ID, 2, 1);
b2 = node.getResponseBuffer(0);
delay(2);
node.clearResponseBuffer();
Serial.print("Temperature :");
//if value is 293 that means it is 29.3℃ temperature
Serial.print(b1,1);
Serial.print("\t\tHumidity :");
//if value is 493 that means it is 49.3% humidity
Serial.println(b2,1);
}void preTransmission()
{
digitalWrite(MODBUS_DATA_TRANSACTION_PIN, 1);
}void postTransmission()
{
digitalWrite(MODBUS_DATA_TRANSACTION_PIN, 0);
}
ผลจากการ RUN ดูจาก Serial monitor ที่ Speed 57600bps
ค่าที่ได้จะต้องหารด้วย 10 จึงจะเป็นค่าจริง
Sensor นอกจากสีดำที่ยกตัวอย่างมาอาจเลือกใช้ XY-MD02 ตามรูปก็ได้ ้การใช้งานกับโปรแกรมก็ใช้แบบเดียวกัน
ศึกษาเพิ่มเติม
คู่มือการใชงาน Modbus RTU Sensor H/T V2 คลิก
Temperature and humidity transmitter SHT20 sensor Modbus RS485 คลิก
ROBOKITS INDIA คลิก
How to work with RS485 interface on ESP32 คลิก
Using an Arduino to read a simple MODBUS/RTU RS-485 sensor คลิก
Overview of a simple MODBUS/RTU RS-485 temperature sensor คลิก
MODBUS and RS485 — a Python test rig คลิก
Modbus communication in Raspberry Pi คลิก
Complete Modbus Guide คลิก
Arduino / ESP8266 RS485 MODBUS Anemometer คลิก
[Industrial Communications] Modbus Protocol คลิก
python modbus realizes RTU communication คลิก
MODBUS-RTU data frame format and message example คลิก
สรุป
เราสามารถอ่านค่าที่ได้จาก Sensor แล้วส่งด้วย LoRaWAN ขึ้น Dashboard ได้ ซึ่งจะสามารถติดตามค่าต่างๆ แบบ Real time