如何使用ModBus ESP32读取寄存器MD02?

问题描述 投票:0回答:4

我有一个 MD02 传感器 (SHT20)。在店面中,它说该传感器是 MD02 系列的一部分,而不是 XY-MD02。

但是商店描述说可以根据XY-MD02寄存器进行配置。经过我的尝试,该寄存器无法用于modbus poll。我使用了网上的寄存器数据表http://www.sah.rs/media/sah/techdocs/xy-md02-manual.pdf

我也尝试使用HW0519和ESP32读取Modbus,但结果还是一样。寄存器不发出任何输出。

我的代码:

#define RXD2 16
#define TXD2 17

byte ByteArray[250];
int ByteData[20];

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  Serial2.begin(9600, SERIAL_8N1, RXD2, TXD2);
}

void loop() {
  // put your main code here, to run repeatedly:
  delay(1000);

  byte msg[] = {0x01,0x04,0x00,0x01,0x00,0x01,0x60,0x0A};

  int i;
  int len=8;

  Serial.println("Sending Data...");
  for(i=0 ; i < len ; i++){
    Serial2.write(msg[i]);
    Serial.print("[");
    Serial.print(i);
    Serial.print("]");
    Serial.print("=");
    Serial.print(String(msg[i],HEX));
  }

  len = 0;
  Serial.println();
  Serial.println();

  int a = 0;

  while(Serial2.available()){
    ByteArray[a] = Serial2.read();
    a++;
  }

  int b = 0;
  String Register;
  Serial.println("Receiving Data...");
  for(b=0;b<a;b++){
    Serial.print("[");
    Serial.print(b);
    Serial.print("]");
    Serial.print("=");

    Register = String(ByteArray[b],HEX);
    Serial.print(Register);
    Serial.print(" ");
  }

  Serial.println();
  Serial.println();
}

我已确保接线图正确。如何修复它?我很困惑,因为网上没有相关的解决方案。

esp32 modbus arduino-esp32
4个回答
1
投票

我有同样的问题。但是,我解决了这个问题。

解决方案

  1. 使用奇/偶奇偶校验更改您的 modbus 轮询。我发誓描述是错误的。

改变奇偶校验的结果

温度/湿度有 100 分辨率,只需除以 100。

  1. 使用
    SERIAL_8E1
    SERIAL_8O1
  2. 更改您的代码

代码:

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  Serial2.begin(9600, SERIAL_8E1, RXD2, TXD2);
}

祝你有美好的一天!!!


0
投票

虽然制造商声称该设备可以在 9600 8N1 上运行,但我的设备只能在 9600 8N2(或 8X1 + 任何奇偶校验)上运行。另外,等待响应需要很大的超时时间(在我的例子中,稳定的响应只有1000毫秒或更长的超时时间)。


0
投票

完全正确,一些 MD02 传感器 (SHT20) 在 9600 和 8N2 上出现。读取数据之前一定要检查

代码:

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  Serial2.begin(9600, SERIAL_8N2, RXD2, TXD2);
}

0
投票

我可以连接,但 ID 有问题。默认ID是1。我想更改它。旧版本的 ID 在持有者寄存器 0101 中,我可以使用 06 写入功能来更改 ID。这个版本没有持有寄存器号0101。我不知道如何更改ID,因为我不知道哪个地址有多个ID。 您有什么想法或新地址吗?感谢您的帮助。

© www.soinside.com 2019 - 2024. All rights reserved.