首页 文章

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

提问于
浏览
0

我将这个USB to RS485 Converter插在RPi上并将此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转换器在我的PC上连接Arduino Nano并使用Arduino IDE的串行监视器,我也会得到相同的结果......如果我将波特率设置为115200,我会再收到2个字符“ cmd1,12345678“但由于我将使用RS485超过50米的距离,我可能需要使用最大9600波特率......

1 回答

  • 0

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

    关于Arduino论坛的完整主题可以在here找到 .

相关问题