基于STM32的智能家居系统(新版)
基于STM32的智能家居系统
一、项目介绍
本工程使用STM32F103最小系统、ESP8266-01SWIFI模块、DHT11温湿度传感器、BH1750温度传感器和OLED模块,实现实时读取传感器环境温度并通过OLED屏幕显示,随后通过ESP8266WIFI模块上传数据至华为云,同时可以通过ONENET平台远程下发指令给STM32,实现远程控制。
二、项目实物

图中OLED显示系统信息,从上到下依次为:温度、湿度;光照强度;LED灯状态、风扇状态(未接实物)
三、项目硬件及接线
硬件表:
| 元件名称 | 数量 |
|---|---|
| STM32F103C8T6最小系统板 | 1 |
| DHT11温湿度传感器 | 1 |
| BH1750温度传感器 | 1 |
| ESP8266-01S WIFI模块 安信可 | 1 |
| 0.96寸4针脚OLED显示屏 | 1 |
| CH340 USB转TTL模块 | 1 |
| CH340C ESP8266 下载烧录器 | 1 |
| 跳线 | 若干 |
接线表:
DHT11温湿度传感器
| DHT11引脚 | 单片机引脚 |
|---|---|
| DATA | PB12 |
| VCC | 3.3V |
| GND | GND |
BH1750光照传感器
| BH1750引脚 | 单片机引脚 |
|---|---|
| SCL | PB10 |
| SDA | PB11 |
| VCC | 3.3V |
| GND | GND |
| ADDR | 悬空 |
OLED显示屏
| OLED引脚 | 单片机引脚 |
|---|---|
| SCL | PB8 |
| SDA | PB9 |
| VCC | 3.3V |
| GND | GND |
ESP8266 WIFI模块
| ESP8266引脚 | 单片机引脚 |
|---|---|
| TX | PA10 |
| RX | PA9 |
| VCC | 3.3V |
| GND | GND |
CH340 电脑调试串口
| CH340引脚 | 单片机引脚 |
|---|---|
| TX | PA2 |
| RX | PA3 |
| GND | GND |
四、项目搭建
1.ESP8266 MQTT AT 固件烧录
参考文章ESP8266固件烧录MQTT AT固件-CSDN博客
2. ONENET产品创建
3. 项目配置
修改net_config.h文件中的定义,本步骤需要有OneNet平台创建产品-CSDN博客作为前置,如果没有完成,请先阅读该步骤
对应信息在查询在onenet平台配置文档中
- 修改接入API
#define PLATFORM_ADDR "mqtts.heclouds.com"
#define PLATFORM_PORT 1883
- 修改接入设备信息
填写onenet平台的三元组
#define CLIENT_ID "your_client_id"
#define USERNAME "your_username"
#define PASSWORD "your_password"

修改设备接入WiFi

- 修改数据结构体及长度
数据结构体根据你要上报的数据量创建,要初始化三个参数:名称、数据类型和数据值,名称是onenet平台的物模型标识符;数据类型要和onenet平台的相同;数据值要和数据类型相同。

在esp8266.h文件extern 外部变量声明,以便主函数调用

- 修改命令控制函数
根据你命令需要控制什么设备,这里就修改成对应的控制函数和判断条件

五、项目解析
主函数控制流程
通过使用的定时器+标志位实现精确控制,主循环查询标志位并执行对应函数
ESP8266接收数据流程解析
首先主函数中调用ESP8266_CheckReceviceFlag函数判断是否接收到数据
如果接收到则进入 ESP8266_ReceiveDataHandler 函数 该函数负责处理接收消息
如果是设备命令控制消息,则进入消息处理和命令执行
ESP8266_CommandDataProcesser 负责处理下发命令
ESP8266_CommandControl 根据命令控制设备
处理后马上发布一次数据 ESP8266_PublishData
不是命令则清空缓冲区,跳出函数ESP8266_ReceiveDataHandler
数据结构体解析
采用面向对象的思维,通过使用结构体实现上报数据实例化,每一个需要上报的数据都是一个mqttDataStruct并且都必须实例化,由对应函数自动分析并上报
/* 数据类型宏定义 */
#define BOOL_TYPE (0x01 << 1)
#define INT_TYPE (0x01 << 2)
#define DOUBLE_TYPE (0x01 << 3)
#define STRING_TYPE (0x01 << 4)
/* 定义联合体,用于存储不同类型的数据 */
typedef union
{
uint8_t bool_val; // 布尔型
int16_t int_val; // 整型
double double_val; // 浮点型
const char *string_val; // 字符串
} valType;
/* 定义属性结构体 */
typedef struct
{
char *name; // 名称
uint8_t val_type; // 类型
valType value; // 数据
} mqttDataStruct;
六、项目结构及源码
1.项目结构
Project
CORE # 系统启动文件
DOC # 项目参考文档
OUTPUT # 编译文件
STM32F10x_FWLib # 库函数
HARDWARE # 硬件驱动文件和中间文件
SYSTEM # 系统自带驱动(定时器、延迟函数、调试串口)
USER # 用户文件
2.项目源码
完整项目下载:
更多推荐



所有评论(0)