【Python】mac电脑的串口通讯
1、关于驱动问题
要做串口通讯,需要确定的是电脑系统上是否有相应的USB转串口的驱动,如果没有那么无法正确识别对应的串口设备。
可以查看外设的规格书或者询问固件/硬件工程师,确认使用的芯片型号,然后到芯片厂商官网查询驱动下载安装。
2、必要前提:安装Python
3、使用Python虚拟环境
(因为我的电脑的Python环境是由系统或者Homebrew管理的,禁止直接在系统环境中安装包,所以我启动Python虚拟环境)
(1)创建并进入一个合适的文件夹(虚拟环境的配置文件将放在此目录下)
(2)在终端中创建一个虚拟环境(比如叫 venv)
python3 -m venv venv
(3)激活虚拟环境(终端提示符前面出现 venv 表示当前已经处于虚拟环境中)
source venv/bin/activate
(4)在虚拟环境中安装 pySerial,这时就不会遇到外部管理环境的限制了
pip install pyserial
(5)在虚拟环境中运行你的脚本
python 123.py
(。。。)退出虚拟环境
deactivate
4、编写串口通讯脚本(比如123.py)
# 根据 ls /dev/tty.* 查询串口号 port = "/dev/tty.usbserial-027FD0B9" baud_rate = 115200 # 根据蓝牙模块要求调整波特率 import serial import threading def read_from_port(ser): """后台线程函数,不断读取串口数据并打印到终端""" while True: try: # 读取一行数据(以换行符为结束标志) data = ser.readline() if data: # 解码后打印(如果数据不是UTF-8编码,可根据实际情况调整编码) print("收到数据:", data.decode('utf-8', errors='replace').strip()) except Exception as e: print("读取数据出错:", e) break def main(): # 请根据实际情况修改串口号和波特率 port = "/dev/tty.usbserial-027FD0B9" # macOS下CP210x设备通常为此格式 baud_rate = 115200 try: ser = serial.Serial(port, baud_rate, timeout=1) print(f"成功打开串口:{port}") except Exception as e: print("打开串口失败:", e) return # 启动后台线程不断读取串口数据 read_thread = threading.Thread(target=read_from_port, args=(ser,)) read_thread.daemon = True # 设置为守护线程,主线程退出时自动结束 read_thread.start() # 主线程循环等待用户输入数据发送到串口 while True: user_input = input("请输入要发送的数据(输入 CLOSE 退出):") if user_input.strip().upper() == "CLOSE": print("退出程序,关闭串口...") break else: try: # 发送数据到串口(可添加换行符以匹配设备协议) ser.write((user_input + "\r\n").encode('utf-8')) except Exception as e: print("发送数据出错:", e) ser.close() if __name__ == "__main__": main()