You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

树莓派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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 19:45:56