Python 3 控制 Arduino UNO - 串口通信点亮内置 LED 入门教程
元器件清单
| 元器件 | 数量 |
|---|---|
| Arduino UNO | 1 |
| USB 数据线 (Type-A to Type-B) | 1 |
项目简介
网上大量 Python 控制 Arduino 教程基于 Python 2,语法与 Python 3 不兼容(如 `print` 语句、串口写入字节格式)。本项目专为 Python 3.7+ 编写,演示最基础的“Hello World”:通过串口发送指令控制 Arduino 内置 LED (D13) 亮灭,建立跨语言通信基础。

环境准备
- 安装 Python 3.7+(勾选 Add to PATH)
- 安装串口库:
pip install pyserial - 安装 Arduino IDE
Arduino 端代码
int cmd = 0;
void setup() {
pinMode(LED_BUILTIN, OUTPUT); // D13 内置 LED
Serial.begin(9600);
}
void loop() {
if (Serial.available() > 0) {
cmd = Serial.read(); // 读取单字节指令
}
if (cmd == '1') {
digitalWrite(LED_BUILTIN, HIGH); // 点亮
} else if (cmd == '0') {
digitalWrite(LED_BUILTIN, LOW); // 熄灭
}
}
关键点:`Serial.read()` 返回 ASCII 码值,'1'=49, '0'=48。直接与字符常量比较最直观。
Python 3 端代码
import serial
import time
# 修改 COM 端口号 (Windows: COMx, Linux/Mac: /dev/ttyUSBx 或 /dev/ttyACMx)
arduino = serial.Serial(port='COM1', baudrate=9600, timeout=1)
time.sleep(2) # 等待 Arduino 复位稳定
print("输入 1 点亮 LED,输入 0 熄灭 LED,Ctrl+C 退出")
try:
while True:
user_input = input().strip()
if user_input == '1':
arduino.write(b'1') # Python 3 必须发送 bytes 类型
print("LED 已点亮")
elif user_input == '0':
arduino.write(b'0')
print("LED 已熄灭")
else:
print("无效输入,请输入 1 或 0")
except KeyboardInterrupt:
print("\n程序已退出")
arduino.close()
Python 3 关键差异:
- `input()` 替代 `raw_input()`
- `serial.write()` 必须传入
bytes对象 (如b'1'),不能直接传字符串 - `print` 是函数,需加括号
运行步骤
- 先上传 Arduino 代码
- 打开串口监视器确认波特率 9600,然后关闭监视器(释放端口)
- 运行 Python 脚本:
python3 led_control.py - 在终端输入 1/0 控制 LED
常见问题
- Permission denied (Linux/Mac):`sudo usermod -a -G dialout $USER` 后重登录
- 端口被占用:关闭 Arduino IDE 串口监视器/绘图器
- 乱码/无响应:核对波特率、端口号、接线
扩展方向
- 发送多字节指令控制多路 PWM/舵机/电机
- Arduino 回传传感器数据,Python 绘图/记录/分析 (Matplotlib/Pandas)
- 结合 Tkinter/PyQt 做 GUI 控制面板
- 用 Flask/FastAPI 暴露 HTTP API,实现 Web/手机远程控制
原理图
仅需 Arduino UNO + USB 线,无额外电路。
制造工艺
- NodeMCU DHT22接入树莓派3B+ MQTT Broker:无缝物联网集成指南
- 基于 1Sheeld 与 Arduino 的盲聋人士沟通辅助系统
- Arduino UNO 驱动 16x2 LCD 实现动画与小游戏
- SERENA:基于 Arduino Mega 2560 与 TFT 触摸屏的多级密码报警系统
- Arduino 与智能手机打造智能电压表——简单易做的 DIY 项目
- Arduino Nano 驱动 128x64 OLED 实时运行康威生命游戏 (元胞自动机)
- 使用 Arduino Nano 和 RDA8057M 制作紧凑型 FM 收音机
- MKR1000 接入 Azure IoT:DHT22 温湿度实时上云监控
- 手把手教你打造树莓派 3 + Arduino 笔记本电脑
- 自制 AI 助手机器人:Arduino 与 Python 协同实现语音交互与肢体动作
- 基于 Arduino 的压力传感器与数据记录器:精准空气压力监测方案
- Arduino传感器:类型、应用与实战项目