基于STM32设计的智能家居控制系统(华为云IOT)

发布时间:2023-08-08  

1. 功能介绍

随着物联网技术的快速发展,智能家居控制系统成为了人们追求便捷、舒适和安全生活的重要组成部分。为了满足用户对智能家居的需求,设计了一款基于华为云物联网平台的智能家居控制系统,硬件采用了STM32和ESP8266的组合,实现了设备的上云连接。

传统的家居控制系统存在一些不足,比如需要人工操作、无法实现远程控制等。而我们的智能家居控制系统,通过与华为云物联网平台的连接,可以实现远程控制各种电器开关,并且可以远程收集家里煤气、天然气、烟雾、光照度、温度湿度等信息,为用户提供更加智能化和便捷的家居体验。

智能家居控制系统具有以下主要特点和功能:

  1. 远程控制:通过与华为云物联网平台的连接,用户可以通过手机APP或者Web界面实现对家里各种电器开关的远程控制。比如,可以远程打开空调、关闭灯光等,无论身在何处都能够实现对家居设备的控制。

  2. 多种传感器数据采集:系统采用了多种传感器,包括煤气传感器、天然气传感器、烟雾传感器、光照度传感器、温湿度传感器等,可以实时采集家里的环境信息。这些数据通过ESP8266模块上传到华为云物联网平台,用户可以随时查看家居环境的状态。

  3. 安全监测:通过煤气传感器、天然气传感器和烟雾传感器等,我们的系统可以实时监测家里的安全状况。一旦检测到异常情况,比如煤气泄漏或者火灾,系统会立即发送警报通知用户,保障家庭安全。

  4. 智能化场景设置:基于华为云物联网平台的数据处理能力,智能家居控制系统可以实现智能化的场景设置。比如,用户可以根据时间、温度、湿度等条件,设置自动调节空调温度,实现节能和舒适的效果。

硬件介绍:

主控MCU: STM32F103ZET6

烟雾检测传感器: MQ2

天然气检测传感:MQ5

温度湿度检测传感器: DHT11

光照强度检测传感器: BH1750

物联网云平台: 华为云物联网平台

电器开关模拟采用板载的LED灯、继电器。

WIFI: ESP8266 这是支持串口AT指令控制的WIFI模块,联网比较方便。

与华为云物联网平台通信的协议: MQTT

说明: 当前程序里的MQTT协议代码是参考MQTT官方文档编写的,不是使用ESP8266内置的,所以程序并不依赖ESP8266专用或者指定的SDK,使用任意可以上网的网卡都可以套用,并不是一定非要使用ESP8266。

2. 登录华为云创建云端设备

2.1 创建产品

华为运官网: https://www.huaweicloud.com/

image-20211130093052619

image-20211130093130834

image-20211130093332117

在这里可以查看接入的协议的端口号和地址。

image-20211130093421386

image-20211130093603183

MQTT (1883) a161a58a78.iot-mqtts.cn-north-4.myhuaweicloud.com

我们设备接入的协议选择MQTT,端口对应是1883

接下来继续创建产品,点击产品页面,点击右上角创建产品:

image-20211130093745795

image-20211130093959379

image-20211130094029260

2.2 创建设备

image-20211130094202682

image-20211130094444452

这是我的设备信息:

设备ID

 61a580fad28ce3028832c2d8_esp8266_iot

 

 设备密钥

 1126626497

     

 {

     "device_id": "61a580fad28ce3028832c2d8_esp8266_iot",

     "secret": "1126626497"

 }



2.3 产品模型定义

这一步就是设置上报设备的属性,也就是设备的数据类型定义。

image-20211130095128692

image-20211130095303483

image-20211130095419588

image-20211130095504351

2.4 生成MQTT登录密匙

创建完产品、设备之后,接下来就需要知道如何通过MQTT协议登陆华为云服务器。

官方的详细介绍在这里: https://support.huaweicloud.com/devg-iothub/iot_01_2127.html#ZH-CN_TOPIC_0240834853__zh-cn_topic_0251997880_li365284516112

image-20211130101143554

image-20211130101210816

MQTT设备登陆密匙生成地址: https://iot-tool.obs-website.cn-north-4.myhuaweicloud.com/

image-20211130101436487

下面就得到了MQTT协议设备登录的参数。

2.5 使用MQTT客户端软件登录

所有的参数已经得到,接下来采用MQTT客户端登录华为云进行测试。

下面这个软件是自己开发的,为了方便测试MQTT协议登录。

华为云物联网平台的域名是: a161a58a78.iot-mqtts.cn-north-4.myhuaweicloud.com

华为云物联网平台的IP地址是: 121.36.42.100

image-20211130101631861

在软件里参数填充正确之后,就看到设备已经连接成功了。

接下来打开设备页面,可以看到设备已经在线了。

image-20211130102000677

2.6 上报数据

官方文档: https://support.huaweicloud.com/devg-iothub/iot_01_2127.html#ZH-CN_TOPIC_0240834853__zh-cn_topic_0251997880_li365284516112

在这个文档里介绍了MQTT上报数据的格式。

image-20211130102227428

image-20211130104332330

image-20211130104437937

总结的格式:

//订阅主题: 平台下发消息给设备
 $oc/devices/61a580fad28ce3028832c2d8_esp8266_iot/sys/messages/down 
 //设备上报数据
 $oc/devices/61a580fad28ce3028832c2d8_esp8266_iot/sys/properties/report 
 //上报的属性消息 (一次可以上报多个属性,在json里增加就行了)
 {"services": [{"service_id": "dht11","properties":{"DHT11-C":50}}]}

下面采用MQTT软件上报数据:

image-20211130104628591

image-20211130104709827

到此,设备数据已经上报成功,如果需要增加更多的属性,按照流程继续增加即可。

3. STM32+ESP8266上报数据到华为云

项目源码下载: https://download.csdn.net/download/xiaolong1126626497/81993720

3.1 硬件设备效果图

image-20211130135133532

image-20211130105710464

3.2 BH1750.c 光照度传感器

#include "bh1750.h"

float Read_BH1750_Data()

{

    unsigned char t0;

    unsigned char t1;

    float t;

    u8 r_s=0;

    IIC_Start(); //发送起始信号

    IIC_WriteOneByteData(0x46);

    r_s=IIC_GetACK();//获取应答

    if(r_s)printf("error:1 ");

    IIC_WriteOneByteData(0x01);

    r_s=IIC_GetACK();//获取应答

     if(r_s)printf("error:2 ");

    IIC_Stop(); //停止信号 

    

    IIC_Start(); //发送起始信号

    IIC_WriteOneByteData(0x46);

    r_s=IIC_GetACK();//获取应答

    if(r_s)printf("error:3 ");

    IIC_WriteOneByteData(0x01);

    r_s=IIC_GetACK();//获取应答

    if(r_s)printf("error:4 ");

    IIC_Stop(); //停止信号 

    

    IIC_Start(); //发送起始信号

    IIC_WriteOneByteData(0x46);

    r_s=IIC_GetACK();//获取应答

    if(r_s)printf("error:5 ");

    IIC_WriteOneByteData(0x10);

    r_s=IIC_GetACK();//获取应答

    if(r_s)printf("error:6 ");

    IIC_Stop(); //停止信号 

    

    DelayMs(300); //等待

    

    IIC_Start(); //发送起始信号

    IIC_WriteOneByteData(0x47);

    r_s=IIC_GetACK();//获取应答

    if(r_s)printf("error:7 ");

    

    t0=IIC_ReadOneByteData(); //接收数据

    IIC_SendACK(0); //发送应答信号

    t1=IIC_ReadOneByteData(); //接收数据

    IIC_SendACK(1); //发送非应答信号

    IIC_Stop(); //停止信号

    

     t=(((t0< < 8)|t1)/1.2);

     return t;  

}

3.3 ESP8266.c WIFI代码

#include "esp8266.h"

u8 ESP8266_IP_ADDR[16]; //255.255.255.255

u8 ESP8266_MAC_ADDR[18]; //硬件地址

/*

函数功能: ESP8266命令发送函数

函数返回值:0表示成功  1表示失败

*/

u8 ESP8266_SendCmd(char *cmd)

{

    u8 i,j;

    for(i=0;i< 10;i++) //检测的次数--发送指令的次数

    {

        USARTx_StringSend(USART3,cmd);

        for(j=0;j< 100;j++) //等待的时间

        {

            delay_ms(50);

            if(USART3_RX_FLAG)

            {

                USART3_RX_BUFFER[USART3_RX_CNT]='';

                USART3_RX_FLAG=0;

                USART3_RX_CNT=0;

                if(strstr((char*)USART3_RX_BUFFER,"OK"))

                {

                    return 0;

                }

            }

        }

    }

    return 1;

}


/*

函数功能: ESP8266硬件初始化检测函数

函数返回值:0表示成功  1表示失败

*/

u8 ESP8266_Init(void)

{

    //退出透传模式

    USARTx_StringSend(USART3,"+++");

    delay_ms(50);

    return ESP8266_SendCmd("AT ");

}



/*

函数功能: TCP服务器模式下的发送函数

发送指令: 

*/

u8 ESP8266_ServerSendData(u8 id,u8 *data,u16 len)

{

    u8 i,j,n;

    char ESP8266_SendCMD[100]; //组合发送过程中的命令

    for(i=0;i< 10;i++)

    {

        sprintf(ESP8266_SendCMD,"AT+CIPSEND=%d,%d ",id,len);

        USARTx_StringSend(USART3,ESP8266_SendCMD);

        for(j=0;j< 10;j++)

        {

            delay_ms(50);

            if(USART3_RX_FLAG)

            {

                USART3_RX_BUFFER[USART3_RX_CNT]='';

                USART3_RX_FLAG=0;

                USART3_RX_CNT=0;

                if(strstr((char*)USART3_RX_BUFFER," >"))

                {

                    //继续发送数据

                    USARTx_DataSend(USART3,data,len);

                    //等待数据发送成功

                    for(n=0;n< 200;n++)

                    {

                        delay_ms(50);

                        if(USART3_RX_FLAG)

                        {

                            USART3_RX_BUFFER[USART3_RX_CNT]='';

                            USART3_RX_FLAG=0;

                            USART3_RX_CNT=0;

                            if(strstr((char*)USART3_RX_BUFFER,"SEND OK"))

                            {

                                return 0;

                            }

                         }            

                    }   

                }

            }

        }

    }

    return 1;

}


/*

函数功能: 配置WIFI为STA模式+TCP客户端模式

函数参数:

char *ssid  创建的热点名称

char *pass  创建的热点密码 (最少8位)

char *p     将要连接的服务器IP地址

u16 port    将要连接的服务器端口号

u8 flag     1表示开启透传模式 0表示关闭透传模式

函数返回值:0表示成功  其他值表示对应的错误

*/

u8 ESP8266_STA_TCP_Client_Mode(char *ssid,char *pass,char *ip,u16 port,u8 flag)

{

    char ESP8266_SendCMD[100]; //组合发送过程中的命令

    //退出透传模式

    //USARTx_StringSend(USART3,"+++");

    //delay_ms(50);

    /*1. 测试硬件*/

    if(ESP8266_SendCmd("AT "))return 1;

    /*2. 关闭回显*/

    if(ESP8266_SendCmd("ATE0 "))return 2;

    /*3. 设置WIFI模式*/

    if(ESP8266_SendCmd("AT+CWMODE=1 "))return 3;

    /*4. 复位*/

    ESP8266_SendCmd("AT+RST ");

    delay_ms(1000);

    delay_ms(1000);

    delay_ms(1000);

    /*5. 关闭回显*/

    if(ESP8266_SendCmd("ATE0 "))return 5;

    /*6. 配置将要连接的WIFI热点信息*/

文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

相关文章

    户需求转变之下的必然结果。据IDC FutureScape预测,2022年,85%的设备可以接入互联平台,15%的设备搭载物联网操作系统。 松下的模式为国产智能家居提供了可借鉴的发展道路,其智能家居控制系统......
    , AACAT—降压ICx2: 7. 无线模块 RTL8723DS---Realtek瑞昱WiFi、蓝牙4.2二合一芯片: 8. 小爱全家福 9. 优缺点 小爱具有语音交互+百科搜索引擎+内容+智能家居控制......
    如何设计别墅智能家居控制系统;别墅用户迫切的需求就是有一个整体完整的集成系统统一、科学、自动地管理别墅的各子系统。 别墅智能家居控制系统整体解决方案,将家居监控、娱乐影音、家居安防、家居控制、背景音乐控制......
    等移动互联产品进行控制。如图1所示为系统示意图。 1 智能家居控制系统的整体设计 1.1 智能家居控制智能家居控制器是智能家居系统的核心处理模块,是整个智能家居系统的关键。本设计中的智能家居控制......
    基于STM32设计的智能家居控制系统(华为云IOT);1. 功能介绍 随着物联网技术的快速发展,智能家居控制系统成为了人们追求便捷、舒适和安全生活的重要组成部分。为了满足用户对智能家居的需求,设计了一款基于华为云物联网平台的智能家居控制系统......
    性的重要技术,体现在音视频集中分配、背景音乐、家庭影院等方面。 又称智能住宅。通俗地说,它是融合了自动化控制系统、计算机网络系统和网络通讯技术于一体的网络化智能化的家居控制系统智能家居......
    完整的智能家居系统组成部分;  1.控制主机(集中控制器):SmarthomeControlCenter   智能家居控制主机又称为智能家居集中控制器,是指封装好的具有智能家居系统控制功能的控制......
    智能家居系统设计原则;  智能家居又称智能住宅。通俗地说,它是融合了自动化控制系统、计算机网络系统和网络通讯技术于一体的网络化智能化的家居控制系统。衡量一个住宅小区智能化系统的成功与否,并非仅仅取决于智能化系统......
    基于S3C2410的智能家居控制器设计与实现;  如何将家庭里相对独立的设备连接成一个系统,从而方便进行本地和远程控制?本文通过采用ARM构成智能家居控制器来实现这个目标。智能家居控制......
    基于rt-thread+lvgl的智能家居网关设计;1、设计背景以及功能 在这个万物互联的时代,如果没有一个好玩的智能家居控制系统那么生活就显得有点单调。 由于平时上班一整天,家里......

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>