1. 确认 CH340 驱动加载
现代 Linux(Ubuntu20+/Debian/ 树莓派 / 嵌入式 Linux)内核自带ch341驱动模块
# 查看是否加载驱动lsmod | grep ch341# 未加载则手动载入sudo modprobe ch341
嵌入式裁剪内核无驱动时,去沁恒官网下载CH341SER_LINUX源码交叉编译.ko驱动加载。
2. 插入 USB 测温套件,查找串口设备节点
# 查看USB硬件,识别CH340(VID=1a86,PID=7523)lsusb# 查看串口设备,一般生成 /dev/ttyUSB0ls /dev/ttyUSB*# 查看内核日志确认设备dmesg | grep ttyUSB

3. 开放串口读写权限(必做,否则打开串口失败)
# 方案1:临时权限,重启失效sudo chmod 666 /dev/ttyUSB0# 方案2:永久加入dialout用户组,无需sudosudo usermod -aG dialout $USER# 生效需重新登录终端
常见冲突修复
Ubuntu 自带brltty盲文程序占用串口,识别不到设备时卸载:
sudo apt remove brltty
工具安装串口调试工具
# Ubuntu/Debiansudo apt install minicom screen cu
1. screen 快速收发测试
# MS型号9600波特率screen /dev/ttyUSB0 9600# FS型号115200screen /dev/ttyUSB0 115200
进入界面后:
- 按
Ctrl+A再:,输入send AA(HEX 指令读物温)
2. minicom 可视化串口调试
minicom -D /dev/ttyUSB0 -b 9600
配置参数:8 数据位、无校验、1 停止位,发送 HEX AA/AB读取温度。
1. 安装串口库 pyserial
2. 完整测温采集脚本(自动循环读取、解析温度)
import serialimport time# 配置参数,按需修改SERIAL_DEV = ”/dev/ttyUSB0”BAUD = 9600# MS型号9600;FS改为115200def get_temp(): try:# 打开串口:8N1,超时300ms匹配传感器采样周期 ser = serial.Serial( port=SERIAL_DEV, baudrate=BAUD, bytesize=8, parity='N', stopbits=1, timeout=0.3 ) while True:# 发送0xAA读取物体温度,发送0xAB读取体温 ser.write(bytes([0xAA]))# 读取返回ASCII字符串 recv = ser.readline().decode(”ascii”).strip() if recv.startswith(”+”): raw = int(recv.replace(”+”, ””)) temp = raw / 10.0 print(f”实时温度:{temp} ℃ 原始数据:{recv}”) time.sleep(0.3) except serial.SerialException as e: print(”串口打开失败:”, e) except KeyboardInterrupt: ser.close() print(”采集结束,串口关闭”)if __name__ == ”__main__”: get_temp()
运行:python3 temp_sensor.py
适用于无 Python、纯 C 开发的工控设备,基于 Linux 原生 termios 串口 API
#include#include#include#include#include#include#define SERIAL_PATH ”/dev/ttyUSB0”#define BAUD_RATE B9600 // B115200对应FS型号// 初始化串口intserial_init(){ int fd = open(SERIAL_PATH, O_RDWR | O_NOCTTY | O_NDELAY); if(fd < 0){ perror(”open serial failed”); return -1; } struct termios opt; tcgetattr(fd, &opt); cfsetispeed(&opt, BAUD_RATE); cfsetospeed(&opt, BAUD_RATE); opt.c_cflag &= ~PARENB; // 无校验 opt.c_cflag &= ~CSTOPB; // 1停止位 opt.c_cflag &= ~CSIZE; opt.c_cflag |= CS8; // 8数据位 tcsetattr(fd, TCSANOW, &opt); return fd;}intmain(){ int fd = serial_init(); if(fd < 0) return -1; unsigned char cmd_obj[] = {0xAA}; // 读物温指令 char buf[64]; while(1) { write(fd, cmd_obj, 1); int len = read(fd, buf, sizeof(buf)-1); if(len > 0){ buf[len] = '\0'; if(buf[0] == '+'){ int raw = atoi(buf+1); float temp = raw / 10.0f; printf(”温度:%.1f ℃\n”, temp); } } usleep(300000); } close(fd); return 0;}
编译运行:
- 数据本地存储
- 网络上传:Python 增加 MQTT/TCP 代码,把温度推送至服务器;
- 系统后台常驻:编写 systemd 服务,开机自动采集温度,断线自动重连串口。
- CH340 驱动未加载;USB 接触不良;brltty 占用串口;内核无 ch341 模块
- 执行
sudo usermod -aG dialout $USER重新登录
- TX/RX 接线接反;波特率设置错误;传感器 3.3V 供电异常
整套 Linux 读取 USB 测温套件操作流程到此讲解完毕,代码复制即用,快速实现设备自动测温采集。
关注公众号,回复关键词:**Linux 测温开发**,即可获取JJMEUSB红外测温套件配套资料。