Arduino与PC通信:Python串口通信库PySerial应用

追风的人
追风的人
发布时间:2026-09-08| 2人浏览过
原创

认识Arduino串口通信并准备PySerial环境

Arduino与PC之间的通信主要依赖板载USB转串口芯片(如ATmega16U2或CH340)实现。当开发板通过USB线连接电脑时,操作系统会将其虚拟为一个串行通信端口,Windows环境下通常显示为COMx,Linux或macOS下则为/dev/ttyUSBx或/dev/cu.usbmodem。通信的核心参数包括串口号与波特率,其中波特率决定了数据传输速率,Arduino官方示例与多数传感器模块默认使用9600或115200。在Python端,需借助PySerial库完成底层串口操作。打开系统终端或命令提示符,执行pip install pyserial即可完成安装。安装结束后,在Python交互环境中输入import serial并回车,若无ModuleNotFoundError报错则说明环境就绪。此时可调用serial.tools.list_ports.comports()遍历当前可用端口,结合设备管理器确认Arduino对应的物理端口号,为后续建立稳定连接做好充分准备。

展示Arduino通过USB连接电脑,以及电脑设备管理器或串口工具中识别Arduino串口的真实界面。
Arduino IDE中选择已连接开发板的串口,并通过串口监视器进行通信。

使用PySerial打开Arduino串口并发送数据

建立连接的核心是调用serial.Serial()类实例化串口对象。典型初始化代码为ser = serial.Serial('COM3', 9600, timeout=1),其中第一个参数必须替换为实际识别到的Arduino端口号,第二个参数需与Arduino代码中Serial.begin()设定的波特率严格一致,第三个参数timeout设置读取超时时间(单位为秒),用于防止程序因等待数据而永久阻塞。向Arduino发送数据时,需注意PySerial底层仅接受字节流(bytes),因此必须使用ser.write(b'LED_ON\n')或ser.write('LED_ON\n'.encode('utf-8'))进行编码转换。发送指令后建议调用ser.flush()强制清空输出缓冲区,确保数据完整送达。在实际操作中,可编写while循环配合input()函数,实现从键盘输入指令并实时发送至Arduino,通过观察终端无报错且串口指示灯闪烁,即可初步验证单向发送链路畅通。

展示Python代码编辑器中使用PySerial打开串口并向Arduino发送数据的真实开发界面,同时体现COM端口和baud rate配置。
Python环境中使用PySerial打开COM3串口,可看到9600波特率等串口参数。

让Arduino接收并返回数据完成双向通信

实现双向通信需在Arduino端编写数据监听与响应逻辑。在setup()函数中调用Serial.begin(9600)初始化串口,在loop()循环中使用if (Serial.available() > 0)判断缓冲区是否有数据到达,随后通过String cmd = Serial.readStringUntil('\n');读取以换行符结尾的完整指令。处理完毕后,使用Serial.println("Echo: " + cmd);将结果返回给PC。Python端则需配合使用ser.readline()方法逐行读取返回数据,该方法会阻塞运行直到遇到换行符或达到timeout设定值。读取到的原始字节数据需通过.decode('utf-8').strip()进行解码并去除首尾空白字符。将两端代码结合后,PC发送指令、Arduino解析并回传、Python打印结果的闭环即可形成。此流程不仅适用于纯文本交互,还可扩展为传感器数值采集或舵机角度控制等实际应用场景。

展示Arduino IDE串口监视器与Python程序配合进行数据收发的真实界面,体现发送指令和返回结果。
Python与Arduino IDE同时运行串口程序,终端持续显示Arduino返回的数据,体现双向通信。

验证通信结果并排查串口常见问题

通信验证可通过控制Arduino板载LED(引脚13)或回传特定状态字符串完成。例如发送TOGGLE指令,Arduino切换LED电平并返回LED_STATE: ON/OFF,若Python终端准确打印该状态且硬件响应同步,则证明双向链路正常。实际开发中常遇以下问题:一是串口被占用,Arduino IDE串口监视器或其他终端未关闭会引发PermissionError,需彻底关闭占用进程;二是COM端口漂移,USB重新插拔可能导致端口号变化,建议在代码中动态扫描可用端口;三是波特率不匹配,两端速率不同将输出乱码,务必核对Serial.begin()与Serial()参数;四是自动复位干扰,打开串口时DTR信号会触发Arduino重启,可在初始化时添加dsrdtr=False, rtscts=False或插入time.sleep(0.1)避开复位期;五是换行符不一致,确保Python发送与Arduino读取均统一使用\n作为结束标志,避免readline()无限等待。

展示Arduino与Python串口通信成功后的终端输出或控制效果,并配合串口监视器体现正常收发结果。
PySerial串口被其他程序占用时的异常输出,可用于排查端口访问失败问题。
相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。