我编写了一个用pyserial连接NVIDIA Jetson Nano的python脚本,通过与Arduino uno的串行通信,使用Jetson纳米J41引脚和Arduino Uno上的软件系列连接NVIDIA Jetson nano,但我对在arduino Uno上收到的消息有问题,有时我在消息中出现了坏字符。例如,我用pyserial "hello world“发送,当我检查arduino系列时,我得到了”he⸮lo“worlf*。
另外,当arduino收到一条消息时,它会用一个MESSAGE_OK来回答,而jetson总是在没有奇怪字符的情况下得到正确的消息。从杰特森到尤诺,坏角色被接收,但从奈诺到杰特森,这是可以的。我使用逻辑电平转换器连接arduino软件系列引脚到jetson纳米uart引脚。
我一直在努力弄清楚到底是怎么回事,但没有成功,如果有人能帮我提建议,或者答案会很棒。
我正在尝试一个最简单的例子,下面是我为arduino和jetson编写的代码:
Arduino:
#include <SoftwareSerial.h>
String a;
// Arduino uno Ext Serial pins
int ext_rx_pin = 9;
int ext_tx_pin = 8;
SoftwareSerial ext(ext_rx_pin, ext_tx_pin); //RX, TX
void setup() {
// opens serial port
Serial.begin(38400);
// Setup external serial connection to jetson
ext.begin(38400);
}
void loop() {
while (ext.available() > 0) {
a = ext.readStringUntil('\n'); // read the incoming data as string
// Print message on ide console
Serial.println(a);
// Answer to jetson
ext.print("MESSAGE_OK");
ext.print("\n");
}
}Jetson:
#!/usr/bin/python3
import time
import serial
serial_port = serial.Serial(
port="/dev/ttyTHS1",
baudrate=38400,
timeout=0.5
)
# Wait a second to let the port initialize
time.sleep(1)
arduino_message = ""
wait = True
try:
while True:
text = input("Input message: ")
print("Sending:", text)
text = text + "\n"
print(text.encode())
for i in text:
serial_port.write(i.encode('utf-8'))
time.sleep(0.1)
wait = True
while wait:
if serial_port.inWaiting() > 0:
data = serial_port.read()
arduino_message = arduino_message + data.decode('utf-8')
if data == "\n".encode():
wait = False
print(arduino_message)
arduino_message = ""
except KeyboardInterrupt:
print("Exiting Program")
except Exception as exception_error:
print("Error occurred. Exiting Program")
print("Error: " + str(exception_error))
finally:
serial_port.close()
pass另外,如果我试图回显从jetson发送到uno,然后从uno发送到jetson的内容,我会得到这条消息,因为错误字符:错误:'utf-8‘编解码器无法在0位置解码字节0 0xec :数据的意外结束。
发布于 2020-04-22 06:20:26
在预期字符和接收字符中存在一些单比特和双比特错误。这可能是电气和/或时间问题。
例如:
空间(
0010 0000) =>“(0010 0010)
D (0010 0010) => f (0110 0110)
N (0000 1011和0000 1010) => *(其中之一是0010 1010)
尝试使用一个较慢的波特率之间的董事会,因为时间是一个特别的问题与软件系列。
或者,使用Arduino Uno上的硬件串行端口与另一个板进行通信。
https://stackoverflow.com/questions/61357759
复制相似问题