实现了Arduion和Qt上位机利用Modbus协议采集DHT11数据,以及开关LED灯
软件界面:
实物界面:
arduion下位机代码:
#include <ModbusRtu.h>
#include <DHT.h>
#define DHTPIN 2 // DHT11连接到Arduino的数字引脚2
#define DHTTYPE DHT11 // DHT11型号传感器
// Modbus从站对象和共享数据数组
Modbus slave(12, Serial,0);
uint16_t au16data[3];
// DHT11传感器对象
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(19200);
dht.begin(); // 启动DHT11传感器
slave.start(); // 启动Modbus从站
pinMode(6, OUTPUT); // 将引脚6设置为输出模式
}
uint16_t reg3Value;
void loop() {
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
if (!isnan(humidity)) {
au16data[0] = (uint16_t)(humidity * 10);
}
if (!isnan(temperature)) {
au16data[1] = (uint16_t)(temperature * 10);
}
if (au16data[2] == 1) {
digitalWrite(6, HIGH);
} else {
digitalWrite(6, LOW);
}
slave.poll(au16data, 3);
}
遇到的问题:
用modbus-poll当上位机的时候总是读不到数据
一定记得串口参数必须设置对,然后从站地址,以及起始读几个从哪里开始要设置对,比如我只操作3个寄存器那就从0-3,不然一直读不到数据。
然后上位机这边就是用2个按钮修改寄存器的值,两个lcd-number和一个label显示寄存器 的值
虽然简单,但是很有意义