系列文章目录
01-STM32获取DHT11数据
文章目录
前言
本文用于记录一下前几天完成的物联网课设,完成的效果: 实时监测温度变化,并且可以远程控制灯开关(考虑加上远程控制风扇功能 但我懒。而且其实单个ESP8266就可以实现整个功能,还简单) 代码我会上传github,请自行pull代码
网页控制开关灯:
实现思路:STM32负责接收和控制设备。ESP8266通过AT+MQTT指令和服务器进行通信(ESP8266在此次课设只用于通信),最后用Spring Boot集成Java的MQTT库实现一个MQTT的Client作为后端,后端作为订阅者订阅ESP8266的Topic并接收ESP8266发布的消息。然后通过前端发送Http请求来实现消息发布(ESP8266此时是订阅者,要订阅后端的Topic),ESP8266接收消息后通过串口发送给STM32,STM32接收并解析从而实现远程控制功能。
通信流程概念框图:
注:我并没有使用云平台,而是直接在虚拟机上用docker部署了一个emqx服务,用于模拟云平台,实际上直接使用云平台会比这个更加容易和方便。其次,本文基本不会讲原理,因为我也不会。代码都是参考其他人的博客文章,这个图也是改别人的。最后在文末会引用所有参考过的博客/文章
优快云这个markdown居然不能改图片比例,真挺难看的
所需物理设备:USB数据线1根、LED灯1个、ESP8266模块1个、OLED显示屏1个(用于调试)、杜邦线n根、DHT11温湿度传感器1个、ST-Link 1个、STM32C8T6 1个、面包板1块,硬件准备图如下:
提示:以下是本篇文章正文内容,下面案例可供参考
一、参考别人代码
我参考的:DHT11标准库代码实现
还是比较简单的,想要了解通信原理的可以参考其他帖子,这里随便放一篇
STM32实现DHT11温湿度采集串口显示(标准库与HAL库实现)
参考代码解压后,看Hardware部分,代码都比较简单
System.h 主要是位带操作。这是他代码实现传感器工作时序的核心,不能替换。
SysTick.c 就是延时函数,换成了自己的。
dht11.c 基本没改,我将所有位带操作的参数和需要开放的引脚都分别用一个全局变量代替,方便自己修改。此为部分dht11.c代码
// System.h宏 所需的引脚参数 (0~15)
uint16_t PIN_NUM = 1;
// 初始化的引脚
#define GPIO_PIN_NUM GPIO_Pin_1
void dht11_pin_mode(GPIOMode_TypeDef pin_mode<