适配带蓝牙模块Arduino与Python的串口通信包推荐及注意事项
Arduino蓝牙模块与Python串口通信的包推荐及注意事项
推荐的Python串口通信包
1. pySerial
这是Python串口通信的事实标准,跨平台支持Windows、Linux、macOS,操作简单,完全兼容Arduino的Serial通信。
- 安装:
pip install pyserial - 核心功能:串口打开/关闭、读写数据、参数配置(波特率、数据位等)
2. pyserial-asyncio(可选)
如果你的Python程序需要异步处理(比如同时处理UI和串口通信),这个包是pySerial的异步扩展,基于asyncio实现,适合高并发场景。
- 安装:
pip install pyserial-asyncio
Arduino端无需额外包
Arduino自带的Serial库就能直接和蓝牙模块通信,只需确保蓝牙模块的接线和串口参数匹配:
- 接线:蓝牙模块的TX接Arduino的RX引脚,RX接Arduino的TX引脚(注意电平,HC-05/HC-06这类模块一般是3.3V电平,不要直接接Arduino的5V引脚,可能需要电平转换)
- 初始化:
Serial.begin(9600)(波特率和Python端保持一致)
关键注意事项
- 串口参数完全匹配:波特率、数据位(默认8)、停止位(默认1)、奇偶校验(默认无)必须和Arduino端完全一致,否则会出现乱码或无法通信。
- 正确识别端口:
- Windows:打开设备管理器,找到“端口(COM和LPT)”下的蓝牙虚拟串口
- Linux/macOS:在终端执行
ls /dev/tty*,找到类似/dev/ttyUSB0(Linux)或/dev/tty.usbmodemXXXX(macOS)的设备,Linux用户可能需要将自身加入dialout组以获取权限:sudo usermod -aG dialout $USER
- 先完成蓝牙配对:先在系统设置中完成蓝牙模块的配对,再通过虚拟串口连接,不要直接连接硬件串口(除非是USB转蓝牙模块直接插电脑)。
- 统一数据格式:建议用固定分隔符(如逗号、换行)或结构化格式(如JSON)传输数据,避免解析错误。比如Arduino端发送
"temp:25,hum:60\n",Python端拆分后提取数值。 - 异常处理:Python端要捕获串口断开、超时等异常,避免程序崩溃,比如用
try-except块处理serial.SerialException。 - 供电稳定性:蓝牙模块对电流有一定要求,供电不足会导致连接频繁断开,优先用外部电源供电,或确保Arduino的5V引脚能提供足够电流。
示例代码
Arduino端代码
void setup() { Serial.begin(9600); // 波特率与Python端一致 } void loop() { // 接收Python发送的命令 if (Serial.available() > 0) { String cmd = Serial.readStringUntil('\n'); cmd.trim(); if (cmd == "request_sensor") { // 模拟发送传感器数据 Serial.println("temp:25.3,hum:62.1"); } } delay(100); }
Python端代码(pySerial)
import serial import time # 替换为你的蓝牙虚拟串口端口号 serial_port = 'COM3' # Windows示例,Linux/macOS替换为'/dev/ttyUSB0'等 baud_rate = 9600 try: ser = serial.Serial(serial_port, baud_rate, timeout=1) time.sleep(2) # 给蓝牙模块留足连接时间 print("串口连接成功") while True: # 发送请求命令 ser.write(b'request_sensor\n') # 读取响应 response = ser.readline().decode('utf-8').strip() if response: print(f"收到传感器数据: {response}") time.sleep(1) except serial.SerialException as e: print(f"串口错误: {e}") except KeyboardInterrupt: print("用户终止程序") finally: if 'ser' in locals() and ser.is_open: ser.close() print("串口已关闭")
内容的提问来源于stack exchange,提问作者ShivaDahal99
相关产品推荐
相关产品推荐

