Python / Arduino Последовательная связь - PullRequest
1 голос
/ 18 июня 2019

Мы пытаемся связаться с Python для нашего Arduino, но у нас возникла проблема при записи в последовательный порт с python

import serial
import time
ser = serial.Serial('/dev/ttyUSB0', 9600, timeout=1)
time.sleep(2)

user_input = 'L'
while user_input != 'q':
    user_input = input('H = on, L = off, q = quit' )
    byte_command = user_input.encode()
    print(byte_command)
    ser.writelines(byte_command)   # This line gives us the error.
    time.sleep(0.5) # wait 0.5 seconds
print('q entered. Exiting the program')
ser.close()

Вот ошибка, которую мы получаем:

возврат лен (данные) Ошибка типа: объект типа 'int' не имеет len ()

Ответы [ 2 ]

0 голосов
/ 18 июня 2019

Ваш код работает на моем компьютере. Я думаю, что функция, которую вы пытаетесь использовать (writelines), была добавлена ​​не так давно в pyserial, так что, возможно, вы используете устаревшую версию.

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

Просто измените его на:

ser.write(byte_command) 

Если вы предпочитаете, вы можете увидеть, какая у вас версия Pyserial и / или обновить.

Для проверки вашей версии запустите: pip3 list | grep serial

Если у вас нет версии 3.4, вы можете обновить с помощью: pip3 install pyserial --upgrade

Учитывая, как writelines работает с файлами (см., Например, здесь ), ваша ошибка может быть связана с вашим основным ядром Python (для вашей справки я использую Python 3.7.3).

0 голосов
/ 18 июня 2019

writelines принимает список строк, поэтому вы не можете использовать его для отправки одной строки. Вместо этого используйте write:

import serial
import time
ser = serial.Serial('/dev/ttyUSB0', 9600, timeout=1)
time.sleep(2)

user_input = 'L'
while user_input != 'q':
    user_input = input('H = on, L = off, q = quit')
    byte_command = user_input.encode()
    print(byte_command)
    ser.write(byte_command)   # This line gives us the error.
    time.sleep(0.5)  # wait 0.5 seconds
print('q entered. Exiting the program')
ser.close()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...