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

如何使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 07:36:03