一、硬件层:传感器与接口分类
- GPIO 接口
- DHT11 温湿度传感器:单总线,输出 0/1 时序信号;量程温度 0~50℃、湿度 20~90% RH,精度温度 ±2℃、湿度 ±5%,工作电压 3.3~5.5V。
- HC-SR04 超声波测距:Trig 触发引脚、Echo 回波引脚;量程 2cm~450cm,精度 0.3cm,5V 供电,依靠时序计算距离。
- I2C 接口
- BH1750 光照传感器:3.3V 供电,42 引脚 SDA/SCL,支持多种采样模式,16bit 光照数据输出。
- MAX30100 血氧心率、MPU6050 六轴姿态、SHT30 温湿度,全部走 I2C 总线,挂载到 I2C 子系统。
- UART 串口
- ATGM336H GPS 模块:串口输出 NMEA-0183 协议报文,解析时间、经纬度、卫星信息。
- UART3 接三相电表,Modbus-RTU 协议,RS485 差分信号,读写电表寄存器。
- ADC 模拟采集
- MQ-2 烟雾传感器:模拟电压输出,0~3.3V 输入到 IMX6 的 ADC,12 位分辨率,把电压换算成烟雾浓度。
二、Linux 底层驱动框架(核心知识点)
所有设备都遵循 Linux platform 平台设备驱动模型,设备树 + 驱动分离思想:
- 开发流程:写设备树节点(platform 设备)→ 编写 platform_driver 驱动 → 驱动 probe 函数完成资源匹配、硬件初始化 → 注册字符设备 → 应用层 open/read 读写
/dev/xxx设备文件。 - 各总线内核子系统:
- GPIO 子系统 :
pinctrl引脚配置,申请引脚,高低电平控制、时序模拟(DHT11 单总线就是软件模拟时序)。 - I2C 子系统 :
i2c_driver、i2c_add_driver,i2c_transfer收发报文;I2C 适配器、从设备地址匹配,封装底层 I2C 读写,应用层直接读写 i2c 设备节点。 - UART 串口子系统 :内核自带串口驱动,应用层
open打开tty设备,配置波特率、数据位、校验位、停止位,read 读取串口原始数据。GPS、Modbus 电表都基于串口。 - ADC 子系统 :IIO 子系统框架,
sysfs下voltage_raw原始采样值,voltage_scale换算实际电压,再代入公式转为物理量(烟雾浓度)。
- GPIO 子系统 :
- 驱动开发通用步骤:模块加载
insmod,卸载rmmod;probe 匹配设备,填充文件操作结构体file_operations,实现open/read。
三、协议解析层:拿到原始数据之后
原始硬件信号读到应用层,需要协议解析,把字节流变成有意义的数据:
- NMEA0183(GPS) :
$开头帧,逗号分隔,包含时间、经纬度、卫星数量,校验和校验,解析出位置、时间信息。 - Modbus RTU(电表):串口二进制协议,从站地址 + 功能码 + 数据 + CRC 校验码;主站发送读寄存器指令,电表返回电能数据。
- 传感器私有时序:DHT11 的起始信号、响应信号;BH1750 发送指令,等待采样完成读取光照原始值,再按手册公式换算物理量。
四、上层业务与 AI 应用
原始传感数据完成解析后,进入业务层:
- 基础应用:数据采集、存储、上报。
- AI Agent 业务流:
Workbench调度,调用 Deepseek、Kimi 大模型、GPT;AI 负责对话、解读传感数据、判断告警、项目需求分析、传感器选型决策。
简单说:硬件采集 → Linux 驱动拿到原始数据 → 协议解析得到物理量 → AI 上层做智能分析决策。
五、整套架构链路总结
传感器硬件 → 总线(GPIO/I2C/UART/ADC) → Linux 内核子系统 + platform 驱动 → /dev 设备文件 /sysfs 节点 → 用户态应用读取原始数据 → 协议解析换算物理量 → AI 业务层做智能处理