Arduion Modbus通讯示例

2024-01-07 17:34:38

实现了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显示寄存器 的值
在这里插入图片描述
虽然简单,但是很有意义

文章来源:https://blog.csdn.net/weixin_48657573/article/details/135439348
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。