Последовательная связь 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
- Проблемы с последовательной связью от Arduino к Bluetooth HC-05
- Как Arduino может проверить, подключен ли он к ПК и включен ли компьютер?
- Как отправлять и получать беззнаковые целые (unsigned int) от одного arduino к другому arduino
- Использование последовательных контактов TX/ RX для связи по USB
- NRF24L01+ (библиотека TMRH20): Получатель получает пустые данные
начните с отправки только одного символа каждую секунду, @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