基于STM32单片机的新版ONENET物联网云平台环境检测系统
基于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是一款集成的数字式温湿度传感器,具有以下特点:
- 测量范围:温度0
50℃,湿度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进行任务管理和系统稳定性增强;
该系统不仅是一个工程实用案例,也是嵌入式物联网学习的理想项目,具有极强的教学与应用价值。
更多推荐



所有评论(0)