树莓派Python控Arduino灯带:如何选择正确USB端口
Arduino LED灯带控制:USB端口识别与Python代码配置问题
问题描述
- 尝试通过Python向连接Arduino和LED灯带的USB端口发送指令点亮灯带,无法识别正确的USB端口
- 测试
/dev/ttyUSB0到/dev/ttyUSB3均无效 - 通过
lsusb查到Arduino设备:Bus 001 Device 005: ID 2341:0043 Arduino SA Uno R3 (CDC ACM)
- 用
python -m serial.tools.list_ports列出端口:/dev/ttyACM0 /dev/ttyAMA0 - 替换端口后出现权限错误:
Error could not open port /dev/ttyAMA0: [Errno 13] Permission denied: '/dev/ttyAMA0'
- 执行
sudo chmod 666 /dev/ttyAMA0解决权限后,出现编码错误:raise TypeError('unicode strings are not supported, please encode to bytes: {!r}'.format(seq))
TypeError: unicode strings are not supported, please encode to bytes: '255,0,0,255'
解决方案
1. 确定正确的USB端口
使用Linux命令查看系统日志中识别的Arduino端口:
dmesg | grep "tty"
输出示例:
[ 8.150923] cdc_acm 1-1.1:1.0: ttyACM0: USB ACM device
注:ttyAMA0通常是树莓派自带串口,并非USB连接的Arduino,正确端口为/dev/ttyACM0。
2. 解决端口权限问题
- 临时权限设置(重启后失效):
sudo chmod 666 /dev/ttyACM0 - 永久权限设置(推荐):将当前用户加入
dialout组,无需每次手动修改权限:
执行后需重新登录生效。sudo usermod -aG dialout $USER
3. 修正Python代码的编码问题
serial.write()仅接收字节类型数据,需将字符串编码为bytes:
修正后的代码:
import serial r = "255" g = "0" b = "0" i = "255" data = r + "," + g +"," + b + "," + i print(data) # 配置正确的端口与参数 ser = serial.Serial( port='/dev/ttyACM0', baudrate=9600, parity=serial.PARITY_NONE, stopbits=serial.STOPBITS_ONE, bytesize=serial.EIGHTBITS, timeout=1 ) # 将字符串编码为UTF-8字节后发送 ser.write(data.encode('utf-8')) ser.close()
内容的提问来源于stack exchange,提问作者Daniel IG
相关产品推荐
相关产品推荐

