基于STM32单片机的新版ONENET物联网云平台环境检测手机APP系统
1 基于STM32单片机的新版OneNET物联网云平台环境检测手机APP系统设计
本设计旨在利用STM32单片机搭建一个环境检测与远程控制系统,系统通过DHT11传感器获取温湿度信息,并将数据上传至新版OneNET物联网云平台,实现远程监控。同时,用户可通过手机APP实时查看环境信息,并对系统中的LED灯进行远程开关控制。该系统综合了传感器检测、单片机数据处理、物联网通信及移动端应用交互等多个技术模块,具有很强的实践性和应用价值。
2 系统功能介绍
本系统的功能主要包括以下几点:
-
环境数据采集
系统采用DHT11温湿度传感器对周围环境的温度与湿度进行实时检测,并通过STM32单片机的接口进行数据读取。采集到的数据经过单片机的处理后,以标准的数据格式进行封装。 -
数据上传至云平台
STM32单片机通过ESP8266 WiFi模块与新版OneNET物联网云平台建立连接,将采集到的环境数据实时上传至平台。云端服务器保存与管理这些数据,为后续的移动端访问提供数据支持。 -
手机APP端显示与控制
用户可通过手机APP查看当前温度与湿度数值,并可以通过APP发送控制指令,控制远程设备上的LED灯。此功能体现了物联网系统中“感知—传输—应用”的完整闭环。 -
报警与扩展功能
系统可以设置温湿度阈值,当数据超出范围时,通过云端消息推送至APP提示用户。未来还可扩展更多环境参数的采集,如光照、空气质量等。
3 系统电路设计
3.1 STM32单片机最小系统电路
STM32单片机作为系统的核心控制器,承担着数据采集、通信处理和逻辑控制等任务。最小系统电路由以下部分构成:
- 电源电路:通过稳压芯片提供稳定的3.3V电压,保证单片机及外设稳定运行。
- 复位电路:由按键和电阻电容构成,确保上电后系统能正常启动。
- 时钟电路:外部晶振为系统提供稳定的时钟信号,保证处理速度与通信稳定性。
3.2 DHT11温湿度传感器电路
DHT11通过单总线与STM32连接,通信协议简单,硬件接口要求低。传感器需要提供稳定的5V或3.3V电源,并通过一个数据引脚与单片机相连,电路中通常需要一个上拉电阻。
DHT11模块定时输出温湿度数据,STM32通过GPIO捕获数据并进行解码。
3.3 ESP8266 WiFi通信电路
ESP8266模块作为WiFi通信接口,通过串口与STM32进行数据交互:
- TXD/RXD引脚:连接到STM32的USART接口,实现AT指令通信。
- 电源部分:需要稳定的3.3V供电,工作电流在数百毫安范围,因此电源设计需有足够电流驱动能力。
该模块负责与路由器连接,并与OneNET物联网云平台进行数据交互。
3.4 LED控制电路
LED通过限流电阻连接到STM32的GPIO口,单片机输出高电平点亮LED,输出低电平熄灭LED。当手机APP下发控制命令后,单片机即可根据指令控制LED的开关状态。
3.5 OLED显示电路(可选)
为了增强本地显示效果,系统还可以加入OLED模块,通过I2C接口与STM32连接,在本地显示实时温湿度数据。虽然核心功能由APP完成,但OLED显示增加了独立性与调试的便利性。
4 程序设计
4.1 主程序逻辑
主程序负责系统初始化、数据采集、数据上传、指令接收和控制执行等核心任务。其流程为:
- 初始化单片机外设(GPIO、USART、I2C等)。
- 初始化DHT11传感器,周期性采集温湿度数据。
- 初始化ESP8266并连接WiFi及OneNET云平台。
- 上传环境数据至云平台。
- 接收来自APP的控制指令,驱动LED执行相应操作。
主程序框架代码如下:
#include "stm32f10x.h"
#include "dht11.h"
#include "esp8266.h"
#include "led.h"int main(void)
{uint8_t temp, humi;SystemInit();LED_Init();DHT11_Init();ESP8266_Init();ESP8266_ConnectWiFi("SSID","PASSWORD");ESP8266_ConnectOneNET("DeviceID","APIKey");while(1){// 采集温湿度数据if(DHT11_ReadData(&temp, &humi) == 0){// 上传数据至OneNETESP8266_SendDataToOneNET(temp, humi);}// 接收APP下发控制指令uint8_t cmd = ESP8266_ReceiveCmd();if(cmd == 1) LED_On();else if(cmd == 0) LED_Off();Delay_ms(2000);}
}
4.2 DHT11温湿度采集程序
DHT11通过单总线协议传输数据,需严格控制时序。程序主要步骤包括起始信号、传感器响应、数据接收和校验。示例代码如下:
uint8_t DHT11_ReadData(uint8_t *temp, uint8_t *humi)
{uint8_t buf[5] = {0};// 起始信号DHT11_Start();if(DHT11_CheckResponse() == 0) return 1;for(int i=0;i<5;i++){buf[i] = DHT11_ReadByte();}if(buf[0]+buf[1]+buf[2]+buf[3] == buf[4]){*humi = buf[0];*temp = buf[2];return 0;}return 1;
}
4.3 ESP8266 WiFi通信程序
ESP8266模块通过AT指令与单片机通信,主要功能包括连接WiFi、连接OneNET平台和上传数据。示例代码如下:
void ESP8266_SendDataToOneNET(uint8_t temp, uint8_t humi)
{char json[100];sprintf(json, "{\"Temperature\":%d,\"Humidity\":%d}", temp, humi);ESP8266_SendData(json);
}
接收APP指令的函数示例:
uint8_t ESP8266_ReceiveCmd(void)
{if(strstr(USART_RX_BUF,"LED_ON")) return 1;else if(strstr(USART_RX_BUF,"LED_OFF")) return 0;return 2; // 无指令
}
4.4 LED控制程序
LED控制部分程序较为简单,只需通过GPIO输出高低电平实现:
void LED_Init(void)
{GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOC, &GPIO_InitStructure);
}void LED_On(void)
{GPIO_ResetBits(GPIOC, GPIO_Pin_13); // 假设低电平点亮
}void LED_Off(void)
{GPIO_SetBits(GPIOC, GPIO_Pin_13);
}
5 总结
基于STM32单片机的新版OneNET物联网云平台环境检测手机APP系统,实现了温湿度采集、数据上传和远程控制的完整物联网应用。系统采用DHT11传感器获取环境数据,ESP8266模块完成WiFi通信,云端平台实现数据存储与转发,用户通过APP实时获取信息并进行控制。该系统不仅具有较强的实用价值,同时也为学习STM32单片机、物联网云平台和APP交互提供了一个完整的设计案例。