如何使用Python向Arduino发送整型数据控制舵机
Python控制Arduino舵机发送整型数据解决方案
核心逻辑修正
Python串口传输默认发送字节流,直接发送数值变量会被拆分为ASCII字符传输,Arduino无法直接识别为整型,需要先统一两端的传输规则,再做数据转换。
Python端代码示例
import serial import time # 替换为你的Arduino对应串口端口,波特率和Arduino端保持一致 ser = serial.Serial("COM3", 9600, timeout=1) # 必须加延迟,等待Arduino上电复位完成,否则第一次发送会失效 time.sleep(2) # 你的原有计算逻辑,确保a变量已赋值且不为0 a = 10 # 此处替换为你自己的a变量实际值 first = 680 / a last = int(180 / first) # 先转换为整型,避免浮点传输错误 # 转成带换行符的字节串发送,换行符作为Arduino识别数据结束的标记 ser.write(f"{last}\n".encode("utf-8")) print(f"已发送舵机控制值:{last}") ser.close()
Arduino端接收控制代码示例
#include <Servo.h> Servo myServo; // 舵机信号引脚接D9,可根据实际接线修改 const int servoPin = 9; void setup() { Serial.begin(9600); // 波特率和Python端完全一致 myServo.attach(servoPin); } void loop() { if (Serial.available() > 0) { // 读到换行符为止,取完整的控制数据 String receiveData = Serial.readStringUntil('\n'); // 转换为整型 int servoPos = receiveData.toInt(); // 校验数值在舵机合法控制范围(0-180)内,避免损坏硬件 if (servoPos >= 0 && servoPos <= 180) { myServo.write(servoPos); // 可选:回传收到的数值给Python做校验 Serial.print("已执行舵机角度:"); Serial.println(servoPos); } } }
常见问题排查
- 确认Python填写的串口端口和设备管理器/系统信息中Arduino的端口一致
- 两端波特率必须完全匹配,不能有偏差
- 舵机不要直接用Arduino的5V引脚供电,电流不足会导致舵机无响应,误以为是数据发送失败
- 发送前确认last变量计算结果为合法的0-180范围内的整型
内容的提问来源于stack exchange,提问作者testy
相关产品推荐
相关产品推荐

