RPi 到 Arduino 通过 rs485 没有收到所有字符

RPi to Arduino thru rs485 not receiving all characters

我已将此 USB to RS485 Converter plugged on the RPi and have this TTL to RS485 连接到 Arduino Nano。我使用的是 9600 波特率。我需要在每个方向上最多发送 16 个字符,但是当我尝试发送时,在接收端我只收到前 11 个字符......如果我使用 USB 电缆将 Arduino Nano 连接到 RPi,则通信进行得很顺利......

这是 Arduino 代码:

int rs485CtrlPin = 6;

void setup() {
  pinMode(rs485CtrlPin, OUTPUT);
  Serial.begin(9600);
  while (!Serial);
}

void loop() {
  digitalWrite(rs485CtrlPin, HIGH);   
  Serial.println("cmd1,12345678901");
  delay(10);
  digitalWrite(rs485CtrlPin, LOW);    
  delay(5000);
}

这是 Python 代码:

import serial
import time
import datetime

ts = time.time()
st = datetime.datetime.fromtimestamp(ts).strftime('%Y-%m-%d %H:%M:%S')
print st + ": Session started!"
ser = serial.Serial('/dev/ttyUSB0', 9600, timeout=0)
while True:
    try:
        if(not(ser.isOpen())):
            ser.open()
        cmd = ser.readline()
        ts = time.time()
        st = datetime.datetime.fromtimestamp(ts).strftime('%Y-%m-%d %H:%M:%S')
        print st + ": " + cmd
    except Exception as ex:
        error = "Exception is: " + ex.__str__()
        if(not(ser == None)):
            ser.close()
            ser = None
            ts = time.time()
            st = datetime.datetime.fromtimestamp(ts).strftime('%Y-%m-%d %H:%M:%S')
            print st + ": " + error

所以我收到 "cmd1,12345678901" 而不是收到 "cmd1,123456"。

请记住,即使我使用相同的 RS485 转换器将 Arduino Nano 连接到我的 PC 上并使用 Arduino 的串行监视器 IDE,我也会得到相同的结果...如果我设置波特率速率到 115200 我又收到 2 个字符 "cmd1,12345678" 但由于我将使用 RS485 超过 50 米的距离,我可能需要使用最大 9600 波特率...

感谢来自 Arduino 论坛的用户 Riva 我发现我是多么愚蠢... 在 Arduino 代码中,我在发送数据和关闭 RS485 的传输引脚之间添加了 10 毫秒的延迟,在 9600 波特率(每秒 1200 字节)下你只能发送 12 字节。要使用完整的 1200 字节数据传输,您需要添加 1 秒的延迟(这在您考虑时很明显,但我似乎没有)...

可在 Arduino 论坛上找到完整主题 here