Последовательная связь USB arduino nano и jetson nano
Я хочу обмениваться данными между Jetson nano и arduino nano через последовательный порт.
Я написал простой скрипт для проверки функциональности, но получаю странные данные
вот код ардуино
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
}
void loop() {
// put your main code here, to run repeatedly:
Serial.println("work fine");
delay(10000);
}
а это код Python, работающий на jetson nano
import serial
import time
arduino = serial.Serial('/dev/ttyUSB0', 9600, timeout=1)
while True:
try:
data = arduino.readline()
if data:
print(data)
print('Hi Arduino')
except:
arduino.close
вывод
b'\x17\x0f\t\x0b\x01\x06\t\x0e\x15\r\n'
Hi Arduino
если пробовал разные скорости передачи данных, но ничего не изменилось.
при использовании последовательного монитора в Windows все работает нормально.
2 ответа
В этом вопросе/ответе по стеку подразумевается, что .readline() необходимо преобразовать в строку.
import serial
ser = serial.Serial("COM11", 9600)
while True:
cc=str(ser.readline())
print(cc[2:][:-5])
Я согласен с одним из комментариев к этому ответу, что его лучше написать так:
import serial
ser = serial.Serial("COM11", 9600)
while True:
cc=str(ser.readline())
cc=cc.decode("utf-8")
print(cc)
readline() возвращает числа... возвращает непечатаемые символы, @jsotola
... тогда возвращает "Байты"?, @st2000
нет никакой разницы между текстом и байтами... это все байты... разница в том, как вы представляете эти байты пользователю... код python печатает текст, потому что он "экранирует" непечатаемые символы... escape-символ - это `\`, @jsotola
Я также думаю, что это связано со следующей строкой,
data = arduino.readline()
Попробуйте следующее,
while True:
try:
arduino.flushInput() // Очистить буфер
data = arduino.readline()
// декодируем байты в формат str, аргумент 'utf-8' должен работать
data.decode('utf-8')
// удалить \r\t в выводе str
data.strip()
if data:
print(data)
print('Hi Arduino')
except:
arduino.close
Посмотрите, решит ли это вашу проблему.
Примечание. Я использовал скрипт ESP32 и Python с вышеупомянутыми изменениями, и он у меня работал.
Кроме того, как упоминалось в разделе комментариев, некоторая информация может отсутствовать в выводе 'b'\x17\x0f\t\x0b\x01\x06\t\x0e\x15\r\n' для меня это не воспроизводимо. Просто для справки, мой вывод строки байтов без изменений был b'work fine\r\n' не 'b'\x17\x0f\t\x0b\x01\x06\t\x0e \x15\r\n'
- перепроверьте скорость записи Arduino,
- перепроверьте скорость последовательного соединения Python,
- включить исправление скрипта py
посмотрите, поможет ли это решить вашу проблему.
- Загрузка Arduino Nano дает ошибку: avrdude: stk500_recv(): programmer is not responding
- В чем разница между библиотеками Software Serial? Какая из них совместима с Arduino Nano?
- Как отправить команду AT на sim800l с помощью SoftwareSerial
- Как получить больше 64 байт на Arduino?
- Проблемы с последовательной связью от Arduino к Bluetooth HC-05
- Как Arduino может проверить, подключен ли он к ПК и включен ли компьютер?
- Как отправлять и получать беззнаковые целые (unsigned int) от одного arduino к другому arduino
- Использование последовательных контактов TX/ RX для связи по USB
начните с отправки только одного символа каждую секунду, @jsotola
Интересно, может ли это быть проблемой преобразования UTF., @st2000
обратитесь к таблицам ASCII ... биты данных отбрасываются ... работа в шестнадцатеричном формате дает понять ... arduino отправляет
77, 6F, 72, 6B, 20, 66, 69, 6E, 65, 0D, 0Aи Jetson получает17, 0F, 09, 0B, 01, 06, 09, 0E, 15, 0D, 0A... возможно, несоответствие скорости или буфер данных переполняется входящими данными, @jsotolaЧто касается скорости, есть ли параметр, кроме скорости передачи данных, который может вызвать несоответствие? Я отправлял символ "I" каждые 10 секунд, но получил b'\t\r\n', @Abdelrahman Mohsen
Асинхронная последовательная передача имеет 3 дополнительных параметра: количество бит данных, использование четности, количество стоповых битов. Общий набор — 8-N-1, что означает 8 бит данных, без четности, 1 стоповый бит. Вам нужно это проверить. Несоответствие количества стоповых битов безвредно, если отправитель использует их больше, чем получатель., @the busybee