Отправка последовательных данных в Arduino с использованием скрипта Python - PullRequest
0 голосов
/ 12 ноября 2018

Я сталкиваюсь со специфической проблемой при записи символов в Arduino с использованием последовательной связи Python в MacOS 10.14.

Arduino запрограммирован на чтение строки, ее синтаксический анализ и выполнение действий ШИМ для запуска автомобиля.

Канал последовательной связи Ardiuno сконфигурирован для приема строк в формате < A, B, C, D >, где ABCD - это числа, которые обозначают направление автомобиля, скорость, направление рулевого управления и положение рулевого управления.

Проблема в том, что когда я отправляю строку с монитора последовательного порта или через среду разработки Python, строка принимается, анализируется должным образом и команда выполняется успешно.

Однако, если я напишу простую программу в файле write.py и выполню ее из командной строки, ничего не произойдет.

import serial
ser = serial.Serial('/dev/cu.usbmodem14301', 9600)
data = '<1,150,0,0>'
ser.write(data.encode())

Если я запускаю этот скрипт из терминала macOS с помощью команды:

python write.py

ничего не происходит. Что мне здесь не хватает?

Ответы [ 3 ]

0 голосов
/ 12 ноября 2018

Скорее всего, здесь происходит то, что данные не отправляются на последовательный порт.

Существует простой способ проверить это.Подключите Arduino к вашему ноутбуку (я подозреваю, что это Mac) и запустите последовательный монитор в Arduino IDE.В последовательном мониторе введите <1,150,0,0> и нажмите отправить.

Светодиод tx на Arduino будет мигать.Теперь, когда вы знаете, как выглядит шаблон, повторите тот же эксперимент с кодом Python.

Если индикатор не мигает одинаково, у вас есть проблема с доступом к последовательному порту, которую можно устранить, используя инструкции вследующая ссылка Доступ к последовательным портам USB с использованием Python и pyserial

Если нет, то я в тупике.

0 голосов
/ 12 ноября 2018

Новое соединение USB с ser=serial.Serial('/dev/cu.usbmodem14301',9600) сбрасывает Arduino.Данные, отправленные сразу после подключения, теряются из-за загрузки Arduino.

0 голосов
/ 12 ноября 2018

Может случиться так, что порт находится в текстовом режиме и не будет отправлять данные до отправки новой строки:

data = '<1,150,0,0>\n'
ser.write(data.encode())

или вызывается flush ().

data = '<1,150,0,0>'
ser.write(data.encode())
ser.flush()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...