Запись через UART на микроконтроллер

#python-3.x #pyserial #uart

#python-3.x #pyserial #uart

Вопрос:

Я новичок в python. Я использую BeagleBone Black Wireless, на котором установлен Debian 9.5, а также Python 3.5.3. Микроконтроллер подключен к моему BeagleBone через USB. Он считывает последовательную строку со скоростью передачи 9600 бод. Я могу управлять соленоидами для включения или выключения, отправив enable «9—- » на микроконтроллер, где — может быть 0 или 1. чтобы включить соленоиды 1 и 3, мне пришлось бы отправить ‘91010’, чтобы отключить их все, мне пришлось бы отправить ‘90000’

Мне нужна программа на Python, которая помогла бы мне отправлять сигналы включения (9—- )

Я использую это из документации PYserial в качестве ссылки:

 import serial
ser = serial.Serial('/dev/ttyUSB0',9600, timeout = 0)  # open serial port
print(ser.name)         # check which port was really used
ser.write(str('91010'))     # write a string
line = ser.readline()
ser.close()             # close port
  

Если я запущу эту программу, теоретически, это сработает для включения соленоидов 1 и 3? В идеале я хотел бы создать функцию с 4 аргументами, по одному для состояния каждого соленоида, например, что-то вроде pwr_solenoid (1,1,1,1) отправило бы ‘91111’ по последовательному каналу, чтобы включить все соленоиды

Комментарии:

1. Вы запустили свою программу?

2. Нет, на моем микроконтроллере приложение, которое запускает программу, которая включает соленоиды, еще не готово, поэтому я не могу протестировать эту программу. Я также заказал кабель FTDI для отладки, но я его еще не получил. Если есть что-то, что, по вашему мнению, необходимо изменить / добавить, пожалуйста, укажите на это

Ответ №1:

Вам нужно записать данные как bytes например '91010'.encode() , используя https://pyserial.readthedocs.io/en/latest/pyserial_api.html#serial .Serial.write

Кроме того, если у последовательного порта есть способ сообщить вам, прошла ли операция записи успешно, вы также можете сделать это ser.read после записи с помощью https://pyserial.readthedocs.io/en/latest/pyserial_api.html#serial .Последовательный.прочитайте и обработайте этот вывод

Комментарии:

1. Спасибо вам за ваш ответ. Итак, для первого, было бы это: ser.write(‘91010’.encode(‘utf-8’)) вместо просто ser.write(‘91010’) ? Для второго, я должен просто добавить ser.read после строки, где я использую write?

2. Да, именно так вы должны форматировать свою запись, и, предполагая, что ваше чтение действительно отвечает, вам также нужно указать, сколько байтов вы хотите прочитать

3. Я только что заметил, что они для версий python после 2.5 принимают byte, bytearray и str. Разве тогда str не должен быть в порядке?

4. Я не понимаю, что мне нужно прочитать в этой задаче и что вы имеете в виду, если мое чтение действительно отвечает, не могли бы вы объяснить? У меня есть еще одна задача, требующая чтения, но я не думаю, что упоминал об этом в своем посте

5. Иногда, когда вы записываете на последовательный порт, он также отвечает сообщением о том, что если запись прошла успешно, это сообщение может быть обработано с помощью функции чтения, не уверен, предоставляет ли используемый вами последовательный порт эту функцию или нет