【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()

 

posted @ 2025-03-10 11:22  码出境界  阅读(33)  评论(0)    收藏  举报