一、項目介紹
隨著城市化進程和汽車擁有率的不斷提高,停車難的問題也日益凸顯。在城市中,停車場是一個非常重要的基礎設施,但是傳統(tǒng)的停車場管理方式存在很多問題,比如車位難以管理、停車費用不透明等。為了解決這些問題,智能車庫管理系統(tǒng)應運而生。
本項目基于STM32+華為云IOT設計的智能車庫管理系統(tǒng),通過紅外感應傳感器檢測停車位的占用情況,將數(shù)據(jù)上傳到華為云物聯(lián)網(wǎng)平臺,并通過微信小程序展示車庫的實時停車位情況,包括總停車數(shù)量、當前剩余空位數(shù)量和車位的編號,并在二維立體圖中標注出空閑停車位,方便用戶快速找到空閑停車位進行停車。
本系統(tǒng)還包括車牌識別自動計費部分,通過車牌識別技術識別車輛進出停車場的時間,并自動計算停車費用,提高了停車場的管理效率和用戶體驗。
本項目的實現(xiàn)將大大提高停車場的管理效率和客戶體驗,為城市交通管理和用戶出行提供了更加便捷和高效的解決方案。
二、硬件選型
在本項目中,需要選擇合適的硬件來實現(xiàn)智能車庫管理系統(tǒng)。根據(jù)項目需求,需要選取能夠完成以下功能的硬件:
【1】檢測停車位是否有車輛存在的傳感器模塊
【2】能夠?qū)鞲衅鲾?shù)據(jù)上傳到云平臺的通信模塊
【3】控制整個系統(tǒng)運行的主控芯片
基于以上需求,最終采用以下硬件:
【1】傳感器模塊:紅外傳感器模塊,例如紅外障礙傳感器模塊,能夠檢測車輛是否在停車位上。
【2】通信模塊:EC20-4G模塊,支持 4G LTE 網(wǎng)絡,能夠?qū)鞲衅鲾?shù)據(jù)上傳到華為云物聯(lián)網(wǎng)平臺。
【3】主控芯片:STM32F103ZET6,具有較高的性能和穩(wěn)定性,能夠滿足系統(tǒng)的實時性需求。
【4】電源模塊:直流穩(wěn)壓電源模塊,能夠提供穩(wěn)定的電源支持,保證系統(tǒng)的正常運行。
三、系統(tǒng)設計思路
【1】硬件設計:
- 使用STM32F103ZET6作為主控芯片,連接紅外感應傳感器進行車輛檢測。
- 配置EC20-4G模塊與STM32進行通信,通過AT指令或相關協(xié)議將檢測到的數(shù)據(jù)上傳到華為云物聯(lián)網(wǎng)平臺。
【2】云平臺配置:
- 在華為云物聯(lián)網(wǎng)平臺創(chuàng)建設備實例,將EC20-4G模塊作為設備接入。
- 配置數(shù)據(jù)流轉規(guī)則,使得上傳的數(shù)據(jù)能夠正確地傳輸?shù)皆破脚_并且存儲。
【3】微信小程序開發(fā):
- 使用微信小程序開發(fā)框架,通過調(diào)用華為云物聯(lián)網(wǎng)平臺提供的API接口,獲取上傳的數(shù)據(jù)。
- 對返回的數(shù)據(jù)進行解析和處理,計算當前車庫總停車數(shù)量和剩余空位數(shù)量。
- 根據(jù)數(shù)據(jù)繪制二維立體圖,并標注出空閑停車位的位置和編號。
- 實現(xiàn)用戶界面顯示,展示當前車庫狀態(tài)和方便用戶找到空閑停車位。
整體流程如下: 紅外感應傳感器通過STM32進行車輛檢測,檢測結果實時上傳到華為云物聯(lián)網(wǎng)平臺。微信小程序通過API接口獲取上傳的數(shù)據(jù),并進行分析和處理,計算出車庫總停車數(shù)量和剩余空位數(shù)量。 然后,在界面上繪制二維立體圖并標注空閑停車位。用戶可以通過微信小程序查看當前車庫的狀態(tài),從而快速找到空閑停車位進行停車操作。
四、華為云物聯(lián)網(wǎng)平臺部署
華為云官網(wǎng): https://www.huaweicloud.com/
打開官網(wǎng),搜索物聯(lián)網(wǎng),就能快速找到 設備接入IoTDA
。
4.1 物聯(lián)網(wǎng)平臺介紹
華為云物聯(lián)網(wǎng)平臺(IoT 設備接入云服務)提供海量設備的接入和管理能力,將物理設備聯(lián)接到云,支撐設備數(shù)據(jù)采集上云和云端下發(fā)命令給設備進行遠程控制,配合華為云其他產(chǎn)品,幫助我們快速構筑物聯(lián)網(wǎng)解決方案。
使用物聯(lián)網(wǎng)平臺構建一個完整的物聯(lián)網(wǎng)解決方案主要包括3部分:物聯(lián)網(wǎng)平臺、業(yè)務應用和設備。
物聯(lián)網(wǎng)平臺作為連接業(yè)務應用和設備的中間層,屏蔽了各種復雜的設備接口,實現(xiàn)設備的快速接入;同時提供強大的開放能力,支撐行業(yè)用戶構建各種物聯(lián)網(wǎng)解決方案。
設備可以通過固網(wǎng)、2G/3G/4G/5G、NB-IoT、Wifi等多種網(wǎng)絡接入物聯(lián)網(wǎng)平臺,并使用LWM2M/CoAP、MQTT、HTTPS協(xié)議將業(yè)務數(shù)據(jù)上報到平臺,平臺也可以將控制命令下發(fā)給設備。
業(yè)務應用通過調(diào)用物聯(lián)網(wǎng)平臺提供的API,實現(xiàn)設備數(shù)據(jù)采集、命令下發(fā)、設備管理等業(yè)務場景。
4.2 開通物聯(lián)網(wǎng)服務
地址: https://www.huaweicloud.com/product/iothub.html
點擊總覽
,查看接入信息。 我們當前設備準備采用MQTT協(xié)議接入華為云平臺,這里可以看到MQTT協(xié)議的地址和端口號等信息。
總結:
端口號: MQTT (1883)| MQTTS (8883)
接入地址: a161a58a78.iot-mqtts.cn-north-4.myhuaweicloud.com
根據(jù)域名地址得到IP地址信息:
Microsoft Windows [版本 10.0.19045.2965]
(c) Microsoft Corporation。保留所有權利。
C:Users11266>ping a161a58a78.iot-mqtts.cn-north-4.myhuaweicloud.com
正在 Ping a161a58a78.iot-mqtts.cn-north-4.myhuaweicloud.com [121.36.42.100] 具有 32 字節(jié)的數(shù)據(jù):
來自 121.36.42.100 的回復: 字節(jié)=32 時間=38ms TTL=94
來自 121.36.42.100 的回復: 字節(jié)=32 時間=37ms TTL=94
來自 121.36.42.100 的回復: 字節(jié)=32 時間=38ms TTL=94
來自 121.36.42.100 的回復: 字節(jié)=32 時間=36ms TTL=94
121.36.42.100 的 Ping 統(tǒng)計信息:
數(shù)據(jù)包: 已發(fā)送 = 4,已接收 = 4,丟失 = 0 (0% 丟失),
往返行程的估計時間(以毫秒為單位):
最短 = 36ms,最長 = 38ms,平均 = 37ms
C:Users11266>
MQTT協(xié)議接入端口號有兩個,1883是非加密端口,8883是證書加密端口,單片機無法加載證書,所以使用1883端口比較合適。 接下來的ESP8266就采用1883端口連接華為云物聯(lián)網(wǎng)平臺。
4.3 創(chuàng)建產(chǎn)品
(1)創(chuàng)建產(chǎn)品
點擊產(chǎn)品頁,再點擊左上角創(chuàng)建產(chǎn)品。
(2)填寫產(chǎn)品信息
根據(jù)自己產(chǎn)品名字填寫。
(3)產(chǎn)品創(chuàng)建成功
(4)添加自定義模型
產(chǎn)品創(chuàng)建完成之后,點擊進入產(chǎn)品詳情頁面,翻到最下面可以看到模型定義。
這個模型就是定義自己設備接下來需要向服務器上傳那些數(shù)據(jù)類型。根據(jù)自己的數(shù)據(jù)類型進行編寫。
先點擊自定義模型。
再創(chuàng)建一個服務ID。
接著點擊新增屬性。
4.4 添加設備
產(chǎn)品是屬于上層的抽象模型,接下來在產(chǎn)品模型下添加實際的設備。添加的設備最終需要與真實的設備關聯(lián)在一起,完成數(shù)據(jù)交互。
(1)注冊設備
(2)根據(jù)自己的設備填寫
(3)保存設備信息
創(chuàng)建完畢之后,點擊保存并關閉,得到創(chuàng)建的設備密匙信息。該信息在后續(xù)生成MQTT三元組的時候需要使用。
(4)設備創(chuàng)建完成
可以點擊設備進入到設備詳情頁面。
4.5 MQTT協(xié)議主題訂閱與發(fā)布
(1)MQTT協(xié)議介紹
當前的設備是采用MQTT協(xié)議與華為云平臺進行通信。
MQTT是一個物聯(lián)網(wǎng)傳輸協(xié)議,它被設計用于輕量級的發(fā)布/訂閱式消息傳輸,旨在為低帶寬和不穩(wěn)定的網(wǎng)絡環(huán)境中的物聯(lián)網(wǎng)設備提供可靠的網(wǎng)絡服務。MQTT是專門針對物聯(lián)網(wǎng)開發(fā)的輕量級傳輸協(xié)議。MQTT協(xié)議針對低帶寬網(wǎng)絡,低計算能力的設備,做了特殊的優(yōu)化,使得其能適應各種物聯(lián)網(wǎng)應用場景。目前MQTT擁有各種平臺和設備上的客戶端,已經(jīng)形成了初步的生態(tài)系統(tǒng)。
MQTT是一種消息隊列協(xié)議,使用發(fā)布/訂閱消息模式,提供一對多的消息發(fā)布,解除應用程序耦合,相對于其他協(xié)議,開發(fā)更簡單;MQTT協(xié)議是工作在TCP/IP協(xié)議上;由TCP/IP協(xié)議提供穩(wěn)定的網(wǎng)絡連接;所以,只要具備TCP協(xié)議棧的網(wǎng)絡設備都可以使用MQTT協(xié)議。 本次設備采用的ESP8266就具備TCP協(xié)議棧,能夠建立TCP連接,所以,配合STM32代碼里封裝的MQTT協(xié)議,就可以與華為云平臺完成通信。
華為云的MQTT協(xié)議接入幫助文檔在這里: https://support.huaweicloud.com/devg-iothub/iot_02_2200.html
業(yè)務流程:
(2)華為云平臺MQTT協(xié)議使用限制
描述 | 限制 |
---|---|
支持的MQTT協(xié)議版本 | 3.1.1 |
與標準MQTT協(xié)議的區(qū)別 | 支持Qos 0和Qos 1支持Topic自定義不支持QoS2不支持will、retain msg |
MQTTS支持的安全等級 | 采用TCP通道基礎 + TLS協(xié)議(最高TLSv1.3版本) |
單帳號每秒最大MQTT連接請求數(shù) | 無限制 |
單個設備每分鐘支持的最大MQTT連接數(shù) | 1 |
單個MQTT連接每秒的吞吐量,即帶寬,包含直連設備和網(wǎng)關 | 3KB/s |
MQTT單個發(fā)布消息最大長度,超過此大小的發(fā)布請求將被直接拒絕 | 1MB |
MQTT連接心跳時間建議值 | 心跳時間限定為30至1200秒,推薦設置為120秒 |
產(chǎn)品是否支持自定義Topic | 支持 |
消息發(fā)布與訂閱 | 設備只能對自己的Topic進行消息發(fā)布與訂閱 |
每個訂閱請求的最大訂閱數(shù) | 無限制 |
(3)主題訂閱格式
幫助文檔地址:https://support.huaweicloud.com/devg-iothub/iot_02_2200.html
對于設備而言,一般會訂閱平臺下發(fā)消息給設備 這個主題。
設備想接收平臺下發(fā)的消息,就需要訂閱平臺下發(fā)消息給設備 的主題,訂閱后,平臺下發(fā)消息給設備,設備就會收到消息。
如果設備想要知道平臺下發(fā)的消息,需要訂閱上面圖片里標注的主題。
以當前設備為例,最終訂閱主題的格式如下:
$oc/devices/{device_id}/sys/messages/down
最終的格式:
$oc/devices/6419627e40773741f9fbdac7_dev1/sys/messages/down
?
(4)主題發(fā)布格式
對于設備來說,主題發(fā)布表示向云平臺上傳數(shù)據(jù),將最新的傳感器數(shù)據(jù),設備狀態(tài)上傳到云平臺。
這個操作稱為:屬性上報。
幫助文檔地址:https://support.huaweicloud.com/usermanual-iothub/iot_06_v5_3010.html
根據(jù)幫助文檔的介紹, 當前設備發(fā)布主題,上報屬性的格式總結如下:
發(fā)布的主題格式:
$oc/devices/{device_id}/sys/properties/report
最終的格式:
$oc/devices/6419627e40773741f9fbdac7_dev1/sys/properties/report
發(fā)布主題時,需要上傳數(shù)據(jù),這個數(shù)據(jù)格式是JSON格式。
上傳的JSON數(shù)據(jù)格式如下:
{
"services": [
{
"service_id": <填服務ID>,
"properties": {
"<填屬性名稱1>": <填屬性值>,
"<填屬性名稱2>": <填屬性值>,
..........
}
}
]
}
根據(jù)JSON格式,一次可以上傳多個屬性字段。 這個JSON格式里的,服務ID,屬性字段名稱,屬性值類型,在前面創(chuàng)建產(chǎn)品的時候就已經(jīng)介紹了,不記得可以翻到前面去查看。
根據(jù)這個格式,組合一次上傳的屬性數(shù)據(jù):
{"services": [{"service_id": "stm32","properties":{"DS18B20":18,"motor_water":1,"motor_oxygen":1,"temp_max":10,"water_hp":130,"motor_food":0,"time_food":0,"oxygen_food":3}}]}
4.6 MQTT三元組
MQTT協(xié)議登錄需要填用戶ID,設備ID,設備密碼等信息,就像我們平時登錄QQ,微信一樣要輸入賬號密碼才能登錄。MQTT協(xié)議登錄的這3個參數(shù),一般稱為MQTT三元組。
接下來介紹,華為云平臺的MQTT三元組參數(shù)如何得到。
(1)MQTT服務器地址
要登錄MQTT服務器,首先記得先知道服務器的地址是多少,端口是多少。
幫助文檔地址:https://console.huaweicloud.com/iotdm/?region=cn-north-4#/dm-portal/home
MQTT協(xié)議的端口支持1883和8883,它們的區(qū)別是:8883 是加密端口更加安全。但是單片機上使用比較困難,所以當前的設備是采用1883端口進連接的。
根據(jù)上面的域名和端口號,得到下面的IP地址和端口號信息: 如果設備支持填寫域名可以直接填域名,不支持就直接填寫IP地址。 (IP地址就是域名解析得到的)
華為云的MQTT服務器地址:114.116.232.138
域名:7445c6bcd3.st1.iotda-device.cn-north-4.myhuaweicloud.com
華為云的MQTT端口號:1883
注意?。。?! 具體要看這里:
(2)生成MQTT三元組
華為云提供了一個在線工具,用來生成MQTT鑒權三元組: https://iot-tool.obs-website.cn-north-4.myhuaweicloud.com/
打開這個工具,填入設備的信息(也就是剛才創(chuàng)建完設備之后保存的信息),點擊生成,就可以得到MQTT的登錄信息了。
下面是打開的頁面:
填入設備的信息: (上面兩行就是設備創(chuàng)建完成之后保存得到的)
得到三元組之后,設備端通過MQTT協(xié)議登錄鑒權的時候,填入?yún)?shù)即可。
ClientId 6419627e40773741f9fbdac7_dev1_0_0_2023032108
Username 6419627e40773741f9fbdac7_dev1
Password 861ac9e6a579d36888b2aaf97714be7af6c77017b017162884592bd68b086a6e
4.7 模擬設備登錄測試
經(jīng)過上面的步驟介紹,已經(jīng)創(chuàng)建了產(chǎn)品,設備,數(shù)據(jù)模型,得到MQTT登錄信息。 接下來就用MQTT客戶端軟件模擬真實的設備來登錄平臺。測試與服務器通信是否正常。
(1)填入登錄信息
打開MQTT客戶端軟件,對號填入相關信息(就是上面的文本介紹)。然后,點擊登錄,訂閱主題,發(fā)布主題。
(2)打開網(wǎng)頁查看
完成上面的操作之后,打開華為云網(wǎng)頁后臺,可以看到設備已經(jīng)在線了。
點擊詳情頁面,可以看到上傳的數(shù)據(jù)。
到此,云平臺的部署已經(jīng)完成,設備已經(jīng)可以正常上傳數(shù)據(jù)了。
五、代碼設計
5.1 EC20-4G模塊AT指令介紹
EC20模塊是一種常用的無線通信模塊,支持MQTT協(xié)議。
下面MQTT相關的AT指令:
【1】AT+QMTCONN:用于建立與MQTT服務器的連接。
- 功能:通過指定MQTT服務器的地址、端口、客戶端ID、用戶名和密碼等參數(shù),建立與MQTT服務器的連接。
【2】AT+QMTDISC:用于斷開與MQTT服務器的連接。
- 功能:斷開與MQTT服務器的連接。
【3】AT+QMTPUB:用于發(fā)布MQTT消息。
- 功能:指定MQTT主題和消息內(nèi)容,將消息發(fā)布到MQTT服務器。
【4】AT+QMTSUB:用于訂閱MQTT主題。
- 功能:訂閱指定的MQTT主題,接收該主題下的消息。
【5】AT+QMTUNS:用于取消訂閱MQTT主題。
- 功能:取消對指定MQTT主題的訂閱。
【6】AT+QMTRECV:用于接收MQTT消息。
- 功能:接收從MQTT服務器發(fā)送的消息。
這些是EC20模塊MQTT協(xié)議相關的AT指令。使用這些指令,可以在EC20模塊上實現(xiàn)MQTT設備的登錄、主題訂閱、主題發(fā)布以及消息接收等功能。
5.2 EC20連接IOT平臺
以下是使用STM32和EC20通過MQTT協(xié)議連接物聯(lián)網(wǎng)平臺并實現(xiàn)主題訂閱和發(fā)布的實現(xiàn)代碼:
#include "stm32f10x.h"
#include "stdio.h"
#include "string.h"
// 定義串口波特率
#define BAUD_RATE 115200
// 定義UART接收緩沖區(qū)大小
#define UART_RX_BUFFER_SIZE 256
// 定義MQTT服務器地址和端口號
#define MQTT_SERVER_ADDRESS "mqtt.example.com"
#define MQTT_SERVER_PORT 1883
// 定義MQTT客戶端ID
#define MQTT_CLIENT_ID "example_client"
// 定義MQTT訂閱的主題
#define MQTT_SUB_TOPIC "example_topic"
// 定義MQTT發(fā)布的主題
#define MQTT_PUB_TOPIC "example_topic"
// 定義UART接收緩沖區(qū)和索引
char uartRxBuffer[UART_RX_BUFFER_SIZE];
volatile uint16_t uartRxBufferIndex = 0;
// UART中斷處理函數(shù)
void USART1_IRQHandler(void)
{
if (USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
{
// 讀取接收到的數(shù)據(jù)
char data = USART_ReceiveData(USART1);
// 將數(shù)據(jù)存入接收緩沖區(qū)
uartRxBuffer[uartRxBufferIndex] = data;
uartRxBufferIndex++;
// 處理接收到的數(shù)據(jù)
// 這里可以根據(jù)需要進行相關操作,例如解析MQTT消息等
// 清除接收中斷標志位
USART_ClearITPendingBit(USART1, USART_IT_RXNE);
}
}
// 初始化UART1配置
void UART1_Config(void)
{
USART_InitTypeDef USART_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
// 使能USART1和GPIOA時鐘
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA, ENABLE);
// 配置USART1引腳
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; // TX
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; // RX
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStructure);
// 配置USART1
USART_InitStructure.USART_BaudRate = BAUD_RATE;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStructure.USART_Parity = USART_Parity_No;
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
USART_Init(USART1, &USART_InitStructure);
// 配置USART1中斷
NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
// 使能USART1接收中斷
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
// 使能USART1
USART_Cmd(USART1, ENABLE);
}
// 向UART1發(fā)送數(shù)據(jù)
void UART1_SendData(char *data)
{
while (*data)
{
// 發(fā)送數(shù)據(jù)
USART_SendData(USART1, *data++);
// 等待發(fā)送完成
while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);
}
}
// 連接MQTT服務器
void MQTT_Connect(void)
{
// 構造MQTT CONNECT報文
char connectPacket[256];
sprintf(connectPacket,
"x10x12x00x04MQTTx04x02x00x3Cx00%s",
MQTT_CLIENT_ID);
// 發(fā)送MQTT CONNECT報文
UART1_SendData(connectPacket);
}
// 訂閱MQTT主題
void MQTT_Subscribe(void)
{
// 構造MQTT SUBSCRIBE報文
char subscribePacket[256];
sprintf(subscribePacket,
"x82x0Fx00x01x00x0C"MQTT_SUB_TOPIC"x00x00");
// 發(fā)送MQTT SUBSCRIBE報文
UART1_SendData(subscribePacket);
}
// 發(fā)布MQTT消息
void MQTT_Publish(char *message)
{
// 構造MQTT PUBLISH報文
char publishPacket[256];
sprintf(publishPacket,
"x30x10x00x0D"MQTT_PUB_TOPIC"%s",
message);
// 發(fā)送MQTT PUBLISH報文
UART1_SendData(publishPacket);
}
int main(void)
{
// 初始化UART1配置
UART1_Config();
// 連接MQTT服務器
MQTT_Connect();
// 訂閱MQTT主題
MQTT_Subscribe();
while (1)
{
// 處理其他任務
// 發(fā)布MQTT消息
MQTT_Publish("Hello, world!");
// 等待一段時間
delay_ms(1000);
}
}
在代碼中,通過UART1與EC20進行通信,并實現(xiàn)了MQTT的連接、訂閱和發(fā)布功能。UART1_SendData
函數(shù)用于向UART1發(fā)送數(shù)據(jù),MQTT_Connect
函數(shù)用于連接MQTT服務器,MQTT_Subscribe
函數(shù)用于訂閱MQTT主題,MQTT_Publish
函數(shù)用于發(fā)布MQTT消息。
5.3 獲取設備影子數(shù)據(jù)(API接口)
幫助文檔:https://support.huaweicloud.com/api-iothub/iot_06_v5_0079.html
設備影子介紹:
設備影子是一個用于存儲和檢索設備當前狀態(tài)信息的JSON文檔。
每個設備有且只有一個設備影子,由設備ID唯一標識
設備影子僅保存最近一次設備的上報數(shù)據(jù)和預期數(shù)據(jù)
無論該設備是否在線,都可以通過該影子獲取和設置設備的屬性
簡單來說:設備影子就是保存,設備最新上傳的一次數(shù)據(jù)。
我們設計的軟件里,如果想要獲取設備的最新狀態(tài)信息,就采用設備影子接口。
如果對接口不熟悉,可以先進行在線調(diào)試:https://apiexplorer.developer.huaweicloud.com/apiexplorer/doc?product=IoTDA&api=ShowDeviceShadow
在線調(diào)試接口,可以請求影子接口,了解請求,與返回的數(shù)據(jù)格式。
設備影子接口返回的數(shù)據(jù)如下:
{
"device_id": "6419627e40773741f9fbdac7_dev1",
"shadow": [
{
"service_id": "stm32",
"desired": {
"properties": null,
"event_time": null
},
"reported": {
"properties": {
"DS18B20": 18,
"motor_water": 1,
"motor_oxygen": 1,
"temp_max": 10,
"water_hp": 130,
"motor_food": 0,
"time_food": 0,
"oxygen_food": 3
},
"event_time": "20230321T081126Z"
},
"version": 0
}
]
}
5.4 修改設備屬性(API接口)
地址: https://support.huaweicloud.com/api-iothub/iot_06_v5_0034.html
接口說明
設備的產(chǎn)品模型中定義了物聯(lián)網(wǎng)平臺可向設備下發(fā)的屬性,應用服務器可調(diào)用此接口向指定設備下發(fā)屬性。平臺負責將屬性以同步方式發(fā)送給設備,并將設備執(zhí)行屬性結果同步返回。
修改設備屬性的接口,可以讓服務器給設備下發(fā)指令,如果需要控制設備。
在線調(diào)試地址:
https://apiexplorer.developer.huaweicloud.com/apiexplorer/doc?product=IoTDA&api=UpdateProperties
修改設備屬性是屬于同步命令,需要設備在線才可以進行調(diào)試,先使用MQTT客戶端登錄服務器,模擬設備上線。
然后進行調(diào)試,測試數(shù)據(jù)遠程下發(fā)給設備。
【1】利用MQTT客戶端先登錄設備 (這是同步命令,必須在線才能調(diào)試)
【2】點擊調(diào)試
{"services":{"temp_max":100}}
【4】可以看到,MQTT客戶端軟件上已經(jīng)收到了服務器下發(fā)的消息
由于是同步命令,服務器必須要收到設備的響應才能順利完成一個流程,設備響應了服務器才能確定數(shù)據(jù)下發(fā)成功。
六、總結
基于STM32和華為云IOT的智能車庫管理系統(tǒng)可以實現(xiàn)停車位智能展示功能,方便用戶快速找到空閑停車位。系統(tǒng)的核心部分是主控芯片STM32F103ZET6和紅外傳感器,通過紅外傳感器檢測停車位是否有車輛存在,并實時將檢測數(shù)據(jù)上傳到華為云物聯(lián)網(wǎng)平臺。
在物聯(lián)網(wǎng)平臺上,可以創(chuàng)建一個設備模型,包括車庫總停車數(shù)量、當前剩余空位數(shù)量和車位的編號等屬性。每個停車位對應一個設備,通過紅外傳感器的檢測結果更新對應停車位的狀態(tài)。EC20-4G模塊負責將這些數(shù)據(jù)發(fā)送到華為云物聯(lián)網(wǎng)平臺,實現(xiàn)與云端的通信。
微信小程序作為用戶界面,通過調(diào)用華為云物聯(lián)網(wǎng)平臺提供的接口,獲取設備上傳的數(shù)據(jù)并進行處理分析,在界面上顯示當前車庫總停車數(shù)量、當前剩余空位數(shù)量和車位的編號??梢允褂枚S立體圖的形式,將停車位的狀態(tài)進行展示,標注出空閑的停車位,方便用戶快速找到空位進行停車。
通過紅外傳感器和EC20模塊實時上傳數(shù)據(jù)到華為云物聯(lián)網(wǎng)平臺,微信小程序通過調(diào)用接口獲取數(shù)據(jù)并展示在界面上,實現(xiàn)停車位智能展示功能。這種系統(tǒng)可以提高停車場的利用率,提供用戶友好的體驗,同時也為停車場管理者提供了實時監(jiān)控和數(shù)據(jù)分析的便利。