基于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产品创建

参考文章OneNet平台创建产品-CSDN博客

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.项目源码

完整项目下载:

GitHub - StrayFatCatAzA/STM32_ESP8266_NET_Publish

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐