Arduion Modbus通讯示例

实现了Arduion和Qt上位机利用Modbus协议采集DHT11数据,以及开关LED灯
软件界面:
Arduion Modbus通讯示例_第1张图片
实物界面:
Arduion Modbus通讯示例_第2张图片
arduion下位机代码:

#include 
#include 

 #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当上位机的时候总是读不到数据

Arduion Modbus通讯示例_第3张图片
Arduion Modbus通讯示例_第4张图片
一定记得串口参数必须设置对,然后从站地址,以及起始读几个从哪里开始要设置对,比如我只操作3个寄存器那就从0-3,不然一直读不到数据。

Arduion Modbus通讯示例_第5张图片
然后上位机这边就是用2个按钮修改寄存器的值,两个lcd-number和一个label显示寄存器 的值
Arduion Modbus通讯示例_第6张图片
虽然简单,但是很有意义

你可能感兴趣的:(Qt项目,qt)