基于stm32设计的智能家居控制系统设计_语音+环境检测(onenet)_2022(代码片段)

DS小龙哥 DS小龙哥     2022-12-01     462

关键词:

1. 前言

如今的智能家居越来越深入人心,越来越受人们的欢迎。智能家居作为与人们日常生活息息相关的科技智能产物,可以给我们的生活带来舒适便利。随着物联网、云计算、无线通信等新技术的发展,智能家居得到了快速发展,能让用户利用智能手机来控制家中的设备,实现远程控制、场景控制、联动控制和定时控制等功能。在安全防护上,智能家居安防系统则够在原来的基础上提供立体化防护,帮助用户时刻守护住宅安全,更符合人们的安全需求。节能减排方面的也有积极作用。比如说,智能家居照明系统,它充分利用了自然光的照明作用,自动调节灯具的亮度,在保证室内明亮度的同时,将能耗降到最低,而对于洗手间、储藏室等地方,更是做到了人来灯亮、人走灯灭,一方面方便了用户的日常生活,另一方面也能防止用户忘记及时关灯而造成浪费。

项目源码与资料下载地址: https://download.csdn.net/download/xiaolong1126626497/85896987

视频演示地址: https://www.bilibili.com/video/BV16Y4y147A3?share_source=copy_web&vd_source=347136f3e32fe297fc17177194ce0a8b

2. 设计要求总结

设计题目:基于物联网的语音和环境检测的智能家居控制系统设计

第一种:控制方式需经结合语音命令控制, 控制开关门、灯、电视、开关空调、开关电扇、开关窗帘等。

第二种:控制方式是基于环境检测自动执行控制,根据环境检测结果控制相应的执行机构协作,比如: 当光照低于一定程度(比如低于5OLux)且有人在家里自动开灯,没人在家时自动关灯;如温度高于阈值并且有人在家时打开空调,没人在家时自动关闭等;如光照强度低于一定程度会自动关闭窗帘。电脑和手机APP两端云平台可以展示温湿度,光照等信息,还有各家居的状态,可以在云平台控制家居的开关,可以在云平台进行两种控制方式的切换。

技术选项总结:

(1)物联网平台采用OneNet:OneNET是由中国移动打造的PaaS物联网开放平台。平台能够帮助开发者轻松实现设备接入与设备连接,快速完成产品开发部署,为智能硬件、智能家居产品提供完善的物联网解决方案。

(2)主控芯片采用:STM32F103C8T6

(3)语音控制芯片采用:LD3320 支持普通话识别。

(4)开关空调、开关风扇 采用继电器模拟:两个1路5V继电器控制

(5)开关窗帘采用步进电机模拟: 28BYJ4步进电机模拟

(6)室内照明灯(卧室、客厅):2盏 3W大功率LED灯模拟

(7)环境光检测检测:BH1750数字传感器

(8)联网的WIFI :选择ESP8266

(9)OLED屏幕:模拟电视显示

(11)温湿度检测:DHT11模块

其中:

(1)STM32主控芯片、语音控制芯片LD3320、室内照明大功率LED灯、环境光检测BH1750、ESP8266-WIFI 通过排母插在PCB板子上。

(2)步进电机UL2003驱动板、继电器 使用排针外接。

Android平板电脑显示效果:

Android手机显示效果:

3. 硬件选型

3.1 STM32F103C8T6

STM32F103C8T6是一款基于ARM Cortex-M 内核STM32系列的32位的微控制器,程序存储器容量是64KB,需要电压2V~3.6V,工作温度为-40°C ~ 85°C。

3.2 语音识别模块: LD3320

3.3 ESP8266 -串口WIFI

3.4 LED灯-RGB灯

3.5 3W大功率LED灯

3.6 OLED模块

3.7 步进电机模块

3.8 继电器模块

3.9 杜邦线(母对母)

3.10 红外寻迹/循迹模块

3.11 温湿度-DHT11

3.12 BH1750光敏传感器

4. OneNet创建产品与设备

4.1 创建产品

地址:https://open.iot.10086.cn/develop/global/product/#/console

登录官网、点击右上角进入控制台,然后跟着截图步骤做。

4.2 创建设备

4.3 创建数据流模板

这里添加的就是需要上传的数据流名称,与传感器对应。

添加完毕。一共10个数据点类型。

4.4 创建应用

链接:https://open.iot.10086.cn/studio/view/project

新建项目:

4.5 布局界面

选择表盘修改名称。

修改完点击这里保存。

表盘数据的格式后缀可以修改。

添加按钮。

添加段落。

页面布局成功。

4.6 绑定数据源

接下来是重点,要为每个控件绑定数据源,才可以与设备进行交互。

上面的产品ID和Key从哪里来? 看下面截图。

然后继续增加即可。

接下来重新进入到刚才给控件绑定数据源的页面。绑定数据源即可。

取消过滤器配置,使用数据源的数据值。

下面介绍按钮的数据源配置。

每个开关可以向设备端发送命令,修改命令下发的格式。
这里的V 表示是一个变量,如果我设置成sw1:V 那么就表示下发的命令就是sw1:0或者是sw1:1

其他的按钮一样的配置方法,我就不一一截图了。

4.7 保存预览发布

回到项目页面点击发布。就可以分享链接给别人了。

本项目发布链接地址:https://open.iot.10086.cn/view/main/index.html#/share2d?id=62625265bb4cd10035477bae

5. MQTT协议登录

(1)MQTT服务器地址信息

文档: https://open.iot.10086.cn/doc/v5/develop/detail/248

IP地址: 183.230.40.96
端口号: 1883

(2)生成登录密匙信息

查看MQTT登录报文需要填写的参数来源与格式。

文档: https://open.iot.10086.cn/doc/v5/develop/detail/265

算法介绍文档:https://open.iot.10086.cn/doc/v5/develop/detail/241

下载token生成工具。

工具软件里需要填写的参数如下:

【1】res选项参数的格式: products/产品ID/devices/设备名称

【2】et是设置token过期时间:算出1970-1-1到你想要设置的到期时间,单位是秒,填入即可。

比如: 超时时间设置为2022-4-7,那么,这里填入的秒就是:1970-1-1到2022-4-7之间的秒单位时间。

【3】key的参数格式: 就是设备创建之后,在设备详情页的key

C语言获取秒单位时间的代码:

#include <stdio.h>
#include <time.h>
 #include <time.h>
 
int main()

    time_t time_sec;
    time_sec=time(NULL);  //当前的秒单位时间--UTC时间
	printf("当前时间(秒):%ld\\n",time_sec);
	printf("加一年的时间(秒):%ld\\n",time_sec+12*30*24*60*60);
	return 0;

设备密匙查看:

填入在生成密匙软件中的参数格式:

res选项:products/507546/devices/dev1
et是设置token过期时间:1680445911
key的设备key:vdUElCh1OE0oFV6UNewtZIMryKU8OhQiIbAbKwTc9ak=

生成登录密匙:

生成的值:
version=2018-10-31&res=products%2F507546%2Fdevices%2Fdev1&et=1680445911&method=md5&sign=qgaS0NCoxqSnIFZGL%2Fz81Q%3D%3D

生成的数据就是MQTT服务器登录的密匙。

(3)主题订阅与发布的格式

文档地址:https://open.iot.10086.cn/doc/mqtt/book/device-develop/protocol.html

订阅 topic	订阅效果
$sys/pid/device-name/dp/post/json/accepted	订阅设备数据点上报成功的消息
$sys/pid/device-name/dp/post/json/rejected	订阅设备数据点上报失败的消息
$sys/pid/device-name/dp/post/json/+	订阅设备数据点上报结果
$sys/pid/device-name/cmd/request/+	订阅设备所有命令消息
$sys/pid/device-name/cmd/response/+/+	订阅设备所有命令应答结果消息
$sys/pid/device-name/cmd/#	订阅设备所有命令相关消息
$sys/pid/device-name/#	订阅设备所有相关消息

上传数据点的格式介绍:https://open.iot.10086.cn/doc/mqtt/book/example/datapoints.html

topic 命名规则如下:
$sys/pid/device-name/dp/post/json

本例中,发布 topic 名称为:
$sys/238322/mqtts-test-device/dp/post/json

payload示例如下:

    "id": 123,        
    "dp":              
        "temperatrue": [     
            "v": 30,
        ],
        "power": [     
            "v": 4.5,        
        ]
    

当前设备的主题订阅与主题发布总结:

IP地址: 183.230.40.96
端口号: 1883
clientId: dev1
username: 507546
password: version=2018-10-31&res=products%2F507546%2Fdevices%2Fdev1&et=1680445911&method=md5&sign=qgaS0NCoxqSnIFZGL%2Fz81Q%3D%3D

订阅主题:  $sys/507546/dev1/#
发布主题:  $sys/507546/dev1/dp/post/json
发布消息:  
"id":123,"dp":"bh1750":["v":45],"dht11_h":["v":88],"dht11_t":["v":26]

发布消息: 
"id":123,"dp":"bh1750":["v":45],"dht11_h":["v":88],"dht11_t":["v":26]


"id":123,"dp":"bh1750":["v":45],"dht11_h":["v":88],"dht11_t":["v":26],"gps":["v":"lon":120.086199,"lat":30.139219]

(4)软件模拟登录测试

当前采用MQTT客户端模拟设备,登录Onetnet测试,完成数据交互,测试云端产品设备交互是否OK。

软件下载地址:https://download.csdn.net/download/xiaolong1126626497/18784012

根据软件提示,填充好参数,点击连接服务器,接着订阅主题,发送主题。

然后网页登录OneNet查看设备状态,与数据显示。

查看上传的数据。

(5)云端下发命令给设备

onenet支持以同步的形式发送命令给设备,方便控制设备。

发送命令的方法和设备应答的说明文档:https://open.iot.10086.cn/doc/v5/develop/detail/267

总结:

云端下发的命令格式:
$sys/507546/dev1/cmd/request/3baf8324-e5d4-43f1-be89-118299c3b583
LED_ON

其中:
3baf8324-e5d4-43f1-be89-118299c3b583  表示当前的请求ID,设备应答的时候需要带上这个ID返回去。
LED_ON  表示云端下发的命令内容


设备收到这个命令之后,需要向云端回应。

回应的格式如下:
发布主题: $sys/507546/dev1/cmd/response/3baf8324-e5d4-43f1-be89-118299c3b583
发布的消息:111

其中:111   是返回给云端的消息内容,111是随便写的,举个例子。

下面来实操演示一下过程:

登录OneNet官网,点开设备列表页面,先让设备登录服务器,点击更多操作,点击下发命令。

编辑好参数,点击发送。

这时MQTT设备端就会收到提示。

然后拼接好命令再发送应答给服务器。

网页上收到正确的响应。

发布的网页上也显示了正确的数据:

6. LD3320语音识别模块编程

下载程序示例。 将开发板的串口通过USB转TTL模块连接电脑即可。

波特率是9600,语音识别时,想要说小杰,唤醒语音识别,然后再说出指令,唤醒语音识别就,模块上有一个红色的LED灯会亮。

当前支持的指令如下:

小杰,开卧室灯
小杰,关卧室灯
小杰,开客厅灯
小杰,关客厅灯
小杰,打开电视
小杰,关闭电视
小杰,打开风扇
小杰,关闭风扇
小杰,打开窗帘
小杰,关闭窗帘
小杰,打开空调
小杰,关闭空调

7. STM32设备端开发

7.1 程序下载

7.2 原理图

7.3 硬件接线

本设计的硬件接线说明:1)OLED显示屏接线:
D0----(SCK)------------------->>PB14
D1----(MOSI)------------------>>PB13
RES—(复位脚低电平有效)-------->>PB12
DC--(数据和命令控制管脚)------>>PB1
CS--(片选引脚)---------------->>PA7
GND--------------------------->>GND
VCC--------------------------->>3.3V或者5V


(2)ATK-ESP8266 WIFI接线
PA2(TX)--RXD 模块接收脚
PA3(RX)--TXD 模块发送脚
GND---GND 地
VCC---VCC 电源(3.3V~5.0V)


(3)LD3320语音识别模块接线说明
GND----GND
VCC---3.3V
PB11----LD3320语音模块_TX
PB10----LD3320语音模块_RX


(4)开关空调:15V继电器控制
PA6------LED

(5)开关风扇:15V继电器控制
PA4------LED

(6)开关窗帘采用步进电机模拟: 28BYJ4步进电机模拟
ULN2003接线:
 IN-D: PB5   d
 IN-C: PB4   c
 IN-B: PB3   b
 IN-A: PB2   a
+  : 5V
-  : GND

(7)卧室照明灯:一盏3W大功率LED灯模拟
PB8------LED

(8)客厅照明灯:一盏3W大功率LED灯模拟
PB9------LED

(9)环境光检测检测:BH1750数字传感器
SDA-----PB7
SCL-----PB6
GND---GND 地
VCC---VCC 电源(3.3V~5.0V)


(10)温湿度传感器: DHT11
VCC--VCC
GND---GND
DAT---PA5 

(11)红外寻迹/循迹模块
VCC--3.3V
GND---GND
DAT---PA8


(--)板载LED灯:低电平亮
LED1--PC13  
BEEP2--PC14

(--)板载按键: 
KEY1--PA0  按下为高电平

7.4 核心代码

#include "stm32f10x.h"
#include "delay.h"
#include "led.h"
#include "key.h"
#include "sys.h"
#include "usart.h"
#include <string.h>
#include <stdlib.h>
#include "timer.h"
#include "oled.h"
#include "fontdata.h"
#include "esp8266.h"
#include "app.h"
#include "mqtt.h"
#include "iic.h"
#include "bh1750.h"
#include "dht11.h"
#include "motor.h"

/*
本设计的硬件接线说明: 

(1)OLED显示屏接线:
D0----(SCK)------------------->>PB14
D1----(MOSI)------------------>>PB13
RES—(复位脚低电平有效)-------->>PB12
DC--(数据和命令控制管脚)------>>PB1
CS--(片选引脚)---------------->>PA7
GND--------------------------->>GND
VCC--------------------------->>3.3V或者5V


(2)ATK-ESP8266 WIFI接线
PA2(TX)--RXD 模块接收脚
PA3(RX)--TXD 模块发送脚
GND---GND 地
VCC---VCC 电源(3.3V~5.0V)


(3)LD3320语音识别模块接线说明
GND----GND
VCC---3.3V
PB11----LD3320语音模块_TX
PB10----LD3320语音模块_RX


(4)开关空调:1路5V继电器控制
PA6------LED

(5)开关风扇:1路5V继电器控制
PA4------LED

(6)开关窗帘采用步进电机模拟: 28BYJ4步进电机模拟
ULN2003接线:
 IN-D: PB5   d
 IN-C: PB4   c
 IN-B: PB3   b
 IN-A: PB2   a
+  : 5V
-  : GND

(7)卧室照明灯:一盏3W大功率LED灯模拟
PB8------LED

(8)客厅照明灯:一盏3W大功率LED灯模拟
PB9------LED

(9)环境光检测检测:BH1750数字传感器
SDA-----PB7
SCL-----PB6
GND---GND 地
VCC---VCC 电源(3.3V~5.0V)


(10)温湿度传感器: DHT11
VCC--VCC
GND---GND
DAT---PA5 

(11)红外寻迹/循迹模块
VCC--3.3V
GND---GND
DAT---PA8


(--)板载LED灯:低电平亮
LED1--PC13  
BEEP2--PC14

(--)板载按键: 
KEY1--PA0  按下为高电平

*/


//物联网服务器的设备信息
#define MQTT_ClientID "dev1"
#define MQTT_UserName "507546"
#define MQTT_PassWord "version=2018-10-31&res=products%2F507546%2Fdevices%2Fdev1&et=1680445911&method=md5&sign=qgaS0NCoxqSnIFZGL%2Fz81Q%3D%3D"

//订阅与发布的主题
#define SET_TOPIC  "$sys/507546/dev1/#"  //订阅
#define POST_TOPIC "$sys/507546/dev1/dp/post/json"  //发布

//设置连接的路由器信息
#define CONNECT_WIFI  "Xiaomi_meizi6"   //将要连接的路由器名称 --不要出现中文、空格等特殊字符
#define CONNECT_PASS "12170307yu"       //将要连接的路由器密码

#define CONNECT_SERVER_IP "183.230.40.96"   //服务器IP地址
#define CONNECT_SERVER_PORT 1883            //服务器端口号


char mqtt_message[100];

//WIFI发送数据存储区域
char data_buff[500];

u8 esp8266_state=0;

double Longitude=120.196517; //经度
double latitude=30.194493;  //纬度

u8 bh1750=0;
 
u8 dht11_temp;
u8 dht11_humidity;
u8 sw1=0;
u8 sw2=0;
u8 sw3=0;
u8 sw4=0;
u8 sw5=0;
u8 sw7=0;

/*
主函数: 程序执行的入口
*/
int main(void)

    u8 dian_shi=0; //1表示电视开 0表示电视关
    u8 mode=0; //0 表示手动模式  1表示自动模式
    u32 i=0;
    u8 key_val;
	u32 TimeCnt=0;
    u32 wifi_TimeCnt=0;
    JTAG_Set();
    USART1_Init(115200);    //串口1的初始化
    USART2_Init(115200);    //串口-WIFI
    TIMER2_Init(72,20000);  //超时时间20ms
    USART3_Init(9600);      //串口-语音模块
    TIMER3_Init(36,20000);  //超时时间20ms
    
    //板载按键初始化
    KEY_Init();
    //板载LED灯初始化
    LED_Init();
    //外接LED初始化
    LED2_Init();
    //BH1750的IIC接口
    IIC_Init();
    //初始化DHT11
    DHT11_Init();
    //步进电机初始化	
    Moto_Init(); 
    //初始化
    APP_Init毕业设计:基于stm32的智能家居无线(蓝牙wifi)语音控制系统(代码片段)

        本项目以STM32单片机为主控,可采用蓝牙或wifi等无线方式来控制,外设接有各种传感器:温湿度传感器、烟雾报警传感器、人体感应等,可通过手机APP或其他终端通过无线控制开灯、开门、控制各种电... 查看详情

基于stm32设计物联网在线智能称重系统(onenet)_2022

...辆称重地螃的智能化升级要求。需要结合这些场合,设计基于物联网的智能在线称重方案,开发智能称重控制器,合理选择部署多个重量传感器和必要的算法、NB一IoT或GPRS等通信模块、GPS定位模块,采集车辆重数据一地理位置信... 查看详情

基于stm32设计物联网在线智能称重系统(onenet)_2022

...辆称重地螃的智能化升级要求。需要结合这些场合,设计基于物联网的智能在线称重方案,开发智能称重控制器,合理选择部署多个重量传感器和必要的算法、NB一IoT或GPRS等通信模块、GPS定位模块,采集车辆重数据一地理位置信... 查看详情

毕业设计——基于stm32的智能家具系统(语音识别控制步进电机舵机)(代码片段)

智能家具系统分为两个不同版本系列:①系列一:手机app远程控制、远程检测温湿度显示在app,(云平台)!!!!          https://blog.csdn.net/m0_59113542/article/details/123737710②系列二:语音识别控... 查看详情

基于stm32单片机项目设计目录-加油吧√

★♥基于STM32单片机项目设计目录√♥※目录★♥基于STM32单片机项目设计目录√♥※1、基于STM32的音乐喷泉2、STM32的智能浇水补光系统3、基于STM32的手机通过wifi控LED灯4、基于STM32的电子打铃器5、基于STM32的智能手环6、基于STM32... 查看详情

基于stm32单片机项目设计目录-加油吧√

★♥基于STM32单片机项目设计目录√♥※目录★♥基于STM32单片机项目设计目录√♥※1、基于STM32的音乐喷泉2、STM32的智能浇水补光系统3、基于STM32的手机通过wifi控LED灯4、基于STM32的电子打铃器5、基于STM32的智能手环6、基于STM32... 查看详情

基于stm32的智能家居控制系统设计与实现(带红外遥控控制空调)

1.前言智能家居作为家庭信息化的实现方式,已经成为社会信息化发展的重要组成部分,物联网因其巨大的应用前景,将是智能家居产业发展过程中一个比较现实的突破口,对智能家居的产业发展具有重大意义。本文基于现有智... 查看详情

基于stm32的智能家居控制系统设计与实现(带红外遥控控制空调)

1.前言智能家居作为家庭信息化的实现方式,已经成为社会信息化发展的重要组成部分,物联网因其巨大的应用前景,将是智能家居产业发展过程中一个比较现实的突破口,对智能家居的产业发展具有重大意义。本文基于现有智... 查看详情

13基于stm32的语音识别垃圾桶

13、基于STM32的语音识别垃圾桶引言1系统概述1.1设计任务1.2设计要求2方案设计及论证2.1确定控制方案2.2芯片选型2.2.1主控芯片选型2.2单片机STC11L08XE2.3语音识别模块介绍3硬件设计3.1最小系统模块3.2稳压电路3.3语音识别接口4系统程... 查看详情

基于stm32的智能家居控制系统设计

大家好!这里简单举一个做的一个很简单的小项目给大家,帮助大家了解一下单片机STM32的简单应用。后续也会给大家不断分享项目实践。功能需求随着社会的进步,经济的快速发展,人们对于日常生活科技化的... 查看详情

5♥☆基于stm32的智能手环√★☆(代码片段)

5、♥☆基于STM32的智能手环√★☆💙💙文章目录5、♥☆基于STM32的智能手环√★☆💙💙Introduction引言1、系统概述1.1、设计任务1.2、设计要求2、方案设计与论证2.1、芯片选择方案2.2系统概述2.3、设计要求2.4、系... 查看详情

5♥☆基于stm32的智能手环√★☆(代码片段)

5、♥☆基于STM32的智能手环√★☆💙💙文章目录5、♥☆基于STM32的智能手环√★☆💙💙Introduction引言1、系统概述1.1、设计任务1.2、设计要求2、方案设计与论证2.1、芯片选择方案2.2系统概述2.3、设计要求2.4、系... 查看详情

基于stm32设计智能家居控制系统(onenet)_2022(代码片段)

...的生活方式发生着巨大改变,基于物联网技术实现的智能家居使我们的生活变得更加方便快捷。本次设计结合现代生活的具体需求,设计出一套基于物联网技术的智能家居电子系统设计,可以远程实时查看家里光照强... 查看详情

基于stm32的智能鱼缸设计(代码片段)

...换水、氛围灯灯光变换和自动或手动喂食等功能为一体的控制系统,可通过控制键进行一键控制。从功能上分析 查看详情

基于stm32的智能温室控制系统仿真电路设计(温控补光)-设计资料(代码片段)

#include"stm32f10x.h"#include"LQ12864.h"#include"adc.h"#include"dth11.h"#definePUSH_UP1#definePUSH_DOWN2#definePUSH_OK3#definePUSH_NONE4voidmain_delay(u32ms) inti,j; f 查看详情

毕业设计之-基于stm32的智能药箱系统设计与实现(代码片段)

文章目录1简介2绪论2.1课题背景2.2实现功能3系统设计3.1系统架构3.2硬件设计3.2.1wifi电路设计3.2.2其他电路设计3.3软件设计3.3.1软件工作流程3.3.2闹铃提醒程序设计3.3.3液晶显示程序设计3.3.4信息存储程序设计3.3.5报警电路程序设计3.4... 查看详情

基于stm32c8t6的智能蓝牙小车控制设计-毕设课设资料(代码片段)

stm32最小系统(10r)型号具体为STM32F103C8T6jdy-31蓝牙模块(10r)L298N继电器模块(10r)直流步进电机版直插电解小车底座50-70r(套装包括四个直流电机四个车轮两块亚克力板车身)#include"stm32f10x_gpio... 查看详情

基于stm32设计智能称重系统(华为云iot)

伴随着网络技术,各种通讯技术,传感器技术的飞速发展,物联网技术成为了当今技术领域发展为迅速的技术。而物联网技术的核心仍然是以互联网技术为基础的,物联网是新一代信息技术的重要组成部分,也是信息化时代的重... 查看详情