我有一个 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();
}
我已确保接线图正确。如何修复它?我很困惑,因为网上没有相关的解决方案。
虽然制造商声称该设备可以在 9600 8N1 上运行,但我的设备只能在 9600 8N2(或 8X1 + 任何奇偶校验)上运行。另外,等待响应需要很大的超时时间(在我的例子中,稳定的响应只有1000毫秒或更长的超时时间)。
完全正确,一些 MD02 传感器 (SHT20) 在 9600 和 8N2 上出现。读取数据之前一定要检查
代码:
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
Serial2.begin(9600, SERIAL_8N2, RXD2, TXD2);
}
我可以连接,但 ID 有问题。默认ID是1。我想更改它。旧版本的 ID 在持有者寄存器 0101 中,我可以使用 06 写入功能来更改 ID。这个版本没有持有寄存器号0101。我不知道如何更改ID,因为我不知道哪个地址有多个ID。 您有什么想法或新地址吗?感谢您的帮助。