1. 前言
近幾年物聯(lián)網(wǎng)發(fā)展非常迅猛、周邊各種設(shè)備都已經(jīng)接入互聯(lián)網(wǎng),遠(yuǎn)程集成控制。例如: 智慧交通、森林防火、智慧小區(qū)、智慧停車場(chǎng)、智慧牧業(yè)、智慧農(nóng)業(yè)等等。為了降低用戶的成本、門檻,各大廠商平臺(tái)也都開發(fā)了自己的物聯(lián)網(wǎng)IOT云平臺(tái),方便用戶接入快速搭建自己的應(yīng)用場(chǎng)景。
2. 設(shè)備硬件與功能介紹
這篇文章就介紹如何使用華為物聯(lián)網(wǎng)云平臺(tái)實(shí)現(xiàn)智能鎖的應(yīng)用場(chǎng)景構(gòu)建,硬件采用STM32F103ZET6 + ESP8266+步進(jìn)電機(jī)實(shí)現(xiàn)。在華為云IOT物聯(lián)網(wǎng)平臺(tái)構(gòu)建智能鎖項(xiàng)目,配置好云端,設(shè)備端通過ESP8266連接華為物聯(lián)網(wǎng)平臺(tái),實(shí)現(xiàn)數(shù)據(jù)上報(bào),交互,實(shí)現(xiàn)遠(yuǎn)程開鎖、關(guān)鎖、獲取鎖的狀態(tài)等功能,不用擔(dān)心忘記出門關(guān)鎖,也不用擔(dān)心忘記帶鑰匙無法開門的情況。
ESP8266是物聯(lián)網(wǎng)解決方案里比較熱門的WIFI設(shè)備,支持串口+AT指令控制,任意支持串口的單片機(jī)都可以使用ESP8266快速實(shí)現(xiàn)聯(lián)網(wǎng)。

步進(jìn)電機(jī)采用常規(guī)28BYJ-48來模擬當(dāng)做門鎖的電機(jī),驅(qū)動(dòng)板采用ULN2003。

3. 創(chuàng)建云端設(shè)備
登錄官網(wǎng): https://www.huaweicloud.com/
直接搜索物聯(lián)網(wǎng),打開頁面。

選擇設(shè)備接入:

選擇免費(fèi)試用:

在產(chǎn)品頁面,點(diǎn)擊右上角創(chuàng)建產(chǎn)品:

填上產(chǎn)品信息:

得到產(chǎn)品ID,保存好ID,點(diǎn)擊查看詳情:
產(chǎn)品ID為:61b9ba3a2b2aa20288c1e7f1
.

點(diǎn)擊設(shè)備頁面,注冊(cè)設(shè)備:

填充信息進(jìn)行注冊(cè):

保存設(shè)備密匙和設(shè)備ID,點(diǎn)擊保存關(guān)閉會(huì)自動(dòng)下載文件保存,后面生成密碼和登錄賬號(hào)需要使用

關(guān)閉后就看到創(chuàng)建好的設(shè)備了:

點(diǎn)擊產(chǎn)品頁面,選擇剛才創(chuàng)建的產(chǎn)品:

選擇自定義模型---創(chuàng)建數(shù)據(jù)模型服務(wù):


選擇新增屬性,創(chuàng)建設(shè)備的屬性

4. 創(chuàng)建MQTT登錄賬號(hào)和密匙
設(shè)備創(chuàng)建完成接來下生成MQTT登錄賬號(hào)、密匙,方便設(shè)備登錄云端平臺(tái)。
官網(wǎng)工具地址: https://iot-tool.obs-website.cn-north-4.myhuaweicloud.com/

打開剛才創(chuàng)建設(shè)備時(shí),下載的密匙文件,把內(nèi)容復(fù)制出來對(duì)應(yīng)的填進(jìn)去,生成即可。

5. 拼接主題訂閱與發(fā)布的格式
官方文檔介紹: https://support.huaweicloud.com/devg-iothub/iot_01_2127.html

在產(chǎn)品頁面可以,看到主題的全部格式:

總結(jié)的格式如下:
格式: $oc/devices/{device_id}/sys/messages/down
//訂閱主題: 平臺(tái)下發(fā)消息給設(shè)備
$oc/devices/61b9ba3a2b2aa20288c1e7f1_QQ1126626497_0_0_2021121510/sys/messages/down
格式: $oc/devices/{device_id}/sys/properties/report
//設(shè)備上報(bào)數(shù)據(jù)
$oc/devices/61b9ba3a2b2aa20288c1e7f1_QQ1126626497_0_0_2021121510/sys/properties/report
上屬性的數(shù)據(jù)格式:
//上報(bào)的屬性消息 (一次可以上報(bào)多個(gè)屬性,在json里增加就行了)
{"services": [{"service_id": "lock","properties":{"門鎖":1}}]}
上屬性的數(shù)據(jù)格式:
上面屬性里的服務(wù)ID和屬性里的名稱,在設(shè)備頁面,影子設(shè)備頁面查看。

6. MQTT客戶端模擬設(shè)備登錄云端
下面使用MQTT客戶端模擬設(shè)備登錄服務(wù)器測(cè)試,看設(shè)備創(chuàng)建的是否OK。
服務(wù)器的IP地址是: 121.36.42.100
端口號(hào)是: 1883
打開MQTT客戶端軟件,按照提示,輸入相關(guān)參數(shù)后,點(diǎn)擊連接,然后再點(diǎn)擊訂閱主題,發(fā)布主題即可:

查看云端服務(wù)器的情況: 可以看到設(shè)備已經(jīng)在線了,并且收到上傳的數(shù)據(jù)。

修改一下鎖的狀態(tài),上報(bào)屬性再查看:

發(fā)現(xiàn)云端的狀態(tài)也已經(jīng)改變,現(xiàn)在設(shè)備上報(bào)已經(jīng)OK。

接下來測(cè)試命令下發(fā),實(shí)現(xiàn)遠(yuǎn)程開鎖關(guān)鎖的功能:
打開產(chǎn)品頁面,新增加命令:



命令添加成功:

在設(shè)備頁面,選擇同步命令下發(fā):


點(diǎn)擊確定后,查看MQTT客戶端,發(fā)現(xiàn)已經(jīng)收到數(shù)據(jù)了:

設(shè)備端解析收到的數(shù)據(jù),就可以完成多步進(jìn)電機(jī)的控制,完成開鎖關(guān)鎖。
7. STM32+ESP8266連接云端


工程是keil5工程,代碼非常多,完整工程可以直接點(diǎn)擊下載鏈接下載
main函數(shù)代碼如下:
#include "stm32f10x.h"
#include "led.h"
#include "delay.h"
#include "key.h"
#include "usart.h"
#include
#include "timer.h"
#include "bluetooth.h"
#include "esp8266.h"
#include "mqtt.h"
//華為物聯(lián)網(wǎng)服務(wù)器的設(shè)備信息
#define MQTT_ClientID "61b9ba3a2b2aa20288c1e7f1_QQ1126626497_0_0_2021121510"
#define MQTT_UserName "61b9ba3a2b2aa20288c1e7f1_QQ1126626497"
#define MQTT_PassWord "385ce91dfe7da5b7431868d5d87e7998163c493344040935d5a00024d6324242"
//訂閱與發(fā)布的主題
#define SET_TOPIC "$oc/devices/61b9ba3a2b2aa20288c1e7f1_QQ1126626497_0_0_2021121510/sys/messages/down" //訂閱
#define POST_TOPIC "$oc/devices/61b9ba3a2b2aa20288c1e7f1_QQ1126626497_0_0_2021121510/sys/properties/report" //發(fā)布
char mqtt_message[200];//上報(bào)數(shù)據(jù)緩存區(qū)
int main()
{
u32 time_cnt=0;
u32 i;
u8 key;
LED_Init();
BEEP_Init();
KEY_Init();
USART1_Init(115200);
TIMER1_Init(72,20000); //超時(shí)時(shí)間20ms
USART2_Init(9600);//串口-藍(lán)牙
TIMER2_Init(72,20000); //超時(shí)時(shí)間20ms
USART3_Init(115200);//串口-WIFI
TIMER3_Init(72,20000); //超時(shí)時(shí)間20ms
USART1_Printf("正在初始化WIFI請(qǐng)稍等.\n");
if(ESP8266_Init())
{
USART1_Printf("ESP8266硬件檢測(cè)錯(cuò)誤.\n");
}
else
{
//非加密端口
USART1_Printf("WIFI:%d\n",ESP8266_STA_TCP_Client_Mode("CMCC-Cqvn","99pu58cb","121.36.42.100",1883,1));
}
//2. MQTT協(xié)議初始化
MQTT_Init();
//3. 連接華為服務(wù)器
while(MQTT_Connect(MQTT_ClientID,MQTT_UserName,MQTT_PassWord))
{
USART1_Printf("服務(wù)器連接失敗,正在重試...\n");
delay_ms(500);
}
USART1_Printf("服務(wù)器連接成功.\n");
//3. 訂閱主題
if(MQTT_SubscribeTopic(SET_TOPIC,0,1))
{
USART1_Printf("主題訂閱失敗.\n");
}
else
{
USART1_Printf("主題訂閱成功.\n");
}
while(1)
{
key=KEY_Scan(0);
if(key==2)
{
time_cnt=0;
sprintf(mqtt_message,"{"services": [{"service_id": "lock","properties":{"門鎖":1}}]}");
MQTT_PublishData(POST_TOPIC,mqtt_message,0);
USART1_Printf("發(fā)送狀態(tài)1\r\n");
}
else if(key==3)
{
time_cnt=0;
sprintf(mqtt_message,"{"services": [{"service_id": "lock","properties":{"門鎖":0}}]}");
MQTT_PublishData(POST_TOPIC,mqtt_message,0);
USART1_Printf("發(fā)送狀態(tài)0\r\n");
}
if(USART3_RX_FLAG)
{
USART3_RX_BUFFER[USART3_RX_CNT]='\0';
for(i=0;i;i++)>
審核編輯:湯梓紅
-
STM32
+關(guān)注
關(guān)注
2272文章
10923瀏覽量
357553 -
ESP8266
+關(guān)注
關(guān)注
50文章
962瀏覽量
45328 -
智能門鎖
+關(guān)注
關(guān)注
17文章
1858瀏覽量
43420 -
華為云
+關(guān)注
關(guān)注
3文章
2682瀏覽量
17586
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
基于STM32+ESP8266+華為云IoT設(shè)計(jì)的健康管理系統(tǒng)并完成應(yīng)用側(cè)開發(fā)

基于STM32設(shè)計(jì)的智能門鎖(華為云IOT)

基于STM32設(shè)計(jì)的智能家居控制系統(tǒng)(華為云IOT)

STM32+ESP8266+小程序的智能家居學(xué)習(xí)
怎樣去設(shè)計(jì)一種基于STM32+ESP8266+機(jī)智云的物聯(lián)網(wǎng)demo
ESP8266_SDK_User_Manual_Version 1.4
使用esp8266實(shí)現(xiàn)STM32聯(lián)網(wǎng)(最簡(jiǎn)單USART方法)
Esp8266(NodeMCU)連接阿里云服務(wù)器

STM32 ES8266上阿里云IOT MQTT實(shí)踐【第七章】:ESP8266+MQTT上阿里云物聯(lián)網(wǎng)平臺(tái)實(shí)踐

STM32+ESP8266+小程序的智能家居(項(xiàng)目簡(jiǎn)介)

基于ESp8266的智能插座

基于STM32單片機(jī)ESP8266物聯(lián)網(wǎng)阿里云的遠(yuǎn)程控制LED系統(tǒng)

stm32和esp8266上的簡(jiǎn)單時(shí)鐘

評(píng)論