使用PyFirmata连接Arduino Mega 2560与Python时伺服无响应求助
解决方法
1. 修复核心代码错误
你的rotateServo函数存在致命问题:函数接收了angle参数,但实际调用write()时写死了固定值180,完全没用到传入的角度变量,导致伺服根本不会按循环逻辑调整角度。修改后的函数:
def rotateServo(pin, angle): board.digital[pin].write(angle) sleep(0.015)
2. 完善Firmata通信流程
PyFirmata需要启动迭代器来维持与Arduino的持续通信,否则可能出现通信阻塞导致板卡无响应。在初始化板卡后添加迭代器启动代码:
from pyfirmata import ArduinoMega, SERVO, util from time import sleep port = "/dev/cu.usbmodem143301" joint_pin = 9 base_pin = 10 board = ArduinoMega(port) # 启动迭代器处理通信 it = util.Iterator(board) it.start() # 初始化两个伺服的引脚模式 board.digital[base_pin].mode = SERVO board.digital[joint_pin].mode = SERVO
3. 其他排查要点
- 端口验证:打开Arduino IDE,在「工具→端口」中复制准确的端口路径,避免端口写错
- 电源检查:伺服电机需要独立的5V外部电源(电流≥1A/每台),Arduino的USB供电电流不足以驱动伺服,必须确保伺服电源与Arduino共地
- Firmata固件确认:上传Arduino IDE自带的
StandardFirmataPlus(而非修改samplingInterval的StandardFirmata),兼容性更好 - 引脚接线:确认伺服信号线接对应数字引脚(Mega的9、10均为PWM引脚,符合伺服要求),地线必须和Arduino、电源的地线连接在一起
内容的提问来源于stack exchange,提问作者Eeshan Mishra
相关产品推荐
相关产品推荐

