1. 前言
近幾年物聯網發展非常迅猛、周邊各種設備都已經接入互聯網,遠程集成控制。例如: 智慧交通、森林防火、智慧小區、智慧停車場、智慧牧業、智慧農業等等。為了降低用戶的成本、門檻,各大廠商平臺也都開發了自己的物聯網IOT云平臺,方便用戶接入快速搭建自己的應用場景。
2. 設備硬件與功能介紹
這篇文章就介紹如何使用華為物聯網云平臺實現智能鎖的應用場景構建,硬件采用STM32F103ZET6 + ESP8266+步進電機實現。在華為云IOT物聯網平臺構建智能鎖項目,配置好云端,設備端通過ESP8266連接華為物聯網平臺,實現數據上報,交互,實現遠程開鎖、關鎖、獲取鎖的狀態等功能,不用擔心忘記出門關鎖,也不用擔心忘記帶鑰匙無法開門的情況。
ESP8266是物聯網解決方案里比較熱門的WIFI設備,支持串口+AT指令控制,任意支持串口的單片機都可以使用ESP8266快速實現聯網。
![image-20211215173859997](https://file.elecfans.com//web2/M00/46/0C/poYBAGKQPKCAdd3KAAHkQaZL_iw785.png)
步進電機采用常規28BYJ-48來模擬當做門鎖的電機,驅動板采用ULN2003。
![image-20211215173730289](https://file.elecfans.com//web2/M00/46/0C/pYYBAGKQPKGAZJmYAAKdZOikjJk282.png)
3. 創建云端設備
登錄官網: https://www.huaweicloud.com/
直接搜索物聯網,打開頁面。
![image-20211215174453102](https://file.elecfans.com//web2/M00/46/0C/poYBAGKQPKKAPr2SAAoCqcJ0_3I618.png)
選擇設備接入:
![image-20211215174521654](https://file.elecfans.com//web2/M00/46/0C/poYBAGKQPKOANkdIAAdMywDJzfI176.png)
選擇免費試用:
![image-20211215174550243](https://file.elecfans.com//web2/M00/46/0C/pYYBAGKQPKSAfqILAAscNvFFeo0387.png)
在產品頁面,點擊右上角創建產品:
![image-20211215174642960](https://file.elecfans.com//web2/M00/46/0C/poYBAGKQPKSASKieAAMiU5F-KUA357.png)
填上產品信息:
![image-20211215174937965](https://file.elecfans.com//web2/M00/46/0C/pYYBAGKQPKWAKjNJAAJWt0cDYNU261.png)
得到產品ID,保存好ID,點擊查看詳情:
產品ID為:61b9ba3a2b2aa20288c1e7f1
.
![image-20211215175007908](https://file.elecfans.com//web2/M00/46/0C/poYBAGKQPKWAAAHFAAKqPnPRFzc575.png)
點擊設備頁面,注冊設備:
![image-20211215175814693](https://file.elecfans.com//web2/M00/46/0C/pYYBAGKQPKaAW7iHAAGYfO1vFzA312.png)
填充信息進行注冊:
![image-20211215180006268](https://file.elecfans.com//web2/M00/46/0C/poYBAGKQPKaAalMTAAIJTGnjVXk050.png)
保存設備密匙和設備ID,點擊保存關閉會自動下載文件保存,后面生成密碼和登錄賬號需要使用
![image-20211215180041077](https://file.elecfans.com//web2/M00/46/0C/pYYBAGKQPKeAa5zCAAISMz4Vjiw337.png)
關閉后就看到創建好的設備了:
![image-20211215180732602](https://file.elecfans.com//web2/M00/46/0C/poYBAGKQPKeAGknAAAGt2vlEuBw544.png)
點擊產品頁面,選擇剛才創建的產品:
![image-20211215180939201](https://file.elecfans.com//web2/M00/46/0C/pYYBAGKQPKiAfl2QAAMwNnFExtM377.png)
選擇自定義模型---創建數據模型服務:
![image-20211215181036122](https://file.elecfans.com//web2/M00/46/0C/pYYBAGKQPKiADESuAAIPKBHEs-Q027.png)
![image-20211215181144359](https://file.elecfans.com//web2/M00/46/0C/poYBAGKQPKmAIs3fAAG_SXgVe5s932.png)
選擇新增屬性,創建設備的屬性
![image-20211215181424235](https://file.elecfans.com//web2/M00/46/0C/pYYBAGKQPKmAFw-jAAGkEiRC3aM916.png)
4. 創建MQTT登錄賬號和密匙
設備創建完成接來下生成MQTT登錄賬號、密匙,方便設備登錄云端平臺。
官網工具地址: https://iot-tool.obs-website.cn-north-4.myhuaweicloud.com/
![image-20211215181625067](https://file.elecfans.com//web2/M00/46/0C/poYBAGKQPKqAfMWYAAEPWr3YC5k311.png)
打開剛才創建設備時,下載的密匙文件,把內容復制出來對應的填進去,生成即可。
![image-20211215181747129](https://file.elecfans.com//web2/M00/46/0C/pYYBAGKQPKuAXwvvAAG-NoKe09w348.png)
5. 拼接主題訂閱與發布的格式
官方文檔介紹: https://support.huaweicloud.com/devg-iothub/iot_01_2127.html
![image-20211215182442581](https://file.elecfans.com//web2/M00/46/0C/poYBAGKQPKuAIPPZAAPycUghp2o825.png)
在產品頁面可以,看到主題的全部格式:
![image-20211215183137006](https://file.elecfans.com//web2/M00/46/0C/pYYBAGKQPKuAClfIAAK_-clhll8583.png)
總結的格式如下:
格式: $oc/devices/{device_id}/sys/messages/down
//訂閱主題: 平臺下發消息給設備
$oc/devices/61b9ba3a2b2aa20288c1e7f1_QQ1126626497_0_0_2021121510/sys/messages/down
格式: $oc/devices/{device_id}/sys/properties/report
//設備上報數據
$oc/devices/61b9ba3a2b2aa20288c1e7f1_QQ1126626497_0_0_2021121510/sys/properties/report
上屬性的數據格式:
//上報的屬性消息 (一次可以上報多個屬性,在json里增加就行了)
{"services": [{"service_id": "lock","properties":{"門鎖":1}}]}
上屬性的數據格式:
上面屬性里的服務ID和屬性里的名稱,在設備頁面,影子設備頁面查看。
![image-20211215184220051](https://file.elecfans.com//web2/M00/46/0C/poYBAGKQPKyAOkKdAAF48FzYFxo752.png)
6. MQTT客戶端模擬設備登錄云端
下面使用MQTT客戶端模擬設備登錄服務器測試,看設備創建的是否OK。
服務器的IP地址是: 121.36.42.100
端口號是: 1883
打開MQTT客戶端軟件,按照提示,輸入相關參數后,點擊連接,然后再點擊訂閱主題,發布主題即可:
![image-20211215184435114](https://file.elecfans.com//web2/M00/46/0C/pYYBAGKQPKyAf8yeAAFNTI64Zyg184.png)
查看云端服務器的情況: 可以看到設備已經在線了,并且收到上傳的數據。
![image-20211215184612394](https://file.elecfans.com//web2/M00/46/0C/poYBAGKQPK2AUk9kAAHR0M6ldUo523.png)
修改一下鎖的狀態,上報屬性再查看:
![image-20211215184712687](https://file.elecfans.com//web2/M00/46/0C/poYBAGKQPK2AEb6HAAGair1OK58054.png)
發現云端的狀態也已經改變,現在設備上報已經OK。
![image-20211215184735239](https://file.elecfans.com//web2/M00/46/0C/pYYBAGKQPK2AP-tJAAGXc20ZA2g070.png)
接下來測試命令下發,實現遠程開鎖關鎖的功能:
打開產品頁面,新增加命令:
![image-20211215185156127](https://file.elecfans.com//web2/M00/46/0C/poYBAGKQPK6ADRusAAFVz97mll4138.png)
![image-20211215185232075](https://file.elecfans.com//web2/M00/46/0C/pYYBAGKQPK6ADgI4AAGfmJo6H9c984.png)
![image-20211215185302157](https://file.elecfans.com//web2/M00/46/0C/poYBAGKQPK-AMKyRAAGOxM4FAos614.png)
命令添加成功:
![image-20211215185325872](https://file.elecfans.com//web2/M00/46/0C/pYYBAGKQPK-AAhm0AAGyufCmixc936.png)
在設備頁面,選擇同步命令下發:
![image-20211215185445720](https://file.elecfans.com//web2/M00/46/0C/poYBAGKQPLCARehVAAHkE-itGEo083.png)
![image-20211215185523035](https://file.elecfans.com//web2/M00/46/0C/pYYBAGKQPLCAbfDVAAG2Jzviel8717.png)
點擊確定后,查看MQTT客戶端,發現已經收到數據了:
![image-20211215185612755](https://file.elecfans.com//web2/M00/46/0C/poYBAGKQPLGAaptrAAGTJlLMy2M794.png)
設備端解析收到的數據,就可以完成多步進電機的控制,完成開鎖關鎖。
7. STM32+ESP8266連接云端
![2021-12-16_095526](https://file.elecfans.com//web2/M00/46/0C/pYYBAGKQPLGATgOfAAJBFVTOK48743.png)
![image-20211215190612026](https://file.elecfans.com//web2/M00/46/0C/pYYBAGKQPLKABlJFAAYA4Fn6x6I885.png)
工程是keil5工程,代碼非常多,完整工程可以直接點擊下載鏈接下載
main函數代碼如下:
#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"
//華為物聯網服務器的設備信息
#define MQTT_ClientID "61b9ba3a2b2aa20288c1e7f1_QQ1126626497_0_0_2021121510"
#define MQTT_UserName "61b9ba3a2b2aa20288c1e7f1_QQ1126626497"
#define MQTT_PassWord "385ce91dfe7da5b7431868d5d87e7998163c493344040935d5a00024d6324242"
//訂閱與發布的主題
#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" //發布
char mqtt_message[200];//上報數據緩存區
int main()
{
u32 time_cnt=0;
u32 i;
u8 key;
LED_Init();
BEEP_Init();
KEY_Init();
USART1_Init(115200);
TIMER1_Init(72,20000); //超時時間20ms
USART2_Init(9600);//串口-藍牙
TIMER2_Init(72,20000); //超時時間20ms
USART3_Init(115200);//串口-WIFI
TIMER3_Init(72,20000); //超時時間20ms
USART1_Printf("正在初始化WIFI請稍等.\n");
if(ESP8266_Init())
{
USART1_Printf("ESP8266硬件檢測錯誤.\n");
}
else
{
//非加密端口
USART1_Printf("WIFI:%d\n",ESP8266_STA_TCP_Client_Mode("CMCC-Cqvn","99pu58cb","121.36.42.100",1883,1));
}
//2. MQTT協議初始化
MQTT_Init();
//3. 連接華為服務器
while(MQTT_Connect(MQTT_ClientID,MQTT_UserName,MQTT_PassWord))
{
USART1_Printf("服務器連接失敗,正在重試...\n");
delay_ms(500);
}
USART1_Printf("服務器連接成功.\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("發送狀態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("發送狀態0\r\n");
}
if(USART3_RX_FLAG)
{
USART3_RX_BUFFER[USART3_RX_CNT]='\0';
for(i=0;i;i++)>
審核編輯:湯梓紅
-
STM32
+關注
關注
2273文章
10926瀏覽量
357778 -
ESP8266
+關注
關注
50文章
962瀏覽量
45372 -
智能門鎖
+關注
關注
17文章
1858瀏覽量
43446 -
華為云
+關注
關注
3文章
2698瀏覽量
17609
發布評論請先 登錄
相關推薦
基于STM32+ESP8266+華為云IoT設計的健康管理系統并完成應用側開發
![基于<b class='flag-5'>STM32+ESP8266+</b><b class='flag-5'>華為</b><b class='flag-5'>云</b><b class='flag-5'>IoT</b>設計的健康管理系統并完成應用側開發](https://file1.elecfans.com/web2/M00/8C/6D/wKgaomSsDyiAAmqPAAV3qqBNggo530.jpg)
STM32+ESP8266+小程序的智能家居學習
ESP8266_SDK_User_Manual_Version 1.4
使用esp8266實現STM32聯網(最簡單USART方法)
Esp8266(NodeMCU)連接阿里云服務器
![<b class='flag-5'>Esp8266</b>(NodeMCU)連接阿里<b class='flag-5'>云</b>服務器](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
STM32 ES8266上阿里云IOT MQTT實踐【第七章】:ESP8266+MQTT上阿里云物聯網平臺實踐
![<b class='flag-5'>STM32</b> ES<b class='flag-5'>8266</b>上阿里<b class='flag-5'>云</b><b class='flag-5'>IOT</b> MQTT實踐【第七章】:<b class='flag-5'>ESP8266</b>+MQTT上阿里<b class='flag-5'>云</b>物聯網平臺實踐](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
STM32+ESP8266+小程序的智能家居(項目簡介)
![<b class='flag-5'>STM32+ESP8266+</b>小程序的<b class='flag-5'>智能</b>家居(項目簡介)](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
基于ESp8266的智能插座
![基于<b class='flag-5'>ESp8266</b>的<b class='flag-5'>智能</b>插座](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
基于STM32單片機ESP8266物聯網阿里云的遠程控制LED系統
![基于<b class='flag-5'>STM32</b>單片機<b class='flag-5'>ESP8266</b>物聯網阿里<b class='flag-5'>云</b>的遠程控制LED系統](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
評論