简体   繁体   中英

Python/Arduino Serial communication

We are trying to communicate from Python to our Arduino, but are encountering an issue when writing to the serial port from 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()

The following is the error that we receive:

return len(data) TypeError: object of type 'int' has no len()

writelines accepts a list of strings so you can't use it to send a single string. Instead use 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()

Your code works on my computer. I think the function you're trying to use ( writelines ) was added not that long ago to pyserial so maybe you are running on an outdated version.

In any case, as far as I know, writelines is inherited from the file handling class and you don't really need to use it for what you're trying to do. Actually I don't think it's even well documented

Just change it to:

ser.write(byte_command) 

If you prefer you can see what version of pyserial you have and/or update.

To check your version run: pip3 list | grep serial pip3 list | grep serial

If you don't have version 3.4 you can update with: pip3 install pyserial --upgrade

Considering how writelines works for files (see, for instance here ) your error might actually be related to the core Python you have (for your reference I'm running Python 3.7.3).

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM