Python脚本与Arduino Sketch能否共用电脑同一串口通信?
解决Arduino与Python同串口通信冲突的方案
串口属于独占式硬件资源,操作系统不允许两个进程同时打开并占用同一个串口端口,因此不存在让Arduino Sketch与Python脚本同时直接使用同一串口的方法。以下是几种可行的替代解决方案:
方案一:单进程独占串口,关闭IDE监视器后用Python接收
上传完Arduino Sketch后,关闭Arduino IDE的串口监视器(它会持续占用串口),再运行Python脚本打开该串口接收数据。
Python接收示例代码(依赖pyserial库):import serial import time # 替换为你的串口名称(如COM3、/dev/ttyUSB0)和波特率 ser = serial.Serial('COM3', 9600, timeout=1) time.sleep(2) # 等待Arduino重启完成 while True: if ser.in_waiting > 0: data = ser.readline().decode('utf-8').strip() print(f"Received: {data}")对应Arduino发送代码:
void setup() { Serial.begin(9600); } void loop() { Serial.println("Sample data from Arduino"); delay(1000); }方案二:用软件串口拆分通信链路
如果你的Arduino有闲置IO引脚,可借助SoftwareSerial库模拟额外串口,让硬件串口给Python发数据,软件串口用于Arduino IDE的调试监视,两者互不占用。
Arduino示例代码:#include <SoftwareSerial.h> // 定义软件串口的RX、TX引脚 SoftwareSerial debugSerial(2, 3); void setup() { Serial.begin(9600); // 硬件串口,供Python连接 debugSerial.begin(9600); // 软件串口,供Arduino IDE监视器连接 } void loop() { Serial.println("Data for Python"); debugSerial.println("Debug info for IDE"); delay(1000); }运行时Python连接硬件串口,Arduino IDE监视器选择软件串口对应的COM端口(可在设备管理器中查看)。
方案三:中间进程中转数据
若需实现双向交互的复杂场景,可编写一个独占串口的中间程序,负责从Arduino接收数据并转发给Python,同时将Python的指令发送给Arduino。这种方式复杂度较高,仅适用于多进程协同的特殊需求。
内容的提问来源于stack exchange,提问作者Lily
相关产品推荐
相关产品推荐

