摘要:本文介紹基于STM32微控制器、BC26 NBIOT模組和華為云IOT平臺,實現(xiàn)了一款智能井蓋系統(tǒng)。
本文分享自華為云社區(qū)《基于STM32+NBIOT+華為云IOT設(shè)計的智能井蓋》,作者:DS小龍哥 。
(資料圖)
一、概述智能井蓋是一種通過物聯(lián)網(wǎng)技術(shù)實現(xiàn)對井蓋狀態(tài)監(jiān)測和管理的設(shè)備。當前介紹基于STM32微控制器,BC26 NBIOT模組以及華為云IOT平臺設(shè)計一款智能井蓋系統(tǒng)。該系統(tǒng)通過光線傳感器、霍爾傳感器、溫濕度傳感器等設(shè)備實現(xiàn)井蓋狀態(tài)的實時監(jiān)測,通過NBIOT網(wǎng)絡(luò)將數(shù)據(jù)上傳到華為云IOT平臺,再通過云平臺下發(fā)控制指令實現(xiàn)遠程管理。
應(yīng)用場景智能井蓋系統(tǒng)可以廣泛應(yīng)用于城市管理、交通建設(shè)等領(lǐng)域,其中具體應(yīng)用場景包括:
(1)實時監(jiān)測井蓋狀態(tài),及時發(fā)現(xiàn)井蓋開放或異常情況,提高城市管理的效率和安全性;
(2)提供實時環(huán)境監(jiān)測數(shù)據(jù),幫助提升城市環(huán)境監(jiān)測能力;
(3)利用NBIOT網(wǎng)絡(luò)和華為云平臺的遠程控制功能,可以實現(xiàn)智能井蓋的開關(guān)控制和監(jiān)管,避免人工操作不便和監(jiān)管不到位引起的危險。
二、硬件設(shè)計本系統(tǒng)的硬件設(shè)計主要包括傳感器模塊和控制模塊兩部分,其中傳感器模塊主要負責采集井蓋狀態(tài)信息,控制模塊則負責數(shù)據(jù)處理和通信。
【1】傳感器模塊(1)光線傳感器:光線傳感器用于感知井蓋上方光線強度,判斷井蓋是否露出地面。當井蓋被遮住時,光線傳感器輸出低電平;當井蓋暴露在外時,光線傳感器輸出高電平。
(2)霍爾傳感器:霍爾傳感器用于感知井蓋狀態(tài)(開/關(guān)),當井蓋開啟時,霍爾傳感器輸出高電平;當井蓋關(guān)閉時,霍爾傳感器輸出低電平。
(3)溫度傳感器和濕度傳感器:溫度傳感器和濕度傳感器用于感知井蓋下方的環(huán)境溫濕度,實時反饋給系統(tǒng),便于監(jiān)測井蓋下方環(huán)境狀況。
【2】控制模塊(1)STM32微控制器:使用STM32F103C8T6微控制器,主要負責傳感器數(shù)據(jù)采集、處理和控制模塊與NBIOT模組之間的通信。
(2)BC26 NBIOT模組:使用BC26 NBIOT模組,通過NBIOT網(wǎng)絡(luò)將采集到的井蓋狀態(tài)數(shù)據(jù)上傳到華為云IOT平臺,同時支持遠程控制井蓋開關(guān)。
(3)LED指示燈:采用不同顏色的LED指示燈,將井蓋狀態(tài)(開/關(guān)、異常、低電量)實時反饋給用戶。
軟件設(shè)計 軟件設(shè)計主要包括STM32微控制器程序設(shè)計和華為云IOT平臺開發(fā)兩部分。
STM32微控制器程序設(shè)計: 主要包括三個模塊:傳感器采集模塊、數(shù)據(jù)處理模塊和通信模塊。其中傳感器采集模塊負責采集傳感器數(shù)據(jù)并進行處理;數(shù)據(jù)處理模塊根據(jù)采集的數(shù)據(jù)進行邏輯處理,判斷井蓋狀態(tài);通信模塊負責與NBIOT模組之間的通信,將處理后的數(shù)據(jù)上傳至華為云IOT平臺。
三、華為云IOT平臺開發(fā)在華為云IOT平臺上,需要進行設(shè)備接入、數(shù)據(jù)模型定義、規(guī)則引擎配置和應(yīng)用開發(fā)等四個核心模塊的開發(fā)。其中,設(shè)備接入模塊包括設(shè)備注冊、獲取設(shè)備證書、建立連接等步驟,以保障設(shè)備與云平臺之間的安全通信;數(shù)據(jù)模型定義模塊需要根據(jù)實際需求定義相應(yīng)的數(shù)據(jù)模型,包括上傳數(shù)據(jù)格式、設(shè)備屬性和服務(wù)等。規(guī)則引擎配置模塊需要完成實時消息推送、遠程控制和告警等功能。應(yīng)用開發(fā)模塊則是將完整的智能井蓋系統(tǒng)進行打包,為用戶提供統(tǒng)一的操作接口。
華為云官網(wǎng):https://www.huaweicloud.com/
打開官網(wǎng),搜索物聯(lián)網(wǎng),就能快速找到設(shè)備接入IoTDA
。
華為云物聯(lián)網(wǎng)平臺(IoT 設(shè)備接入云服務(wù))提供海量設(shè)備的接入和管理能力,將物理設(shè)備聯(lián)接到云,支撐設(shè)備數(shù)據(jù)采集上云和云端下發(fā)命令給設(shè)備進行遠程控制,配合華為云其他產(chǎn)品,幫助我們快速構(gòu)筑物聯(lián)網(wǎng)解決方案。
使用物聯(lián)網(wǎng)平臺構(gòu)建一個完整的物聯(lián)網(wǎng)解決方案主要包括3部分:物聯(lián)網(wǎng)平臺、業(yè)務(wù)應(yīng)用和設(shè)備。
物聯(lián)網(wǎng)平臺作為連接業(yè)務(wù)應(yīng)用和設(shè)備的中間層,屏蔽了各種復(fù)雜的設(shè)備接口,實現(xiàn)設(shè)備的快速接入;同時提供強大的開放能力,支撐行業(yè)用戶構(gòu)建各種物聯(lián)網(wǎng)解決方案。
設(shè)備可以通過固網(wǎng)、2G/3G/4G/5G、NB-IoT、Wifi等多種網(wǎng)絡(luò)接入物聯(lián)網(wǎng)平臺,并使用LWM2M/CoAP、MQTT、HTTPS協(xié)議將業(yè)務(wù)數(shù)據(jù)上報到平臺,平臺也可以將控制命令下發(fā)給設(shè)備。
業(yè)務(wù)應(yīng)用通過調(diào)用物聯(lián)網(wǎng)平臺提供的API,實現(xiàn)設(shè)備數(shù)據(jù)采集、命令下發(fā)、設(shè)備管理等業(yè)務(wù)場景。
3.2 開通物聯(lián)網(wǎng)服務(wù)地址:https://www.huaweicloud.com/product/iothub.html
開通標準版免費單元。
開通之后,點擊總覽
,查看接入信息。 我們當前設(shè)備準備采用MQTT協(xié)議接入華為云平臺,這里可以看到MQTT協(xié)議的地址和端口號等信息。
總結(jié):
端口號: MQTT (1883)| MQTTS (8883) 接入地址: a3433ab133.iot-mqtts.cn-north-4.myhuaweicloud.com
根據(jù)域名地址得到IP地址信息:
Microsoft Windows [版本 10.0.19044.2846] (c) Microsoft Corporation。保留所有權(quán)利。 ? C:\Users\11266>ping a3433ab133.iot-mqtts.cn-north-4.myhuaweicloud.com ? 正在 Ping a3433ab133.iot-mqtts.cn-north-4.myhuaweicloud.com [121.36.42.100] 具有 32 字節(jié)的數(shù)據(jù): 來自 121.36.42.100 的回復(fù): 字節(jié)=32 時間=37ms TTL=31 來自 121.36.42.100 的回復(fù): 字節(jié)=32 時間=37ms TTL=31 來自 121.36.42.100 的回復(fù): 字節(jié)=32 時間=36ms TTL=31 來自 121.36.42.100 的回復(fù): 字節(jié)=32 時間=37ms TTL=31 ? 121.36.42.100 的 Ping 統(tǒng)計信息: 數(shù)據(jù)包: 已發(fā)送 = 4,已接收 = 4,丟失 = 0 (0% 丟失), 往返行程的估計時間(以毫秒為單位): 最短 = 36ms,最長 = 37ms,平均 = 36ms ? C:\Users\11266>
MQTT協(xié)議接入端口號有兩個,1883是非加密端口,8883是證書加密端口,單片機無法加載證書,所以使用1883端口比較合適。 接下來的ESP8266就采用1883端口連接華為云物聯(lián)網(wǎng)平臺。
3.3 創(chuàng)建產(chǎn)品(1)創(chuàng)建產(chǎn)品點擊右上角創(chuàng)建產(chǎn)品。
(2)填寫產(chǎn)品信息根據(jù)自己產(chǎn)品名字填寫,設(shè)備類型選擇自定義類型。
(3)添加自定義模型產(chǎn)品創(chuàng)建完成之后,點擊進入產(chǎn)品詳情頁面,翻到最下面可以看到模型定義。
模型簡單來說: 就是存放設(shè)備上傳到云平臺的數(shù)據(jù)。比如:環(huán)境溫度、環(huán)境濕度、環(huán)境煙霧濃度、火焰檢測狀態(tài)圖等等,這些我們都可以單獨創(chuàng)建一個模型保存。
3.4 添加設(shè)備產(chǎn)品是屬于上層的抽象模型,接下來在產(chǎn)品模型下添加實際的設(shè)備。添加的設(shè)備最終需要與真實的設(shè)備關(guān)聯(lián)在一起,完成數(shù)據(jù)交互。
(1)注冊設(shè)備點擊右上角注冊設(shè)備。
(2)根據(jù)自己的設(shè)備填寫在彈出的對話框里填寫自己設(shè)備的信息。根據(jù)自己設(shè)備詳細情況填寫。
(3)保存設(shè)備信息創(chuàng)建完畢之后,點擊保存并關(guān)閉,得到創(chuàng)建的設(shè)備密匙信息。該信息在后續(xù)生成MQTT三元組的時候需要使用。
3.5 MQTT協(xié)議主題訂閱與發(fā)布(1)MQTT協(xié)議介紹當前的設(shè)備是采用MQTT協(xié)議與華為云平臺進行通信。
MQTT是一個物聯(lián)網(wǎng)傳輸協(xié)議,它被設(shè)計用于輕量級的發(fā)布/訂閱式消息傳輸,旨在為低帶寬和不穩(wěn)定的網(wǎng)絡(luò)環(huán)境中的物聯(lián)網(wǎng)設(shè)備提供可靠的網(wǎng)絡(luò)服務(wù)。MQTT是專門針對物聯(lián)網(wǎng)開發(fā)的輕量級傳輸協(xié)議。MQTT協(xié)議針對低帶寬網(wǎng)絡(luò),低計算能力的設(shè)備,做了特殊的優(yōu)化,使得其能適應(yīng)各種物聯(lián)網(wǎng)應(yīng)用場景。目前MQTT擁有各種平臺和設(shè)備上的客戶端,已經(jīng)形成了初步的生態(tài)系統(tǒng)。
MQTT是一種消息隊列協(xié)議,使用發(fā)布/訂閱消息模式,提供一對多的消息發(fā)布,解除應(yīng)用程序耦合,相對于其他協(xié)議,開發(fā)更簡單;MQTT協(xié)議是工作在TCP/IP協(xié)議上;由TCP/IP協(xié)議提供穩(wěn)定的網(wǎng)絡(luò)連接;所以,只要具備TCP協(xié)議棧的網(wǎng)絡(luò)設(shè)備都可以使用MQTT協(xié)議。 本次設(shè)備采用的ESP8266就具備TCP協(xié)議棧,能夠建立TCP連接,所以,配合STM32代碼里封裝的MQTT協(xié)議,就可以與華為云平臺完成通信。
華為云的MQTT協(xié)議接入幫助文檔在這里:https://support.huaweicloud.com/devg-iothub/iot_02_2200.html
業(yè)務(wù)流程:
(2)華為云平臺MQTT協(xié)議使用限制(3)主題訂閱格式幫助文檔地址:https://support.huaweicloud.com/devg-iothub/iot_02_2200.html
對于設(shè)備而言,一般會訂閱平臺下發(fā)消息給設(shè)備 這個主題。
設(shè)備想接收平臺下發(fā)的消息,就需要訂閱平臺下發(fā)消息給設(shè)備 的主題,訂閱后,平臺下發(fā)消息給設(shè)備,設(shè)備就會收到消息。
(4)主題發(fā)布格式對于設(shè)備來說,主題發(fā)布表示向云平臺上傳數(shù)據(jù),將最新的傳感器數(shù)據(jù),設(shè)備狀態(tài)上傳到云平臺。
這個操作稱為:屬性上報。
幫助文檔地址:https://support.huaweicloud.com/usermanual-iothub/iot_06_v5_3010.html
3.6 MQTT三元組MQTT協(xié)議登錄需要填用戶ID,設(shè)備ID,設(shè)備密碼等信息,就像我們平時登錄QQ,微信一樣要輸入賬號密碼才能登錄。MQTT協(xié)議登錄的這3個參數(shù),一般稱為MQTT三元組。
接下來介紹,華為云平臺的MQTT三元組參數(shù)如何得到。
(1)MQTT服務(wù)器地址要登錄MQTT服務(wù)器,首先記得先知道服務(wù)器的地址是多少,端口是多少。
幫助文檔地址:https://console.huaweicloud.com/iotdm/?region=cn-north-4#/dm-portal/home
MQTT協(xié)議的端口支持1883和8883,它們的區(qū)別是:8883 是加密端口更加安全。但是單片機上使用比較困難,所以當前的設(shè)備是采用1883端口進連接的。
根據(jù)上面的域名和端口號,得到下面的IP地址和端口號信息:如果設(shè)備支持填寫域名可以直接填域名,不支持就直接填寫IP地址。 (IP地址就是域名解析得到的)
華為云的MQTT服務(wù)器地址:121.36.42.100 華為云的MQTT端口號:1883(2)生成MQTT三元組
華為云提供了一個在線工具,用來生成MQTT鑒權(quán)三元組:https://iot-tool.obs-website.cn-north-4.myhuaweicloud.com/
打開這個工具,填入設(shè)備的信息(也就是剛才創(chuàng)建完設(shè)備之后保存的信息),點擊生成,就可以得到MQTT的登錄信息了。
下面是打開的頁面:
3.7 參考案例華為云平臺部署開發(fā)也可以參考這里:
https://bbs.huaweicloud.com/blogs/381072
【基于華為云IOT平臺實現(xiàn)多節(jié)點溫度采集(STM32+NBIOT)】
四、讀取煙霧氣體濃度【1】MQ2傳感器以下是一個讀取MQ2傳感器數(shù)據(jù),并轉(zhuǎn)換為煙霧濃度的示例代碼,
#include "stm32f10x.h" #include【2】MQ4傳感器? int main(void) { // 初始化ADC ADC_InitTypeDef ADC_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; ADC_InitStructure.ADC_ScanConvMode = DISABLE; ADC_InitStructure.ADC_ContinuousConvMode = DISABLE; ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; ADC_InitStructure.ADC_NbrOfChannel = 1; ADC_Init(ADC1, &ADC_InitStructure); ? // 配置ADC通道1的GPIO引腳 GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; GPIO_Init(GPIOA, &GPIO_InitStructure); ? // 啟動ADC校準 ADC_Cmd(ADC1, ENABLE); ADC_ResetCalibration(ADC1); while (ADC_GetResetCalibrationStatus(ADC1)); ADC_StartCalibration(ADC1); while (ADC_GetCalibrationStatus(ADC1)); ? // 讀取ADC值 ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 1, ADC_SampleTime_28Cycles5); ADC_SoftwareStartConvCmd(ADC1, ENABLE); while (!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC)); uint16_t adc_value = ADC_GetConversionValue(ADC1); ? // 計算煙霧濃度 float voltage = (float)adc_value / 4096.0f * 3.3f; float density = (voltage - 0.4f) / 0.4f * 10000.0f; ? // 打印出煙霧濃度 printf("MQ2 Smoke Density: %.2f ppm\n", density); } ? ? ? ? float adc_average() { const int num_discarded = 3; // 剔除的最大/最小值數(shù)量 float samples[20]; // 存儲采樣結(jié)果的數(shù)組 // 采集數(shù)據(jù) for (int i = 0; i < num_samples; i++) { samples[i] = ADC_GET(); } // 對采樣結(jié)果進行排序(升序) for (int i = 0; i < num_samples - 1; i++) { for (int j = i + 1; j < num_samples; j++) { if (samples[i] > samples[j]) { float temp = samples[i]; samples[i] = samples[j]; samples[j] = temp; } } } // 計算剩下的平均值 float sum = 0; for (int i = num_discarded; i < num_samples - num_discarded; i++) { sum += samples[i]; } return sum / (num_samples - 2 * num_discarded); // 返回計算結(jié)果 }
以下是基于HAL庫的STM32F103ZET6讀取MQ4煙霧傳感器的代碼:
#include "gpio.h" ? /* MQ4傳感器的引腳定義 */ #define MQ4_PORT GPIOA #define MQ4_PIN GPIO_PIN_0 ? /* MQ4傳感器的校準電壓 */ #define MQ4_RL_VALUE 10 // RL值為10kΩ #define MQ4_CALCULATE_RO_CLEAN(adcValue) ((float)(RL_VALUE*(4096-adcValue)/adcValue)) ? /* 獲取MQ4傳感器的數(shù)據(jù) */ float get_mq4_value() { uint32_t adc_value = HAL_ADC_GetValue(&hadc1); float ro = MQ4_CALCULATE_RO_CLEAN(adc_value); float sensor_volt = HAL_ADC_GetValue(&hadc2) * (3.3 /4096.0); float sensor_rsr = (3.3 - sensor_volt) / sensor_volt * ro; float mq4_ppm = pow(10, ((log10(sensor_rsr / 2.5) - 0.3420) / (-0.6162))); return mq4_ppm; } ? /* 主函數(shù) */ int main() { HAL_Init(); MX_GPIO_Init(); MX_ADC1_Init(); MX_ADC2_Init(); /* 讀取MQ4傳感器數(shù)據(jù) */ float mq4_value = get_mq4_value(); ? printf("MQ4傳感器值:%.2f PPM\r\n", mq4_value); ? while (1); }
在該示例代碼中,我們用到了ADC1和ADC2來分別讀取MQ4傳感器的數(shù)據(jù)引腳和校準電壓。函數(shù)get_mq4_value()中使用了MQ4傳感器的電路計算公式,將讀取的傳感器數(shù)據(jù)轉(zhuǎn)化成對應(yīng)的PPM值。
五、總結(jié)當前文章介紹基于STM32微控制器、BC26 NBIOT模組和華為云IOT平臺,實現(xiàn)了一款智能井蓋系統(tǒng)。該系統(tǒng)通過多種傳感器實現(xiàn)了井蓋狀態(tài)的實時監(jiān)測和數(shù)據(jù)上傳,在應(yīng)用上具有重要的應(yīng)用場景和實際應(yīng)用價值。整體介紹了系統(tǒng)硬件和軟件設(shè)計的各個環(huán)節(jié),對相關(guān)產(chǎn)品的開發(fā)提供了一定的參考價值和設(shè)計思路。
點擊關(guān)注,第一時間了解華為云新鮮技術(shù)~
上一篇:全球熱頭條丨又一省級能源集團揭牌成立!
下一篇:最后一頁
凡本網(wǎng)注明“XXX(非汪清新聞網(wǎng))提供”的作品,均轉(zhuǎn)載自其它媒體,轉(zhuǎn)載目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點和其真實性負責。
,傳奇手游哪個好玩?傳奇手游有著熟悉的傳奇界面,熟悉的玩法,原汁原
2023-06-05 16:00
網(wǎng)貸逾期一般會上征信,有些借貸機構(gòu)在用戶逾期后一天后就會上報給征信
2023-06-05 15:03
在上輪擊敗衛(wèi)冕冠軍武漢三鎮(zhèn)后,滄州雄獅本輪0-1不敵上海申花,沒有延
2023-06-05 14:05
白酒龍頭罕見跌停!3個月蒸發(fā)250多億,發(fā)生了什么?,白酒公司,醬香型白酒
2023-06-05 13:21
三亞市市場監(jiān)督管理局發(fā)布關(guān)于抖音網(wǎng)友發(fā)布“三亞被宰記”的調(diào)查情況通
2023-06-05 13:00
金鏟鏟之戰(zhàn)S9戰(zhàn)神羈絆的效果是什么呢?在金鏟鏟之戰(zhàn)游戲中戰(zhàn)神羈絆是游
2023-06-05 12:28
滴滴滴~鵬華基金首趟“反洗錢公交巴士”正式發(fā)車啦!即日起乘坐深圳M19
2023-06-05 11:21
6月5日石家莊中冀正元化工有限公司硝酸銨裝置運行穩(wěn)定,廠家出廠報價為
2023-06-05 10:55
豐臺城管執(zhí)法系統(tǒng)開展“靜心2023”中高考服務(wù)保障工作隨著中高考日期臨
2023-06-05 10:39
1、南京理工大學繼續(xù)教育學院作為南京理工大學的二級學院創(chuàng)辦于1980年
2023-06-05 09:50