1. 前言
近幾年物聯(lián)網(wǎng)發(fā)展非常迅猛、周邊各種設備都已經(jīng)接入互聯(lián)網(wǎng),遠程集成控制。例如: 智慧交通、森林防火、智慧小區(qū)、智慧停車場、智慧牧業(yè)、智慧農(nóng)業(yè)等等。為了降低用戶的成本、門檻,各大廠商平臺也都開發(fā)了自己的物聯(lián)網(wǎng)IOT云平臺,方便用戶接入快速搭建自己的應用場景。
2. 設備硬件與功能介紹
這篇文章就介紹如何使用華為物聯(lián)網(wǎng)云平臺實現(xiàn)智能鎖的應用場景構(gòu)建,硬件采用STM32F103ZET6 + ESP8266+步進電機實現(xiàn)。在華為云IOT物聯(lián)網(wǎng)平臺構(gòu)建智能鎖項目,配置好云端,設備端通過ESP8266連接華為物聯(lián)網(wǎng)平臺,實現(xiàn)數(shù)據(jù)上報,交互,實現(xiàn)遠程開鎖、關(guān)鎖、獲取鎖的狀態(tài)等功能,不用擔心忘記出門關(guān)鎖,也不用擔心忘記帶鑰匙無法開門的情況。
ESP8266是物聯(lián)網(wǎng)解決方案里比較熱門的WIFI設備,支持串口+AT指令控制,任意支持串口的單片機都可以使用ESP8266快速實現(xiàn)聯(lián)網(wǎng)。
步進電機采用常規(guī)28BYJ-48來模擬當做門鎖的電機,驅(qū)動板采用ULN2003。
3. 創(chuàng)建云端設備
登錄官網(wǎng): https://www.huaweicloud.com/
直接搜索物聯(lián)網(wǎng),打開頁面。
選擇設備接入:
選擇免費試用:
在產(chǎn)品頁面,點擊右上角創(chuàng)建產(chǎn)品:
填上產(chǎn)品信息:
得到產(chǎn)品ID,保存好ID,點擊查看詳情:
產(chǎn)品ID為:61b9ba3a2b2aa20288c1e7f1
.
點擊設備頁面,注冊設備:
填充信息進行注冊:
保存設備密匙和設備ID,點擊保存關(guān)閉會自動下載文件保存,后面生成密碼和登錄賬號需要使用
關(guān)閉后就看到創(chuàng)建好的設備了:
點擊產(chǎn)品頁面,選擇剛才創(chuàng)建的產(chǎn)品:
選擇自定義模型---創(chuàng)建數(shù)據(jù)模型服務:
選擇新增屬性,創(chuàng)建設備的屬性
4. 創(chuàng)建MQTT登錄賬號和密匙
設備創(chuàng)建完成接來下生成MQTT登錄賬號、密匙,方便設備登錄云端平臺。
官網(wǎng)工具地址: https://iot-tool.obs-website.cn-north-4.myhuaweicloud.com/
打開剛才創(chuàng)建設備時,下載的密匙文件,把內(nèi)容復制出來對應的填進去,生成即可。
5. 拼接主題訂閱與發(fā)布的格式
官方文檔介紹: https://support.huaweicloud.com/devg-iothub/iot_01_2127.html
在產(chǎn)品頁面可以,看到主題的全部格式:
總結(jié)的格式如下:
格式: $oc/devices/{device_id}/sys/messages/down
//訂閱主題: 平臺下發(fā)消息給設備
$oc/devices/61b9ba3a2b2aa20288c1e7f1_QQ1126626497_0_0_2021121510/sys/messages/down
格式: $oc/devices/{device_id}/sys/properties/report
//設備上報數(shù)據(jù)
$oc/devices/61b9ba3a2b2aa20288c1e7f1_QQ1126626497_0_0_2021121510/sys/properties/report
上屬性的數(shù)據(jù)格式:
//上報的屬性消息 (一次可以上報多個屬性,在json里增加就行了)
{"services": [{"service_id": "lock","properties":{"門鎖":1}}]}
上屬性的數(shù)據(jù)格式:
上面屬性里的服務ID和屬性里的名稱,在設備頁面,影子設備頁面查看。
6. MQTT客戶端模擬設備登錄云端
下面使用MQTT客戶端模擬設備登錄服務器測試,看設備創(chuàng)建的是否OK。
服務器的IP地址是: 121.36.42.100
端口號是: 1883
打開MQTT客戶端軟件,按照提示,輸入相關(guān)參數(shù)后,點擊連接,然后再點擊訂閱主題,發(fā)布主題即可:
查看云端服務器的情況: 可以看到設備已經(jīng)在線了,并且收到上傳的數(shù)據(jù)。
修改一下鎖的狀態(tài),上報屬性再查看:
發(fā)現(xiàn)云端的狀態(tài)也已經(jīng)改變,現(xiàn)在設備上報已經(jīng)OK。
接下來測試命令下發(fā),實現(xiàn)遠程開鎖關(guān)鎖的功能:
打開產(chǎn)品頁面,新增加命令:
命令添加成功:
在設備頁面,選擇同步命令下發(fā):
點擊確定后,查看MQTT客戶端,發(fā)現(xiàn)已經(jīng)收到數(shù)據(jù)了:
設備端解析收到的數(shù)據(jù),就可以完成多步進電機的控制,完成開鎖關(guān)鎖。
7. STM32+ESP8266連接云端
工程是keil5工程,代碼非常多,完整工程可以直接點擊下載鏈接下載
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)服務器的設備信息
#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];//上報數(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); //超時時間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協(xié)議初始化
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("發(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)注
2270文章
10895瀏覽量
355743 -
ESP8266
+關(guān)注
關(guān)注
50文章
962瀏覽量
44964 -
智能門鎖
+關(guān)注
關(guān)注
17文章
1856瀏覽量
43136 -
華為云
+關(guān)注
關(guān)注
3文章
2445瀏覽量
17409
發(fā)布評論請先 登錄
相關(guān)推薦
評論