智能环境监测终端全栈设计:从单片机到微信小程序,手把手搞定!

摘要

针对传统环境监测设备成本高、无法移动端(手机)查看的痛点,本文设计并实现了一套基于 STC89C52RC 单片机与 大夏龙雀DX-BT311 蓝牙模块的智能环境监测终端。系统集成了DHT11温湿度传感、LCD1602本地显示、用户按键交互及蜂鸣器报警功能,并通过可靠的串口透传协议与微信小程序连接,构建了从数据采集、无线传输到上位机(微信小程序)可视化分析的完整链路。项目硬件总成本低于50元,实现了高性价比的物联网应用。
作品实拍图


1. 系统设计

系统采用"终端-通信-应用"三层架构:

  • 终端层(硬件):数据采集与本地交互核心。
  • 通信层大夏龙雀DX-BT311蓝牙模块,负责稳定、透明的数据透传。
  • 应用层:微信小程序,实现数据可视化、历史记录与智能报警。

系统架构图

2. 硬件设计与实现

2.1 核心控制单元

主控:STC89C52RC(8K Flash,512B RAM),成本低,资源充足。

  • 资源分配
    • 串口0(P3.0/P3.1):连接蓝牙模块。
    • P1口:驱动LCD1602数据线。
    • P2.0-P2.2:LCD控制线。
    • P3.2:DHT11数据线。
    • P3.3-P3.5:用户按键。
    • P3.6:蜂鸣器驱动。

数据采集终端

2.2 核心通信模块:大夏龙雀DX-BT311

DX-BT311蓝牙模块

模块优势

  • 串口透传:极大简化开发,单片机直接通过UART收发数据。
  • 高稳定性:实测空旷距离200米,穿墙能力强,通信丢包率<0.22%。
  • 低功耗:工作电流2.42mA,适合电池供电场景。

电路设计

  • 交叉连接UART:模块TXD接单片机RXD,模块RXD接单片机TXD。
  • 电源:模块VCC接3.3V(关键!),与单片机共地。
  • 滤波:电源端并联22uF与0.1uF电容,确保稳定。

最小系统板设计原理图

功耗管理机制:事件驱动的高效数据传输

在本项目中,为了最大限度地优化系统功耗,特别是在电池供电场景下,我们设计并实现了一种基于蓝牙连接状态的事件驱动型功耗管理机制 。该机制的核心在于,STC89C52RC单片机并非持续不断地发送数据,而是仅在蓝牙连接建立后,才启动数据采集与串口发送任务

具体实现如下:

  1. 硬件基础 :我们将大夏龙雀DX-BT311模块的连接状态输出引脚(Link引脚) 连接至单片机的一个I/O口(P06)。当模块成功与手机建立蓝牙连接时,该引脚输出高电平;断开连接时,输出低电平。
  2. 软件逻辑 :单片机主循环中,持续检测该I/O口的状态
    • 当检测到高电平(蓝牙已连接):系统进入"活跃传输模式",按固定周期(如1秒)采集DHT11数据,并通过UART发送至蓝牙模块,实现与小程序的实时同步。
    • 当检测到低电平(蓝牙未连接) :系统进入"低功耗待机模式"。此时,单片机可降低工作频率或执行其他非通信任务(如本地按键扫描、LCD显示刷新),完全停止UART发送任务。DHT11仍可间歇采集用于本地显示,但不会消耗额外的无线通信功耗。

蓝牙连接检测

设计优势

  • 功耗显著降低:在蓝牙未连接的待机状态下,系统功耗可从约30mA降至约8mA(主要为MCU和LCD基础功耗),使得电池续航时间从数小时延长至数天。
  • 用户体验优化:用户无需担心设备在未连接时的电量浪费,设备"即连即用",连接后才开始消耗通信能量,符合实际使用场景。
  • 系统响应迅速:一旦蓝牙连接,数据传输立即启动,无延迟。

这一设计巧妙地利用了大夏龙雀DX-BT311模块提供的状态信号,将功耗管理从"定时查询"转变为"事件驱动",是系统在低成本、低功耗约束下实现高可用性的关键创新点之一。

2.3 传感与交互单元

  • DHT11:单总线协议,读取温湿度,程序内置校验。
  • LCD1602 :8位并行驱动,增加电位器调节对比度,适应不同环境光。
  • 输入/输出:6个独立按键实现模式切换与参数设置;蜂鸣器用于声光报警。

2.4 电源与PCB

  • 双供电:USB 5V或3.7V锂电池,通过AMS1117-3.3V稳压(可考虑替换为更高效的DC-DC电源芯片)给蓝牙模块供电。
  • PCB布局:蓝牙模块靠板边,天线区域留5mm净空,电源线加粗,增强抗干扰。

PCB设计图
3D渲染图

3. 软件系统设计与实现

3.1 单片机端(Keil C51)

核心逻辑:初始化 → 每秒采集DHT11 → 显示到LCD → 通过蓝牙发送 → 检查报警 → 循环。
硬件端核心代码截图

关键代码

cpp 复制代码
// 1. DHT11数据读取(带校验)
bit DHT11_Read_Data() {
    // ... 初始化时序 ...
    humi_int = DHT11_Read_Byte(); // 湿度整数
    temp_int = DHT11_Read_Byte(); // 温度整数
    // ... 读取其他数据并校验 ...
    return (校验成功) ? 1 : 0;
}

// 2. 蓝牙透传发送(自定义帧格式)
void Send_To_Bluetooth() {
    char buf[30];
    sprintf(buf, "#%d,%d,%d,%d*", temp_int, humi_int, temp_max, temp_min); // 格式:#温度,湿度,上限,下限*
    UART_Send_String(buf); // 通过串口直接发送
}

// 3. 主循环片段
void main() {
    UART_Init(); // 串口初始化(与蓝牙模块匹配)
    LCD1602_Init();
    while(1) {
        if(DHT11_Read_Data()) {
            LCD_Show_Data();    // 本地显示
            Send_To_Bluetooth(); // 蓝牙发送
            Check_Alarm();       // 报警判断
        }
        Delay_ms(1000); // 1秒周期
    }
}

3.2 微信小程序端

核心功能

  1. 蓝牙连接:搜索并连接名为"环境监测终端"的设备。
  2. 数据解析 :监听特征值,解析#...*格式的数据包。
  3. 数据可视化:实时数字显示 + wx-charts绘制历史曲线。
  4. 智能报警:用户设置阈值,超限时小程序弹窗+硬件蜂鸣器。
  5. 统计分析:自动计算历史数据的最大值、最小值、平均值。

环境数据可视化界面展示
历史趋势图

关键代码(JS)

javascript 复制代码
// 蓝牙数据监听与解析
wx.onBLECharacteristicValueChange((res) => {
  let data = ab2str(res.value); // 二进制转字符串
  if (data.startsWith("#") && data.endsWith("*")) {
    let arr = data.slice(1, -1).split(",");
    this.setData({
      temp: arr[0], humi: arr[1]
    });
    // 报警判断
    if (arr[0] > arr[2] || arr[0] < arr[3]) {
      wx.showModal({ title: '温度异常', content: `${arr[0]}℃` });
    }
  }
});

4. 系统测试

测试项目 测试结果 结论
数据采集精度 DHT11误差±0.5℃/±5%RH 满足日常监测需求
蓝牙通信稳定性 空旷50米丢包率0.05%,穿墙后0.22% 稳定性优异,符合预期
系统功耗 正常工作30mA,低功耗模式8mA 可支持电池长期供电
报警响应 硬件与小程序同时报警,延迟<1秒 响应迅速,可靠

蓝牙、主控均低功耗工作状态下的设备

5. 项目总结

5.1 项目亮点

  1. 全栈实现:完成从硬件设计、嵌入式开发到移动应用的完整闭环。
  2. 成本极低:核心硬件成本控制在50元以内,性价比极高。
  3. 模块优势大夏龙雀DX-BT311的串口透传特性是项目高效完成的关键,其稳定性和易用性表现良好。
  4. 实用创新:LCD对比度可调、完整的数据可视化分析、软硬件联动的深度低功耗模式。

5.2 开发问题记录与解决

  • 乱码问题 :确保单片机与蓝牙模块共地
  • DHT11读取失败:严格按手册实现单总线时序。(这个可以参考成熟的DHT11驱动,使用的是单总线通信协议,驱动简单易实现)

数据错乱 :定义清晰的帧格式(如#...*)并校验。

开源硬件设计资源

如需查看本项目的完整硬件设计文件(包括原理图、PCB工程、3D渲染图)及更多细节,可访问立创开源广场项目文章:https://oshwhub.com/article/smart-environmental-monitoring-terminal

该文章包含:

  • 高清原理图与PCB设计图:完整的电路布局、电源管理、接口定义。
  • 3D渲染图与实物图:直观展示电路板结构与外观。
  • 详细物料清单(BOM):所有元器件的型号、参数、参考价格。
  • 硬件设计注意事项:针对DX-BT311模块、DHT11传感器、电源滤波等关键点的详细说明。
  • 可直接下载的工程文件:支持使用立创EDA专业版直接打开、修改和打样。
相关推荐
福尔摩斯张2 小时前
一文搞懂74HC595芯片(附详细使用方法)
linux·服务器·网络·单片机·嵌入式硬件
LCG元2 小时前
串口屏快速开发:STM32 UART通信,复杂HMI界面调试技巧
stm32·单片机·嵌入式硬件
从零点2 小时前
如何在cmake中添加自己的项目文件夹文件
嵌入式硬件
广州灵眸科技有限公司2 小时前
瑞芯微(EASY EAI)RV1126B 人脸98关键点算法识别
开发语言·科技·嵌入式硬件·物联网·算法·php
myron66882 小时前
基于STM32LXXX的数字电位器(TPL0501-100DCNR)驱动应用程序设计
stm32·单片机·嵌入式硬件
nhc0882 小时前
贵阳纳海川科技有限公司・货运物流行业解决方案
科技·微信小程序·小程序·软件开发·小程序开发
篮子里的玫瑰2 小时前
FreeRTOS:信号量与互斥量在DMA串口发送中的实战剖析
stm32·单片机·嵌入式硬件·算法
admin and root2 小时前
AWS S3 对象存储攻防&云安全之OSS存储桶漏洞
微信小程序·小程序·渗透测试·云计算·aws·src·攻防演练
亚马逊云开发者2 小时前
用 Serverless 搭 IoT 设备异常检测:Lambda + Step Functions + DynamoDB 分钟级告警实战
物联网·serverless·php