1. 项目概述
最近在完成STM32裸机和RTOS学习后,我开始探索嵌入式网络通信领域。在众多物联网协议中,MQTT因其轻量级特性成为嵌入式设备的理想选择。本文将分享如何通过STM32+DHT11+ESP8266+ONENET平台实现远程环境监测与设备控制的全过程。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 硬件系统设计
2.1 核心硬件选型
系统采用模块化设计,主要硬件组件包括:
- 主控芯片:STM32F103C8T6最小系统板
- 温湿度传感器:DHT11单总线数字传感器
- 网络模块:ESP8266-01S WiFi模块
- 显示模块:0.96寸OLED屏幕
2.2 硬件连接方案
各模块连接方式如下:
-
DHT11:
- DATA → PA11
- VCC → 3.3V
- GND → GND
-
ESP8266:
- TX → PA3(USART2_RX)
- RX → PA2(USART2_TX)
- VCC → 3.3V
- GND → GND
-
OLED:
- SCL → PB6(I2C1_SCL)
- SDA → PB7(I2C1_SDA)
注意:ESP8266模块需要独立3.3V供电,避免与MCU共用电源导致电流不足
3. DHT11温湿度采集实现
3.1 单总线协议解析
DHT11采用单总线通信协议,其工作时序包括三个关键阶段:
-
起始信号:
- 主机拉低总线18-30ms
- 释放总线后等待20-40us
-
响应信号:
- 从机拉低总线80us
- 然后拉高80us
-
数据传输:
- 每位数据以50us低电平开始
- 高电平26-28us表示"0"
- 高电平70us表示"1"
3.2 软件实现关键点
c复制// 读取单bit数据示例
uint8_t DHT11_ReadBit(void) {
uint8_t timeout = 0;
while(GPIO_ReadInputDataBit(DHT11_GPIO_PORT, DHT11_GPIO_PIN) && timeout++ < 100)
Delay_us(1);
t
