Я написал python скрипт, использующий pyserial для подключения NVIDIA Jetson Nano через последовательную связь с Arduino Uno с использованием контактов Jetson nano J41 и Software Serial на Arduino Uno, но у меня возникают проблемы с сообщениями, полученными на arduino uno, иногда Я получил плохие символы в сообщении. например, я отправляю с pyserial "hello world", и когда я проверяю серийный номер arduino, я получаю "he⸮lo" worlf * "
Также, когда arduino получает сообщение, оно отвечает с помощью MESSAGE_OK, а jetson nano всегда получает его прямо без странных символов. От jetson к uno принимаются плохие символы, но от nano к jetson все нормально. Я использую преобразователь уровня logi c для подключения последовательных контактов программного обеспечения arduino к контактам jetson nano uart.
Я пытался понять, что происходит, но безуспешно, если кто-то может помочь мне с предложениями или ответом, который был бы великолепен.
Я пытаюсь привести самый простой пример, вот мой код для Arduino и Jetson Nano:
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 Nano:
#!/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 c не может декодировать байт 0xe c в позиции 0: неожиданный конец данных