Hi,
I bought an Arduino Opta AFX00002 mainly to use the built‑in RS485 for industrial Modbus devices.
My first test was with an N4DSA02 module (Dallas DS18B20 ==> Modbus RTU converter).
After many attempts, the Opta never received any valid response.
So I started debugging the hardware and finally discovered a major issue with the Opta RS485 interface.
To be sure, I sniffed the RS485 line using a simple USB‑RS485 adapter.
Here is the minimal test code I used:
cpp
#include <ArduinoRS485.h>
void setup() {
Serial.begin(115200);
while (!Serial) {}
Serial.println("Testing RS485 raw frame...");
RS485.begin(9600); // 8N1
}
void loop() {
uint8_t frame[] = {0xAA, 0xBB, 0xCC, 0xDD};
RS485.noReceive();
RS485.beginTransmission();
RS485.write(frame, sizeof(frame));
RS485.endTransmission();
RS485.receive();
delay(1000);
}
Expected frame on the RS485 line:
Code
AA BB CC DD
Actual frame sent by the Opta (sniffed):
Code
AA BB CC FF
The last byte is always modified by the Opta RS485 driver.
This happens with any frame, even non‑Modbus frames.
Because of this, the CRC of any Modbus RTU frame is always wrong, and no Modbus slave will ever respond.
This means the Opta RS485 interface is not sending raw UART data, but seems to apply some internal processing or CRC handling that cannot be disabled.
Conclusion
The built‑in RS485 of the Opta cannot currently be used for Modbus RTU, because the last byte of every frame is changed.
Workaround
Using Serial + an external UART‑to‑RS485 converter works correctly and sends the proper bytes.
Questions
-
Is this a known issue with the Opta RS485 driver?
-
Can someone from Arduino confirm this behavior?
-
Is there a fix planned or a way to disable the internal processing?
Thanks.
I wait your reply