Skip to content

Commit 8912a0c

Browse files
authored
Example: read temperature and humidity via Modbus RTU from MD02. (#154)
1 parent cdae56d commit 8912a0c

File tree

1 file changed

+76
-0
lines changed

1 file changed

+76
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
/*
2+
Modbus RTU Client MD02 Temperature Humidity sensor
3+
4+
This sketch creates a Modbus RTU Client and demonstrates
5+
how to use read temperature and humidity values as sensed
6+
by the RTU Modbus capable MD02 sensor.
7+
*/
8+
9+
/**************************************************************************************
10+
* INCLUDE
11+
**************************************************************************************/
12+
13+
#include <ArduinoRS485.h>
14+
#include <ArduinoModbus.h>
15+
16+
/**************************************************************************************
17+
* CONSTANTS
18+
**************************************************************************************/
19+
20+
static unsigned int const MODBUS_BAUDRATE = 9600;
21+
static float const MODBUS_BIT_DURATION = 1.f / MODBUS_BAUDRATE;
22+
static float const MODBUS_PRE_DELAY_BR = MODBUS_BIT_DURATION * 9.6f * 3.5f * 1e6;
23+
static float const MODBUS_POST_DELAY_BR = MODBUS_BIT_DURATION * 9.6f * 3.5f * 1e6;
24+
25+
static int const MODBUS_DEVICE_ID = 1;
26+
static int const MODBUS_DEVICE_TEMPERATURE_REGISTER = 0x0001;
27+
static int const MODBUS_DEVICE_HUMIDITY_REGISTER = 0x0002;
28+
29+
/**************************************************************************************
30+
* SETUP/LOOP
31+
**************************************************************************************/
32+
33+
void setup()
34+
{
35+
Serial.begin(9600);
36+
while (!Serial);
37+
38+
RS485.setDelays(MODBUS_PRE_DELAY_BR, MODBUS_POST_DELAY_BR);
39+
40+
if (!ModbusRTUClient.begin(MODBUS_BAUDRATE, SERIAL_8N1))
41+
{
42+
Serial.println("Failed to start Modbus RTU Client!");
43+
for (;;) { }
44+
}
45+
46+
ModbusRTUClient.setTimeout(2 * 1000UL); /* 2 seconds. */
47+
}
48+
49+
void loop()
50+
{
51+
if (!ModbusRTUClient.requestFrom(MODBUS_DEVICE_ID, INPUT_REGISTERS, MODBUS_DEVICE_TEMPERATURE_REGISTER, 1)) {
52+
Serial.print("failed to read temperature register! ");
53+
Serial.println(ModbusRTUClient.lastError());
54+
return;
55+
}
56+
if (ModbusRTUClient.available())
57+
{
58+
int16_t const temperature_raw = ModbusRTUClient.read();
59+
float const temperature_deg = temperature_raw / 100.f;
60+
Serial.println(temperature_deg);
61+
}
62+
63+
if (!ModbusRTUClient.requestFrom(MODBUS_DEVICE_ID, INPUT_REGISTERS, MODBUS_DEVICE_HUMIDITY_REGISTER, 1)) {
64+
Serial.print("failed to read humidity register! ");
65+
Serial.println(ModbusRTUClient.lastError());
66+
return;
67+
}
68+
if (ModbusRTUClient.available())
69+
{
70+
int16_t const humidity_raw = ModbusRTUClient.read();
71+
float const humidity_per_cent = humidity_raw / 100.f;
72+
Serial.println(humidity_per_cent);
73+
}
74+
75+
delay(1000);
76+
}

0 commit comments

Comments
 (0)