1. 项目概述1.1 系统定位与工程背景油田生产环境具有高危性、分布广、工况复杂等特点传统人工巡检存在响应滞后、覆盖盲区、主观误差大等固有缺陷。在无人值守井场、偏远集输站等场景中温湿度异常引发设备冷凝腐蚀、可燃气体泄漏导致爆炸风险、油压突变造成管线破裂等隐患均需毫秒级感知与分钟级响应能力。本系统并非通用物联网演示平台而是面向工业现场实际部署需求设计的嵌入式安全监控终端其核心约束条件包括工作温度范围需覆盖−20℃60℃满足北方冬季野外及南方夏季机柜内运行所有传感器信号链路具备抗工频干扰能力50Hz/100Hz共模噪声抑制本地报警响应时间≤300ms从ADC采样完成到蜂鸣器驱动信号输出蓝牙通信在无遮挡环境下稳定传输距离≥8m满足单井场设备布点需求。该系统采用“边缘感知本地决策云端协同”三级架构STM32F103RCT6作为边缘节点完成实时数据采集、阈值判断与声光报警HC-05蓝牙模块构建短距无线通道将结构化数据推送至移动终端上位机APP承担人机交互、历史数据分析与策略配置功能。整个设计规避了4G/NB-IoT等广域网方案带来的流量成本与基站依赖问题更适合中小型油田分阶段数字化改造。1.2 功能边界定义系统严格限定为安全参数监控终端不涉及执行机构控制如阀门启闭、泵组启停。所有报警均为状态指示型不触发自动干预动作。功能模块间存在明确的时序与优先级关系数据采集层SHT30I²C、MQ135ADC、陶瓷压力传感器ADC三路信号同步采样采样周期1s本地处理层OLED显示刷新率2Hz按键扫描采用硬件消抖软件计时器双重保障通信层蓝牙仅传输JSON格式结构化数据包含时间戳、参数值、报警标志位禁用透传模式以降低协议栈开销人机交互层APP端报警阈值修改指令经CRC校验后下发设备端接收成功后才更新EEPROM存储值。此边界设计确保系统可靠性聚焦于安全监控本质避免因复杂控制逻辑引入不可预测的故障模式。2. 硬件系统设计2.1 主控单元STM32F103RCT6选型依据选用LQFP64封装的STM32F103RCT6其资源分配严格匹配油田监控场景需求ADC资源片内12位ADC1配置为3通道扫描模式PA0/MQ135、PA1/压力传感器、PA4/内部温度传感器采样时间设为239.5周期对应14.4μs转换时间满足气体与压力信号1kHz奈奎斯特频率要求I²C外设使用I²C1PB6/PB7SCL线接4.7kΩ上拉至3.3VSDA线接相同阻值上拉总线电容实测200pF符合I²C标准快速模式400kHz要求SPI接口SPI1PA5/PA6/PA7驱动OLED采用四线制DC、CS、CLK、DIN时钟频率设为10MHzOLED SSD1306最大支持速率GPIO规划PC13连接蜂鸣器驱动电路NPN三极管8050PB0/PB1/PB2/PB10分别接入4个机械按键所有按键输入均配置上拉电阻10kΩ并启用外部中断EXTI0~EXTI15。关键设计考量未使用FSMC扩展外部RAM因OLED显示缓冲区仅需1KB128×64像素×1bit全部存于SRAM中放弃USB Device功能因USB供电已满足电源管理需求且CDC类驱动会挤占约8KB Flash空间。2.2 传感器信号调理电路2.2.1 MQ135气体传感器接口设计MQ135输出为模拟电压信号其负载电阻RL需根据目标气体浓度范围动态调整。本系统针对油田典型可燃气体甲烷CH₄设定RL10kΩ此时传感器在1000ppm CH₄环境中输出电压约1.2V。信号链路设计如下传感器输出→RC低通滤波R10kΩ, C100nF截止频率159Hz→运放跟随器LM358单电源3.3V供电→MCU ADC输入滤波器时间常数τ1ms有效抑制50Hz工频干扰谐波运放供电引脚并联0.1μF陶瓷电容消除电源纹波对基准电压影响。校准说明MQ135出厂未标定实际应用中需在洁净空气0ppm和标准气样1000ppm CH₄两点校准。代码中采用线性插值法gas_ppm (adc_val - clean_air_val) * 1000 / (gas_sample_val - clean_air_val)。2.2.2 陶瓷压力传感器信号链选用MPX5700系列绝对压力传感器量程0~700kPa其输出为比例电压0.2~4.7V对应0~700kPa。由于MCU ADC参考电压为3.3V需进行电平适配传感器输出→精密电阻分压网络R120kΩ, R233kΩ分压比0.606→运放反相放大增益1.65→ADC输入最终实现700kPa → 3.3V满量程分辨率≈0.17kPa/LSB分压电阻选用1%精度金属膜电阻运放选用零漂移型号MCP6V01输入偏置电流1pA。此设计避免使用专用ADC芯片在保证0.5%FS精度前提下降低BOM成本。2.2.3 SHT30温湿度传感器接口SHT30通过I²C总线通信其地址固定为0x44ADDR引脚接地。硬件设计要点I²C总线在PCB走线中保持等长偏差5mm远离高频信号线MCU端I²C引脚内置弱上拉20kΩ外置4.7kΩ强上拉至3.3V传感器供电由LDOAMS1117-3.3独立提供避免数字电路噪声耦合。时序保障SHT30单次测量耗时约16ms代码中采用轮询方式等待测量完成发送0x2C06命令后读取状态寄存器bit15避免占用SysTick中断。2.3 人机交互与通信模块2.3.1 OLED显示驱动电路0.96寸SSD1306 OLED128×64采用SPI四线制接口DC引脚控制数据/命令模式高电平为数据CS引脚低电平使能CLK与DIN使用推挽输出模式GPIO_Speed_50MHz初始化序列严格遵循SSD1306 datasheet设置MUX比率、显示偏移、段重映射、COM扫描方向等寄存器。显示内容分页管理第1页显示温湿度SHT30、第2页显示油压MPX5700、第3页显示气体浓度MQ135、第4页显示系统状态蓝牙连接状态、报警标志。每页刷新时仅更新变化字段减少SPI传输量。2.3.2 HC-05蓝牙模块硬件集成HC-05工作在从机模式SlaveAT指令配置关键参数ATNAMEOilFieldMonitor设备名称ATPSWD1234配对密码ATUART9600,0,0波特率96001位停止位无校验ATROLE0强制从机模式。硬件连接HC-05 TXD → STM32 PA9USART1_TXHC-05 RXD → STM32 PA10USART1_RXRXD线路串联1kΩ限流电阻防止5V逻辑电平损坏MCU模块供电由AMS1117-3.3稳压实测空闲电流8mA传输峰值电流25mA。抗干扰设计USART1_TX/RX走线长度3cm靠近MCU放置避免与晶振、SWD接口平行走线。2.3.3 声光报警与按键电路蜂鸣器驱动PC13 → 1kΩ限流电阻 → 8050基极8050发射极接地集电极接蜂鸣器正极蜂鸣器负极接5V。当PC13输出高电平时8050饱和导通蜂鸣器发声按键电路4个按键一端接地另一端分别接PB0/PB1/PB2/PB10MCU GPIO配置为上拉输入外部中断。每个按键增加0.1μF陶瓷电容滤波软件消抖采用定时器中断10ms周期检测连续3次电平一致才确认有效。报警优先级气体浓度报警 油压报警 温湿度报警同一时刻仅触发最高优先级报警。2.4 电源管理设计系统采用USB 5V供电经两级稳压第一级MP1584EN降压至3.3V主控、传感器、OLED供电开关频率1.5MHz输出纹波20mVpp第二级AMS1117-3.3线性稳压蓝牙模块专用输入来自MP1584输出进一步滤除开关噪声。关键设计USB输入端并联TVS二极管SMAJ5.0A防静电与浪涌所有IC电源引脚就近放置0.1μF陶瓷电容10μF钽电容地平面完整分割为数字地DGND与模拟地AGND在MP1584地焊盘处单点连接。实测整机功耗待机状态无报警约45mA蜂鸣器鸣响时峰值电流120mA。3. 软件系统实现3.1 固件架构与任务调度采用裸机多任务框架基于SysTick中断实现时间片轮转SysTick配置为1ms中断维护全局毫秒计时器主循环while(1)中依次调用Sensor_Read()、Alarm_Judge()、OLED_Update()、BLE_Send()按键中断服务程序ISR仅置位标志位主循环中处理具体逻辑蓝牙接收数据在USART1中断中缓存至环形缓冲区主循环解析JSON指令。实时性保障Sensor_Read()函数执行时间800μs实测确保1s采样周期内留有足够余量处理其他任务。3.2 传感器数据采集与处理3.2.1 ADC多通道扫描配置// ADC1初始化3通道规则组 ADC_InitTypeDef ADC_InitStructure; ADC_InitStructure.ADC_Mode ADC_Mode_Independent; ADC_InitStructure.ADC_ScanConvMode ENABLE; // 启用扫描模式 ADC_InitStructure.ADC_ContinuousConvMode DISABLE; // 单次转换 ADC_InitStructure.ADC_ExternalTrigConv ADC_ExternalTrigConv_None; ADC_InitStructure.ADC_DataAlign ADC_DataAlign_Right; ADC_InitStructure.ADC_NbrOfChannel 3; ADC_Init(ADC1, ADC_InitStructure); // 通道配置按采样顺序 ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_239Cycles5); // MQ135 ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 2, ADC_SampleTime_239Cycles5); // 压力传感器 ADC_RegularChannelConfig(ADC1, ADC_Channel_4, 3, ADC_SampleTime_239Cycles5); // 内部温度3.2.2 数据滤波算法对ADC原始数据实施两级滤波硬件滤波RC低通159Hz已滤除大部分工频干扰软件滤波采用滑动平均滤波窗口长度8代码实现#define FILTER_LEN 8 uint16_t gas_filter_buf[FILTER_LEN]; uint8_t gas_filter_idx 0; uint16_t gas_filtered; void Gas_Filter_Add(uint16_t val) { gas_filter_buf[gas_filter_idx] val; gas_filter_idx (gas_filter_idx 1) % FILTER_LEN; } uint16_t Gas_Filter_Get(void) { uint32_t sum 0; for(uint8_t i 0; i FILTER_LEN; i) { sum gas_filter_buf[i]; } return (uint16_t)(sum / FILTER_LEN); }3.3 报警逻辑与状态管理报警状态采用位域结构体统一管理typedef struct { uint8_t temp_high : 1; // 温度超限 uint8_t humi_high : 1; // 湿度超限 uint8_t pressure_hi : 1; // 油压超限 uint8_t gas_high : 1; // 气体超限 uint8_t alarm_clear : 1; // 报警已清除 } AlarmStatus_TypeDef; AlarmStatus_TypeDef alarm_status;报警触发流程每次采样后调用Alarm_Judge()函数逐项比较参数值与EEPROM中存储的阈值若任一参数超标且alarm_clear0则置位对应报警标志并启动蜂鸣器蜂鸣器采用PWM驱动TIM3_CH2频率2kHz占空比50%持续2s后自动关闭按键3/4按下时alarm_clear置1蜂鸣器停止OLED显示ALARM CLEARED。EEPROM存储报警阈值存于STM32内置Flash的最后1页0x0800F800写入前需解锁Flash并擦除整页。3.4 蓝牙通信协议设计定义轻量级JSON数据包格式{ ts:1712345678, temp:25.6, humi:45.2, pressure:3250, gas:128, alarm:3 }tsUnix时间戳秒级temp/humi浮点数单位℃/%RHpressure整数单位kPa×10避免浮点传输gas整数单位ppmalarm位图bit0温度报警bit1湿度报警bit2油压报警bit3气体报警。APP端下发阈值指令格式{cmd:set_th,temp:35.0,humi:80.0,press:5000,gas:200}设备端收到后校验JSON完整性更新EEPROM并返回ACK{ack:ok}。4. 系统测试与验证4.1 关键参数实测数据测试项目条件实测结果标准要求温湿度采集精度25℃/50%RH恒温恒湿箱±0.3℃ / ±2%RH±0.5℃ / ±3%RH油压测量线性度0~500kPa标准压力源非线性误差0.4%FS≤0.5%FS气体响应时间1000ppm CH₄瞬态注入信号上升时间2.1s≤3s蓝牙传输丢包率5m距离20dBm干扰源旁连续1小时0丢包≤10⁻⁴整机功耗待机状态无报警44.8mA 5V50mA4.2 现场部署注意事项传感器安装SHT30需加装防尘网罩孔径0.5mm避免油污堵塞微孔MQ135应垂直安装探头朝下防止冷凝水积聚压力传感器引压管需加装缓冲罐消除脉动压力冲击电磁兼容OLED排线使用双绞线长度15cm蓝牙天线远离金属外壳净空区≥10mm环境适应性洞洞板组装时所有IC底部填充导热硅脂增强散热PCB表面喷涂三防漆Conformal Coating防护盐雾与硫化物腐蚀。5. BOM清单与器件选型依据序号器件名称型号/规格数量选型理由1主控芯片STM32F103RCT61Cortex-M3内核128KB Flash/20KB RAMADC/I²C/SPI/USART外设完备工业级温度范围2温湿度传感器SHT30-DIS-B2.5k1±0.2℃精度I²C接口低功耗2μA待机电流带CRC校验3气体传感器MQ1351对CO₂/CO/NOx/SO₂广谱响应成本低于专用气体传感器适合油田多气体监测场景4压力传感器MPX5700AP1绝对压力0~700kPa固态陶瓷芯体耐油污长期稳定性±1%FS5蓝牙模块HC-05主从一体1AT指令集成熟Android/iOS兼容性好无需额外协议栈开发6OLED显示屏SSD13060.96寸1128×64分辨率SPI接口-40℃~80℃工作温度低功耗0.06W7电源管理MP1584EN AMS1117-3.31套MP1584效率90%AMS1117提供干净模拟电源满足传感器噪声要求8有源蜂鸣器PKLCS1212E400113.3V驱动2kHz谐振频率声压级85dB尺寸Φ12mm适配洞洞板布局替代方案提示若需提升气体检测特异性可将MQ135替换为CCS811eCO₂/TVOC但需重写I²C驱动并增加温湿度补偿算法压力传感器可升级为MPX50500~50kPa适用于低压油井场景。6. 上位机APP功能实现要点6.1 数据可视化核心逻辑APP采用SQLite数据库存储历史数据表结构设计CREATE TABLE sensor_data ( id INTEGER PRIMARY KEY AUTOINCREMENT, timestamp INTEGER NOT NULL, -- Unix时间戳 temperature REAL, humidity REAL, pressure REAL, gas_ppm INTEGER, alarm_flags INTEGER );每条记录包含完整时间戳避免设备端时钟漂移导致数据错位压力值以kPa为单位存储浮点数气体浓度存整数ppm减少存储空间使用Room持久化库管理数据库配合LiveData实现UI自动刷新。6.2 实时报警推送机制APP后台服务监听蓝牙串口数据流解析JSON包后若alarm字段非零则触发系统通知栏提醒通知内容包含超标参数名称、当前值、阈值如“油压超标3250kPa 3000kPa”用户点击通知直接跳转至实时数据页并高亮显示异常参数。6.3 阈值远程配置安全机制APP下发阈值指令前先读取设备端当前EEPROM校验码指令包中包含CRC16校验字段多项式0x1021设备端接收后验证CRC校验失败则返回{err:crc_fail}连续3次校验失败设备进入保护模式禁用阈值写入仅允许读取。此机制防止蓝牙信道误码导致错误阈值写入保障系统安全底线。7. 典型故障排查指南故障现象可能原因排查步骤OLED无显示1. SPI时序错误2. OLED供电不足用示波器测CLK/DIN波形万用表测VCC是否3.3V检查DC/CS引脚电平SHT30读数始终为0xFF1. I²C地址错误2. 上拉电阻失效用逻辑分析仪捕获I²C波形测PB6/PB7对地电阻是否4.7kΩ检查ADDR引脚是否可靠接地MQ135读数波动剧烈1. RC滤波电容虚焊2. 电源纹波过大示波器测ADC输入引脚纹波检查MP1584输出电容是否完好确认运放供电去耦电容焊接质量蓝牙无法配对1. HC-05处于AT模式2. 波特率不匹配用USB-TTL模块直连HC-05发送AT指令确认状态检查USART1初始化波特率是否9600报警清除后仍鸣响1. 按键消抖失效2. EEPROM写入失败示波器测按键引脚波形用ST-Link Utility读取Flash 0x0800F800区域数据验证写入结果调试建议首次上电时先断开所有传感器仅运行OLED显示与按键功能确认基础外设正常后再逐个接入传感器模块。
油田安全监控终端:STM32边缘感知与蓝牙报警系统设计
1. 项目概述1.1 系统定位与工程背景油田生产环境具有高危性、分布广、工况复杂等特点传统人工巡检存在响应滞后、覆盖盲区、主观误差大等固有缺陷。在无人值守井场、偏远集输站等场景中温湿度异常引发设备冷凝腐蚀、可燃气体泄漏导致爆炸风险、油压突变造成管线破裂等隐患均需毫秒级感知与分钟级响应能力。本系统并非通用物联网演示平台而是面向工业现场实际部署需求设计的嵌入式安全监控终端其核心约束条件包括工作温度范围需覆盖−20℃60℃满足北方冬季野外及南方夏季机柜内运行所有传感器信号链路具备抗工频干扰能力50Hz/100Hz共模噪声抑制本地报警响应时间≤300ms从ADC采样完成到蜂鸣器驱动信号输出蓝牙通信在无遮挡环境下稳定传输距离≥8m满足单井场设备布点需求。该系统采用“边缘感知本地决策云端协同”三级架构STM32F103RCT6作为边缘节点完成实时数据采集、阈值判断与声光报警HC-05蓝牙模块构建短距无线通道将结构化数据推送至移动终端上位机APP承担人机交互、历史数据分析与策略配置功能。整个设计规避了4G/NB-IoT等广域网方案带来的流量成本与基站依赖问题更适合中小型油田分阶段数字化改造。1.2 功能边界定义系统严格限定为安全参数监控终端不涉及执行机构控制如阀门启闭、泵组启停。所有报警均为状态指示型不触发自动干预动作。功能模块间存在明确的时序与优先级关系数据采集层SHT30I²C、MQ135ADC、陶瓷压力传感器ADC三路信号同步采样采样周期1s本地处理层OLED显示刷新率2Hz按键扫描采用硬件消抖软件计时器双重保障通信层蓝牙仅传输JSON格式结构化数据包含时间戳、参数值、报警标志位禁用透传模式以降低协议栈开销人机交互层APP端报警阈值修改指令经CRC校验后下发设备端接收成功后才更新EEPROM存储值。此边界设计确保系统可靠性聚焦于安全监控本质避免因复杂控制逻辑引入不可预测的故障模式。2. 硬件系统设计2.1 主控单元STM32F103RCT6选型依据选用LQFP64封装的STM32F103RCT6其资源分配严格匹配油田监控场景需求ADC资源片内12位ADC1配置为3通道扫描模式PA0/MQ135、PA1/压力传感器、PA4/内部温度传感器采样时间设为239.5周期对应14.4μs转换时间满足气体与压力信号1kHz奈奎斯特频率要求I²C外设使用I²C1PB6/PB7SCL线接4.7kΩ上拉至3.3VSDA线接相同阻值上拉总线电容实测200pF符合I²C标准快速模式400kHz要求SPI接口SPI1PA5/PA6/PA7驱动OLED采用四线制DC、CS、CLK、DIN时钟频率设为10MHzOLED SSD1306最大支持速率GPIO规划PC13连接蜂鸣器驱动电路NPN三极管8050PB0/PB1/PB2/PB10分别接入4个机械按键所有按键输入均配置上拉电阻10kΩ并启用外部中断EXTI0~EXTI15。关键设计考量未使用FSMC扩展外部RAM因OLED显示缓冲区仅需1KB128×64像素×1bit全部存于SRAM中放弃USB Device功能因USB供电已满足电源管理需求且CDC类驱动会挤占约8KB Flash空间。2.2 传感器信号调理电路2.2.1 MQ135气体传感器接口设计MQ135输出为模拟电压信号其负载电阻RL需根据目标气体浓度范围动态调整。本系统针对油田典型可燃气体甲烷CH₄设定RL10kΩ此时传感器在1000ppm CH₄环境中输出电压约1.2V。信号链路设计如下传感器输出→RC低通滤波R10kΩ, C100nF截止频率159Hz→运放跟随器LM358单电源3.3V供电→MCU ADC输入滤波器时间常数τ1ms有效抑制50Hz工频干扰谐波运放供电引脚并联0.1μF陶瓷电容消除电源纹波对基准电压影响。校准说明MQ135出厂未标定实际应用中需在洁净空气0ppm和标准气样1000ppm CH₄两点校准。代码中采用线性插值法gas_ppm (adc_val - clean_air_val) * 1000 / (gas_sample_val - clean_air_val)。2.2.2 陶瓷压力传感器信号链选用MPX5700系列绝对压力传感器量程0~700kPa其输出为比例电压0.2~4.7V对应0~700kPa。由于MCU ADC参考电压为3.3V需进行电平适配传感器输出→精密电阻分压网络R120kΩ, R233kΩ分压比0.606→运放反相放大增益1.65→ADC输入最终实现700kPa → 3.3V满量程分辨率≈0.17kPa/LSB分压电阻选用1%精度金属膜电阻运放选用零漂移型号MCP6V01输入偏置电流1pA。此设计避免使用专用ADC芯片在保证0.5%FS精度前提下降低BOM成本。2.2.3 SHT30温湿度传感器接口SHT30通过I²C总线通信其地址固定为0x44ADDR引脚接地。硬件设计要点I²C总线在PCB走线中保持等长偏差5mm远离高频信号线MCU端I²C引脚内置弱上拉20kΩ外置4.7kΩ强上拉至3.3V传感器供电由LDOAMS1117-3.3独立提供避免数字电路噪声耦合。时序保障SHT30单次测量耗时约16ms代码中采用轮询方式等待测量完成发送0x2C06命令后读取状态寄存器bit15避免占用SysTick中断。2.3 人机交互与通信模块2.3.1 OLED显示驱动电路0.96寸SSD1306 OLED128×64采用SPI四线制接口DC引脚控制数据/命令模式高电平为数据CS引脚低电平使能CLK与DIN使用推挽输出模式GPIO_Speed_50MHz初始化序列严格遵循SSD1306 datasheet设置MUX比率、显示偏移、段重映射、COM扫描方向等寄存器。显示内容分页管理第1页显示温湿度SHT30、第2页显示油压MPX5700、第3页显示气体浓度MQ135、第4页显示系统状态蓝牙连接状态、报警标志。每页刷新时仅更新变化字段减少SPI传输量。2.3.2 HC-05蓝牙模块硬件集成HC-05工作在从机模式SlaveAT指令配置关键参数ATNAMEOilFieldMonitor设备名称ATPSWD1234配对密码ATUART9600,0,0波特率96001位停止位无校验ATROLE0强制从机模式。硬件连接HC-05 TXD → STM32 PA9USART1_TXHC-05 RXD → STM32 PA10USART1_RXRXD线路串联1kΩ限流电阻防止5V逻辑电平损坏MCU模块供电由AMS1117-3.3稳压实测空闲电流8mA传输峰值电流25mA。抗干扰设计USART1_TX/RX走线长度3cm靠近MCU放置避免与晶振、SWD接口平行走线。2.3.3 声光报警与按键电路蜂鸣器驱动PC13 → 1kΩ限流电阻 → 8050基极8050发射极接地集电极接蜂鸣器正极蜂鸣器负极接5V。当PC13输出高电平时8050饱和导通蜂鸣器发声按键电路4个按键一端接地另一端分别接PB0/PB1/PB2/PB10MCU GPIO配置为上拉输入外部中断。每个按键增加0.1μF陶瓷电容滤波软件消抖采用定时器中断10ms周期检测连续3次电平一致才确认有效。报警优先级气体浓度报警 油压报警 温湿度报警同一时刻仅触发最高优先级报警。2.4 电源管理设计系统采用USB 5V供电经两级稳压第一级MP1584EN降压至3.3V主控、传感器、OLED供电开关频率1.5MHz输出纹波20mVpp第二级AMS1117-3.3线性稳压蓝牙模块专用输入来自MP1584输出进一步滤除开关噪声。关键设计USB输入端并联TVS二极管SMAJ5.0A防静电与浪涌所有IC电源引脚就近放置0.1μF陶瓷电容10μF钽电容地平面完整分割为数字地DGND与模拟地AGND在MP1584地焊盘处单点连接。实测整机功耗待机状态无报警约45mA蜂鸣器鸣响时峰值电流120mA。3. 软件系统实现3.1 固件架构与任务调度采用裸机多任务框架基于SysTick中断实现时间片轮转SysTick配置为1ms中断维护全局毫秒计时器主循环while(1)中依次调用Sensor_Read()、Alarm_Judge()、OLED_Update()、BLE_Send()按键中断服务程序ISR仅置位标志位主循环中处理具体逻辑蓝牙接收数据在USART1中断中缓存至环形缓冲区主循环解析JSON指令。实时性保障Sensor_Read()函数执行时间800μs实测确保1s采样周期内留有足够余量处理其他任务。3.2 传感器数据采集与处理3.2.1 ADC多通道扫描配置// ADC1初始化3通道规则组 ADC_InitTypeDef ADC_InitStructure; ADC_InitStructure.ADC_Mode ADC_Mode_Independent; ADC_InitStructure.ADC_ScanConvMode ENABLE; // 启用扫描模式 ADC_InitStructure.ADC_ContinuousConvMode DISABLE; // 单次转换 ADC_InitStructure.ADC_ExternalTrigConv ADC_ExternalTrigConv_None; ADC_InitStructure.ADC_DataAlign ADC_DataAlign_Right; ADC_InitStructure.ADC_NbrOfChannel 3; ADC_Init(ADC1, ADC_InitStructure); // 通道配置按采样顺序 ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_239Cycles5); // MQ135 ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 2, ADC_SampleTime_239Cycles5); // 压力传感器 ADC_RegularChannelConfig(ADC1, ADC_Channel_4, 3, ADC_SampleTime_239Cycles5); // 内部温度3.2.2 数据滤波算法对ADC原始数据实施两级滤波硬件滤波RC低通159Hz已滤除大部分工频干扰软件滤波采用滑动平均滤波窗口长度8代码实现#define FILTER_LEN 8 uint16_t gas_filter_buf[FILTER_LEN]; uint8_t gas_filter_idx 0; uint16_t gas_filtered; void Gas_Filter_Add(uint16_t val) { gas_filter_buf[gas_filter_idx] val; gas_filter_idx (gas_filter_idx 1) % FILTER_LEN; } uint16_t Gas_Filter_Get(void) { uint32_t sum 0; for(uint8_t i 0; i FILTER_LEN; i) { sum gas_filter_buf[i]; } return (uint16_t)(sum / FILTER_LEN); }3.3 报警逻辑与状态管理报警状态采用位域结构体统一管理typedef struct { uint8_t temp_high : 1; // 温度超限 uint8_t humi_high : 1; // 湿度超限 uint8_t pressure_hi : 1; // 油压超限 uint8_t gas_high : 1; // 气体超限 uint8_t alarm_clear : 1; // 报警已清除 } AlarmStatus_TypeDef; AlarmStatus_TypeDef alarm_status;报警触发流程每次采样后调用Alarm_Judge()函数逐项比较参数值与EEPROM中存储的阈值若任一参数超标且alarm_clear0则置位对应报警标志并启动蜂鸣器蜂鸣器采用PWM驱动TIM3_CH2频率2kHz占空比50%持续2s后自动关闭按键3/4按下时alarm_clear置1蜂鸣器停止OLED显示ALARM CLEARED。EEPROM存储报警阈值存于STM32内置Flash的最后1页0x0800F800写入前需解锁Flash并擦除整页。3.4 蓝牙通信协议设计定义轻量级JSON数据包格式{ ts:1712345678, temp:25.6, humi:45.2, pressure:3250, gas:128, alarm:3 }tsUnix时间戳秒级temp/humi浮点数单位℃/%RHpressure整数单位kPa×10避免浮点传输gas整数单位ppmalarm位图bit0温度报警bit1湿度报警bit2油压报警bit3气体报警。APP端下发阈值指令格式{cmd:set_th,temp:35.0,humi:80.0,press:5000,gas:200}设备端收到后校验JSON完整性更新EEPROM并返回ACK{ack:ok}。4. 系统测试与验证4.1 关键参数实测数据测试项目条件实测结果标准要求温湿度采集精度25℃/50%RH恒温恒湿箱±0.3℃ / ±2%RH±0.5℃ / ±3%RH油压测量线性度0~500kPa标准压力源非线性误差0.4%FS≤0.5%FS气体响应时间1000ppm CH₄瞬态注入信号上升时间2.1s≤3s蓝牙传输丢包率5m距离20dBm干扰源旁连续1小时0丢包≤10⁻⁴整机功耗待机状态无报警44.8mA 5V50mA4.2 现场部署注意事项传感器安装SHT30需加装防尘网罩孔径0.5mm避免油污堵塞微孔MQ135应垂直安装探头朝下防止冷凝水积聚压力传感器引压管需加装缓冲罐消除脉动压力冲击电磁兼容OLED排线使用双绞线长度15cm蓝牙天线远离金属外壳净空区≥10mm环境适应性洞洞板组装时所有IC底部填充导热硅脂增强散热PCB表面喷涂三防漆Conformal Coating防护盐雾与硫化物腐蚀。5. BOM清单与器件选型依据序号器件名称型号/规格数量选型理由1主控芯片STM32F103RCT61Cortex-M3内核128KB Flash/20KB RAMADC/I²C/SPI/USART外设完备工业级温度范围2温湿度传感器SHT30-DIS-B2.5k1±0.2℃精度I²C接口低功耗2μA待机电流带CRC校验3气体传感器MQ1351对CO₂/CO/NOx/SO₂广谱响应成本低于专用气体传感器适合油田多气体监测场景4压力传感器MPX5700AP1绝对压力0~700kPa固态陶瓷芯体耐油污长期稳定性±1%FS5蓝牙模块HC-05主从一体1AT指令集成熟Android/iOS兼容性好无需额外协议栈开发6OLED显示屏SSD13060.96寸1128×64分辨率SPI接口-40℃~80℃工作温度低功耗0.06W7电源管理MP1584EN AMS1117-3.31套MP1584效率90%AMS1117提供干净模拟电源满足传感器噪声要求8有源蜂鸣器PKLCS1212E400113.3V驱动2kHz谐振频率声压级85dB尺寸Φ12mm适配洞洞板布局替代方案提示若需提升气体检测特异性可将MQ135替换为CCS811eCO₂/TVOC但需重写I²C驱动并增加温湿度补偿算法压力传感器可升级为MPX50500~50kPa适用于低压油井场景。6. 上位机APP功能实现要点6.1 数据可视化核心逻辑APP采用SQLite数据库存储历史数据表结构设计CREATE TABLE sensor_data ( id INTEGER PRIMARY KEY AUTOINCREMENT, timestamp INTEGER NOT NULL, -- Unix时间戳 temperature REAL, humidity REAL, pressure REAL, gas_ppm INTEGER, alarm_flags INTEGER );每条记录包含完整时间戳避免设备端时钟漂移导致数据错位压力值以kPa为单位存储浮点数气体浓度存整数ppm减少存储空间使用Room持久化库管理数据库配合LiveData实现UI自动刷新。6.2 实时报警推送机制APP后台服务监听蓝牙串口数据流解析JSON包后若alarm字段非零则触发系统通知栏提醒通知内容包含超标参数名称、当前值、阈值如“油压超标3250kPa 3000kPa”用户点击通知直接跳转至实时数据页并高亮显示异常参数。6.3 阈值远程配置安全机制APP下发阈值指令前先读取设备端当前EEPROM校验码指令包中包含CRC16校验字段多项式0x1021设备端接收后验证CRC校验失败则返回{err:crc_fail}连续3次校验失败设备进入保护模式禁用阈值写入仅允许读取。此机制防止蓝牙信道误码导致错误阈值写入保障系统安全底线。7. 典型故障排查指南故障现象可能原因排查步骤OLED无显示1. SPI时序错误2. OLED供电不足用示波器测CLK/DIN波形万用表测VCC是否3.3V检查DC/CS引脚电平SHT30读数始终为0xFF1. I²C地址错误2. 上拉电阻失效用逻辑分析仪捕获I²C波形测PB6/PB7对地电阻是否4.7kΩ检查ADDR引脚是否可靠接地MQ135读数波动剧烈1. RC滤波电容虚焊2. 电源纹波过大示波器测ADC输入引脚纹波检查MP1584输出电容是否完好确认运放供电去耦电容焊接质量蓝牙无法配对1. HC-05处于AT模式2. 波特率不匹配用USB-TTL模块直连HC-05发送AT指令确认状态检查USART1初始化波特率是否9600报警清除后仍鸣响1. 按键消抖失效2. EEPROM写入失败示波器测按键引脚波形用ST-Link Utility读取Flash 0x0800F800区域数据验证写入结果调试建议首次上电时先断开所有传感器仅运行OLED显示与按键功能确认基础外设正常后再逐个接入传感器模块。