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

使用pyserial发送指令控制Arduino舵机无响应问题求助

问题解决:Python pyserial发送指令控制Arduino舵机无响应

首先看你的Python代码里的致命错误:字符串使用了中文双引号“”,Python会将其识别为普通字符,导致发送的指令内容异常,甚至触发语法错误。请先将引号替换为英文双引号""。

除此之外,还有几个常见原因会导致该问题,可逐个排查:

1. 等待串口连接稳定

Arduino在串口被打开时会自动重启,若立即发送指令会因设备未完成初始化而丢失数据。可在打开串口后添加延迟:

import serial
import time

arduinoData = serial.Serial('com7', 115200)
time.sleep(2)  # 等待Arduino重启完成

while True:
    cmd = "<C,28,355>"
    arduinoData.write(cmd.encode())
    time.sleep(1)  # 降低发送频率,避免缓冲区溢出

2. 匹配串口监视器的换行/回车设置

Arduino IDE串口监视器默认会在输入指令末尾添加换行符(\n)或回车换行符(\r\n),而你的Python代码仅发送了指令本身,未添加结尾符。可尝试给指令补充对应符号:

# 若串口监视器设置为"换行"
cmd = "<C,28,355>\n"
# 若串口监视器设置为"回车换行"
cmd = "<C,28,355>\r\n"

3. 确保串口参数完全匹配

确认Arduino代码与Python的串口参数一致,除波特率115200外,还需检查数据位、停止位、奇偶校验。可显式指定参数避免匹配错误:

arduinoData = serial.Serial(
    port='com7',
    baudrate=115200,
    parity=serial.PARITY_NONE,
    stopbits=serial.STOPBITS_ONE,
    bytesize=serial.EIGHTBITS,
    timeout=1
)

4. 降低发送频率

原代码中while True会无限高频发送指令,导致Arduino串口缓冲区溢出,无法正确解析。添加延迟给设备足够处理时间,比如每次发送后等待1秒。

5. 验证发送内容正确性

可在Python中打印发送的字节数据,确认与串口监视器发送的内容一致:

cmd = "<C,28,355>\n"
print(f"发送的字节: {cmd.encode()}")
arduinoData.write(cmd.encode())

同时可在Arduino代码中添加串口打印逻辑,将接收到的内容输出到串口,直观确认设备是否收到正确指令。

内容的提问来源于stack exchange,提问作者Elie Youssef

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 03:36:29