基于STM32单片机的新版ONENET物联网云平台环境检测系统

1. 系统功能概述

本系统是一个基于STM32单片机的数据采集与物联网通信系统,主要完成环境温湿度监测云平台数据上传功能。系统通过DHT11数字温湿度传感器采集环境数据,并通过STM32单片机处理后,借助ESP8266 WiFi模块将数据上传至中国移动新版OneNET物联网云平台,用户可以通过手机APP、网页端等方式实时查看环境状态。

系统目标是实现一个低成本、高可靠性的环境监控设备,适用于智能农业、家庭自动化、仓储管理等场景,具备实时性强、易扩展、支持远程访问等优点。


2. 系统电路设计

本系统的电路设计主要包括以下几个模块:

  • STM32最小系统;
  • DHT11温湿度采集模块;
  • ESP8266 WiFi通信模块;
  • LCD1602显示模块(用于本地显示);
  • 电源模块;

2.1 STM32最小系统

本系统采用 STM32F103C8T6 芯片作为主控,搭建最小系统:

  • 核心参数:基于 ARM Cortex-M3 架构,主频72MHz,Flash 64KB,RAM 20KB;
  • 接口资源:丰富的GPIO,USART,I2C,SPI,ADC等接口;
  • 供电:使用3.3V稳压芯片(如AMS1117)从5V降压供电;
  • 晶振电路:8MHz外部晶振用于系统时钟;
  • 下载接口:通过串口或SWD接口进行程序烧录;

STM32在系统中负责DHT11数据采集、串口与ESP8266通信、LCD显示控制、数据格式化等任务。


2.2 DHT11温湿度传感器模块

DHT11是一款集成的数字式温湿度传感器,具有以下特点:

  • 测量范围:温度050℃,湿度2090%RH;
  • 精度:±2℃,±5%RH;
  • 接口:单总线串行通信,使用一个GPIO口即可;
  • 电源:3.3V或5V均可;

连接方式:

  • 数据线连接到STM32的任意GPIO(建议带外部上拉电阻);
  • 每秒读取一次温湿度数据;
  • 读取数据后格式化为字符串以供上传;

2.3 ESP8266 WiFi模块

ESP8266作为网络通信模块,实现与OneNET云平台的数据交互:

  • 支持STA模式接入家庭WiFi;
  • 通过AT指令与STM32通信(串口通信);
  • 连接OneNET的MQTT或HTTP接口上传数据;
  • 波特率一般设为115200;
  • 建议使用固件稳定的版本(如AT v1.1.0及以上);

ESP8266上电初始化后,连接WiFi并建立与OneNET的通信连接,根据协议周期性上传数据。


2.4 LCD1602液晶模块

用于本地显示温湿度数据:

  • 通常使用并口(8位/4位)方式;
  • 与STM32连接,通过LCD1602驱动库实现显示控制;
  • 实时显示温度与湿度,便于调试与现场监控;

示例显示内容:

Temp: 26°C
Humi: 58%RH

2.5 电源模块

系统使用DC 5V电源输入,通过AMS1117-3.3模块提供3.3V供给STM32与ESP8266等模块:

  • DHT11支持5V或3.3V供电;
  • ESP8266供电电流要求高,建议提供大于500mA的3.3V稳压能力;
  • 所有GND必须共地;

3. 程序设计

系统程序采用结构化设计方式,分为以下几个部分:

  • DHT11驱动模块;
  • LCD1602驱动模块;
  • USART串口通信模块;
  • ESP8266通信模块;
  • 数据上传与逻辑控制模块;
  • 主函数逻辑;

3.1 DHT11驱动模块

DHT11使用单总线协议,以下为数据读取函数示例:

#include "dht11.h"

uint8_t DHT11_Data[5];

uint8_t DHT11_Read_Data(uint8_t *temp, uint8_t *humi) {
    // 发送起始信号
    DHT11_Start();
    
    // 判断响应
    if(DHT11_Check_Response()) {
        for(int i = 0; i < 5; i++) {
            DHT11_Data[i] = DHT11_Read_Byte();
        }

        if(DHT11_Data[0] + DHT11_Data[2] == DHT11_Data[4]) {
            *humi = DHT11_Data[0];
            *temp = DHT11_Data[2];
            return 1; // Success
        }
    }
    return 0; // Fail
}

3.2 LCD1602显示模块

LCD显示驱动支持4位/8位数据模式,显示函数如下:

void LCD_Show_Temp_Humi(uint8_t temp, uint8_t humi) {
    char buf[16];
    LCD_Set_Cursor(0, 0);
    sprintf(buf, "Temp: %dC", temp);
    LCD_Print(buf);

    LCD_Set_Cursor(1, 0);
    sprintf(buf, "Humi: %d%%", humi);
    LCD_Print(buf);
}

3.3 串口通信模块

初始化USART1串口,波特率设为115200:

void USART1_Init(void) {
    huart1.Instance = USART1;
    huart1.Init.BaudRate = 115200;
    huart1.Init.WordLength = UART_WORDLENGTH_8B;
    huart1.Init.StopBits = UART_STOPBITS_1;
    huart1.Init.Parity = UART_PARITY_NONE;
    huart1.Init.Mode = UART_MODE_TX_RX;
    HAL_UART_Init(&huart1);
}

发送与接收数据:

void UART_SendString(char* str) {
    HAL_UART_Transmit(&huart1, (uint8_t*)str, strlen(str), HAL_MAX_DELAY);
}

3.4 ESP8266通信模块

初始化AT指令通信流程:

void ESP8266_Init(void) {
    UART_SendString("AT\r\n");
    HAL_Delay(1000);
    
    UART_SendString("AT+CWMODE=1\r\n"); // 设置为STA模式
    HAL_Delay(1000);

    UART_SendString("AT+CWJAP=\"SSID\",\"PASSWORD\"\r\n"); // 连接WiFi
    HAL_Delay(5000);

    // OneNET平台连接配置略,此处为HTTP上传方式
}

上传数据:

void ESP8266_HTTP_Upload(uint8_t temp, uint8_t humi) {
    char http_cmd[256];

    sprintf(http_cmd,
        "AT+HTTPCLIENT=3,1,\"http://api.heclouds.com/devices/XXXXX/datapoints\","
        "\"api-key:你的apikey\\r\\nContent-Type:application/json\","
        "\"{\\\"datastreams\\\":[{\\\"id\\\":\\\"temp\\\",\\\"datapoints\\\":[{\\\"value\\\":%d}]},"
        "{\\\"id\\\":\\\"humi\\\",\\\"datapoints\\\":[{\\\"value\\\":%d}]}]\",0\r\n",
        temp, humi);

    UART_SendString(http_cmd);
    HAL_Delay(2000);
}

3.5 主函数逻辑

主函数定时采集温湿度并上传数据:

int main(void) {
    HAL_Init();
    SystemClock_Config();
    MX_GPIO_Init();
    MX_USART1_UART_Init();
    LCD_Init();
    ESP8266_Init();

    uint8_t temp = 0, humi = 0;

    while (1) {
        if (DHT11_Read_Data(&temp, &humi)) {
            LCD_Show_Temp_Humi(temp, humi);
            ESP8266_HTTP_Upload(temp, humi);
        }
        HAL_Delay(10000); // 每10秒上传一次
    }
}

4. 总结

本项目通过STM32与DHT11、ESP8266等模块的组合,实现了一个功能完整、可扩展的环境监控系统。通过连接新版OneNET物联网云平台,用户可以远程实时查看室内温湿度数据,为家庭环境监控、农业大棚控制、仓储环境维护等提供了有效的技术支持。

系统优势:

  • 使用标准硬件模块,便于扩展与维护;
  • 支持OneNET云平台,数据可视化与远程接入;
  • 本地LCD显示增强人机交互体验;
  • 可进一步扩展如报警、控制等功能;

可扩展方向:

  • 增加CO₂、PM2.5等其他传感器;
  • 增加GSM通信支持短信报警;
  • 使用低功耗技术适配电池供电;
  • 引入RTOS进行任务管理和系统稳定性增强;

该系统不仅是一个工程实用案例,也是嵌入式物联网学习的理想项目,具有极强的教学与应用价值。

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐