#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. Иногда, когда вы записываете на последовательный порт, он также отвечает сообщением о том, что если запись прошла успешно, это сообщение может быть обработано с помощью функции чтения, не уверен, предоставляет ли используемый вами последовательный порт эту функцию или нет