<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于STM32+NBIOT+華為云IOT設計的智能井蓋

DS小龍哥-嵌入式技術 ? 來源:DS小龍哥-嵌入式技術 ? 作者:DS小龍哥-嵌入式技 ? 2023-04-26 11:06 ? 次閱讀

一、概述

智能井蓋是一種通過物聯網技術實現對井蓋狀態監測和管理的設備。當前介紹基于STM32微控制器,BC26 NBIOT模組以及華為云IOT平臺設計一款智能井蓋系統。該系統通過光線傳感器、霍爾傳感器、溫濕度傳感器等設備實現井蓋狀態的實時監測,通過NBIOT網絡將數據上傳到華為云IOT平臺,再通過云平臺下發控制指令實現遠程管理。

應用場景

智能井蓋系統可以廣泛應用于城市管理、交通建設等領域,其中具體應用場景包括:

(1)實時監測井蓋狀態,及時發現井蓋開放或異常情況,提高城市管理的效率和安全性;

(2)提供實時環境監測數據,幫助提升城市環境監測能力;

(3)利用NBIOT網絡和華為云平臺的遠程控制功能,可以實現智能井蓋的開關控制和監管,避免人工操作不便和監管不到位引起的危險。

image-20230426095637493image-20230426095643915

二、硬件設計

本系統的硬件設計主要包括傳感器模塊和控制模塊兩部分,其中傳感器模塊主要負責采集井蓋狀態信息,控制模塊則負責數據處理和通信。

【1】傳感器模塊

(1)光線傳感器:光線傳感器用于感知井蓋上方光線強度,判斷井蓋是否露出地面。當井蓋被遮住時,光線傳感器輸出低電平;當井蓋暴露在外時,光線傳感器輸出高電平。

(2)霍爾傳感器:霍爾傳感器用于感知井蓋狀態(開/關),當井蓋開啟時,霍爾傳感器輸出高電平;當井蓋關閉時,霍爾傳感器輸出低電平。

(3)溫度傳感器和濕度傳感器:溫度傳感器和濕度傳感器用于感知井蓋下方的環境溫濕度,實時反饋給系統,便于監測井蓋下方環境狀況。

【2】控制模塊

(1)STM32微控制器:使用STM32F103C8T6微控制器,主要負責傳感器數據采集、處理和控制模塊與NBIOT模組之間的通信。

(2)BC26 NBIOT模組:使用BC26 NBIOT模組,通過NBIOT網絡將采集到的井蓋狀態數據上傳到華為云IOT平臺,同時支持遠程控制井蓋開關。

(3)LED指示燈:采用不同顏色的LED指示燈,將井蓋狀態(開/關、異常、低電量)實時反饋給用戶。

軟件設計 軟件設計主要包括STM32微控制器程序設計和華為云IOT平臺開發兩部分。

STM32微控制器程序設計: 主要包括三個模塊:傳感器采集模塊、數據處理模塊和通信模塊。其中傳感器采集模塊負責采集傳感器數據并進行處理;數據處理模塊根據采集的數據進行邏輯處理,判斷井蓋狀態;通信模塊負責與NBIOT模組之間的通信,將處理后的數據上傳至華為云IOT平臺。

三、華為云IOT平臺開發

在華為云IOT平臺上,需要進行設備接入、數據模型定義、規則引擎配置和應用開發等四個核心模塊的開發。其中,設備接入模塊包括設備注冊、獲取設備證書、建立連接等步驟,以保障設備與云平臺之間的安全通信;數據模型定義模塊需要根據實際需求定義相應的數據模型,包括上傳數據格式、設備屬性和服務等。規則引擎配置模塊需要完成實時消息推送、遠程控制和告警等功能。應用開發模塊則是將完整的智能井蓋系統進行打包,為用戶提供統一的操作接口。

華為云官網: https://www.huaweicloud.com/

打開官網,搜索物聯網,就能快速找到 設備接入IoTDA。

image-20221204193824815

3.1 物聯網平臺介紹

華為云物聯網平臺(IoT 設備接入云服務)提供海量設備的接入和管理能力,將物理設備聯接到云,支撐設備數據采集上云和云端下發命令給設備進行遠程控制,配合華為云其他產品,幫助我們快速構筑物聯網解決方案。

使用物聯網平臺構建一個完整的物聯網解決方案主要包括3部分:物聯網平臺、業務應用和設備。

物聯網平臺作為連接業務應用和設備的中間層,屏蔽了各種復雜的設備接口,實現設備的快速接入;同時提供強大的開放能力,支撐行業用戶構建各種物聯網解決方案。

設備可以通過固網、2G/3G/4G/5G、NB-IoT、Wifi等多種網絡接入物聯網平臺,并使用LWM2M/CoAP、MQTT、HTTPS協議將業務數據上報到平臺,平臺也可以將控制命令下發給設備。

業務應用通過調用物聯網平臺提供的API,實現設備數據采集、命令下發、設備管理等業務場景。

img

3.2 開通物聯網服務

地址: https://www.huaweicloud.com/product/iothub.html

image-20221204194233414

開通標準版免費單元。

image-20230420181306316image-20230420181322092

開通之后,點擊總覽,查看接入信息。 我們當前設備準備采用MQTT協議接入華為云平臺,這里可以看到MQTT協議的地址和端口號等信息。

image-20230423111235524

總結:

端口號:  MQTT (1883)| MQTTS (8883)    
接入地址: a3433ab133.iot-mqtts.cn-north-4.myhuaweicloud.com

根據域名地址得到IP地址信息:

Microsoft Windows [版本 10.0.19044.2846]
(c) Microsoft Corporation。保留所有權利。
?
C:Users11266>ping a3433ab133.iot-mqtts.cn-north-4.myhuaweicloud.com
?
正在 Ping a3433ab133.iot-mqtts.cn-north-4.myhuaweicloud.com [121.36.42.100] 具有 32 字節的數據:
來自 121.36.42.100 的回復: 字節=32 時間=37ms TTL=31
來自 121.36.42.100 的回復: 字節=32 時間=37ms TTL=31
來自 121.36.42.100 的回復: 字節=32 時間=36ms TTL=31
來自 121.36.42.100 的回復: 字節=32 時間=37ms TTL=31
?
121.36.42.100 的 Ping 統計信息:
  數據包: 已發送 = 4,已接收 = 4,丟失 = 0 (0% 丟失),
往返行程的估計時間(以毫秒為單位):
  最短 = 36ms,最長 = 37ms,平均 = 36ms
?
C:Users11266>
image-20230423111213624

MQTT協議接入端口號有兩個,1883是非加密端口,8883是證書加密端口,單片機無法加載證書,所以使用1883端口比較合適。 接下來的ESP8266就采用1883端口連接華為云物聯網平臺。

3.3 創建產品

(1)創建產品

點擊右上角創建產品。

image-20230420181503524

(2)填寫產品信息

根據自己產品名字填寫,設備類型選擇自定義類型。

(3)添加自定義模型

產品創建完成之后,點擊進入產品詳情頁面,翻到最下面可以看到模型定義。

image-20230420181615129

模型簡單來說: 就是存放設備上傳到云平臺的數據。比如:環境溫度、環境濕度、環境煙霧濃度、火焰檢測狀態圖等等,這些我們都可以單獨創建一個模型保存。

3.4 添加設備

產品是屬于上層的抽象模型,接下來在產品模型下添加實際的設備。添加的設備最終需要與真實的設備關聯在一起,完成數據交互。

(1)注冊設備

點擊右上角注冊設備。

image-20230421091842025

(2)根據自己的設備填寫

在彈出的對話框里填寫自己設備的信息。根據自己設備詳細情況填寫。

(3)保存設備信息

創建完畢之后,點擊保存并關閉,得到創建的設備密匙信息。該信息在后續生成MQTT三元組的時候需要使用。

3.5 MQTT協議主題訂閱與發布

(1)MQTT協議介紹

當前的設備是采用MQTT協議與華為云平臺進行通信。

MQTT是一個物聯網傳輸協議,它被設計用于輕量級的發布/訂閱式消息傳輸,旨在為低帶寬和不穩定的網絡環境中的物聯網設備提供可靠的網絡服務。MQTT是專門針對物聯網開發的輕量級傳輸協議。MQTT協議針對低帶寬網絡,低計算能力的設備,做了特殊的優化,使得其能適應各種物聯網應用場景。目前MQTT擁有各種平臺和設備上的客戶端,已經形成了初步的生態系統。

MQTT是一種消息隊列協議,使用發布/訂閱消息模式,提供一對多的消息發布,解除應用程序耦合,相對于其他協議,開發更簡單;MQTT協議是工作在TCP/IP協議上;由TCP/IP協議提供穩定的網絡連接;所以,只要具備TCP協議棧的網絡設備都可以使用MQTT協議。 本次設備采用的ESP8266就具備TCP協議棧,能夠建立TCP連接,所以,配合STM32代碼里封裝的MQTT協議,就可以與華為云平臺完成通信。

華為云的MQTT協議接入幫助文檔在這里: https://support.huaweicloud.com/devg-iothub/iot_02_2200.html

img

業務流程:

img

(2)華為云平臺MQTT協議使用限制

描述 限制
支持的MQTT協議版本 3.1.1
與標準MQTT協議的區別 支持Qos 0和Qos 1支持Topic自定義不支持QoS2不支持will、retain msg
MQTTS支持的安全等級 采用TCP通道基礎 + TLS協議(最高TLSv1.3版本)
單帳號每秒最大MQTT連接請求數 無限制
單個設備每分鐘支持的最大MQTT連接數 1
單個MQTT連接每秒的吞吐量,即帶寬,包含直連設備和網關 3KB/s
MQTT單個發布消息最大長度,超過此大小的發布請求將被直接拒絕 1MB
MQTT連接心跳時間建議值 心跳時間限定為30至1200秒,推薦設置為120秒
產品是否支持自定義Topic 支持
消息發布與訂閱 設備只能對自己的Topic進行消息發布與訂閱
每個訂閱請求的最大訂閱數 無限制

(3)主題訂閱格式

幫助文檔地址:https://support.huaweicloud.com/devg-iothub/iot_02_2200.html

image-20221207153310037

對于設備而言,一般會訂閱平臺下發消息給設備 這個主題。

設備想接收平臺下發的消息,就需要訂閱平臺下發消息給設備 的主題,訂閱后,平臺下發消息給設備,設備就會收到消息。

(4)主題發布格式

對于設備來說,主題發布表示向云平臺上傳數據,將最新的傳感器數據,設備狀態上傳到云平臺。

這個操作稱為:屬性上報。

幫助文檔地址:https://support.huaweicloud.com/usermanual-iothub/iot_06_v5_3010.html

image-20221207153637391

3.6 MQTT三元組

MQTT協議登錄需要填用戶ID,設備ID,設備密碼等信息,就像我們平時登錄QQ,微信一樣要輸入賬號密碼才能登錄。MQTT協議登錄的這3個參數,一般稱為MQTT三元組。

接下來介紹,華為云平臺的MQTT三元組參數如何得到。

(1)MQTT服務器地址

要登錄MQTT服務器,首先記得先知道服務器的地址是多少,端口是多少。

幫助文檔地址:https://console.huaweicloud.com/iotdm/?region=cn-north-4#/dm-portal/home

image-20230411141412090

MQTT協議的端口支持1883和8883,它們的區別是:8883 是加密端口更加安全。但是單片機上使用比較困難,所以當前的設備是采用1883端口進連接的。

根據上面的域名和端口號,得到下面的IP地址和端口號信息: 如果設備支持填寫域名可以直接填域名,不支持就直接填寫IP地址。 (IP地址就是域名解析得到的)

華為云的MQTT服務器地址:121.36.42.100
華為云的MQTT端口號:1883

(2)生成MQTT三元組

華為云提供了一個在線工具,用來生成MQTT鑒權三元組: https://iot-tool.obs-website.cn-north-4.myhuaweicloud.com/

打開這個工具,填入設備的信息(也就是剛才創建完設備之后保存的信息),點擊生成,就可以得到MQTT的登錄信息了。

下面是打開的頁面:

image-20221207154917230

3.7 參考案例

華為云平臺部署開發也可以參考這里:

https://bbs.huaweicloud.com/blogs/381072

【基于華為云IOT平臺實現多節點溫度采集(STM32+NBIOT)】

四、讀取煙霧氣體濃度

【1】MQ2傳感器

以下是一個讀取MQ2傳感器數據,并轉換為煙霧濃度的示例代碼,

#include "stm32f10x.h"
#include 
?
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 ppmn", density);
}
?
?
?
?
float adc_average() 
{
  const int num_discarded = 3; // 剔除的最大/最小值數量
  float samples[20];  // 存儲采樣結果的數組
  
  // 采集數據
  for (int i = 0; i < num_samples; i++) {
? ? ? ? ?samples[i] = ADC_GET();
? ?  }
? ? ?
? ? ?// 對采樣結果進行排序(升序)
? ? ?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); ?// 返回計算結果
?}

【2】MQ4傳感器

以下是基于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傳感器的數據 */
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;
}
?
/* 主函數 */
int main()
{
   HAL_Init();
   MX_GPIO_Init();
   MX_ADC1_Init();
   MX_ADC2_Init();
 
   /* 讀取MQ4傳感器數據 */
   float mq4_value = get_mq4_value();
?
   printf("MQ4傳感器值:%.2f PPMrn", mq4_value);
?
   while (1);
}

在該示例代碼中,我們用到了ADC1和ADC2來分別讀取MQ4傳感器的數據引腳和校準電壓。函數get_mq4_value()中使用了MQ4傳感器的電路計算公式,將讀取的傳感器數據轉化成對應的PPM值。

五、總結

當前文章介紹基于STM32微控制器、BC26 NBIOT模組和華為云IOT平臺,實現了一款智能井蓋系統。該系統通過多種傳感器實現了井蓋狀態的實時監測和數據上傳,在應用上具有重要的應用場景和實際應用價值。整體介紹了系統硬件和軟件設計的各個環節,對相關產品的開發提供了一定的參考價值和設計思路。

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 微控制器
    +關注

    關注

    48

    文章

    6836

    瀏覽量

    147926
  • 物聯網
    +關注

    關注

    2872

    文章

    41810

    瀏覽量

    359299
  • STM32
    +關注

    關注

    2242

    文章

    10681

    瀏覽量

    349199
  • IOT
    IOT
    +關注

    關注

    186

    文章

    4001

    瀏覽量

    193455
  • 華為云
    +關注

    關注

    3

    文章

    2169

    瀏覽量

    16824
收藏 人收藏

    評論

    相關推薦

    移遠 華為 NBIOT BC95 規格 說明 手冊 應用

    移遠基于華為海思平臺開發出了第一款NBIOT物聯網通信模塊BC95, 它可被用于無線抄表(電表,水表,燃氣表)、共享單車、智能停車、智慧城市、安防、資產追蹤、智能家電、農業和環境監測,
    發表于 09-10 22:22

    基于NB-IOT智能井蓋狀態監測器

    及的項目由以下幾個部分組成:智能井蓋檢測器:安裝于城市井蓋的底部,通過433M LORA射頻模塊與接收器智能組網設備進行通訊,并將傳感采集數據通過4G送至
    發表于 11-20 13:27

    【小熊派IOT開發板試用連載】3、華為的配置

    小熊拍智能路燈的華為配置,可能是華為有改版,一直沒找到IOT增強版頁面,經在
    發表于 04-21 10:17

    基于STM32L4+BC28 NBIOT開發板

    原標題:基于STM32L4+BC28(全網通) NBIOT開發板原理圖教程源碼等開源分享關注我們基于STM32L4+BC28(全網通) NBIOT開發板原理圖教程源碼等開源分享FCOR
    發表于 08-17 07:39

    基于mcu+nbiot的涂鴉智能平臺設計

    涂鴉智能平臺——mcu+nbiot接入平臺上報溫濕度和防拆報警準備環境和硬件平臺平臺準備1、注冊涂鴉平臺賬號并登陸2、創建一個產品產品類型為:溫濕度傳感器3、創建數據點(可直接選用平臺現有的數據
    發表于 11-01 07:21

    NB-Iot無線通訊技術概念

    技術。是在2016年由中國華為科技和中國電信,中國移動,聯通聯合推出的。2017年開始投入商用的。我是在2017年開始接觸NB-Iot技術的,后來幾年也一直在從事NB系列產品的研發,包括NB-Iot門磁、NB-
    發表于 01-12 07:27

    使用MQTT方式對接華為IoT平臺的具體過程

    摘要:本文主要講述使用MQTT方式對接華為IoT平臺的具體過程。使用的方案:目標板為STM32L431BearPI(帶E53擴展板); TCPIP功能由開發板的ESP8266提供;M
    發表于 01-27 07:13

    怎樣用M5311模塊對接華為

    、分享技術。 剛開始要著手解決這個問題的時候很懵。首先買了M5311模塊(NB-IOT模塊的一種),拿到模塊相關資料之后,感覺好像沒有針對我的應用的資料。然后資料中各種內容一大堆,表示看不太懂。。。后來,就有了這篇文章。技術關鍵詞:NBIOT、M5311、MQTT協議、
    發表于 02-22 07:09

    基于OpenHarmony的華為IoT智慧路燈實現

    。前面的文章介紹了基于OpenHarmony的智慧路燈實現,本文將在前面文章的基礎上,添加華為IoT功能,實現基于OpenHarmony系統的IoT智慧路燈。小凌派RK2206開發板
    發表于 05-10 09:36

    基于OpenHarmony的華為IoT智慧路燈

    。前面的文章介紹了基于OpenHarmony的智慧路燈實現,本文將在前面文章的基礎上,添加華為IoT功能,實現基于OpenHarmony系統的IoT智慧路燈。小凌派RK2206開發板
    發表于 05-11 10:06

    【小凌派RK2206開發板試用體驗】OpenHarmony華為IoT應用開發-智慧井蓋

    本帖最后由 周安平 于 2022-6-4 10:07 編輯 【小凌派RK2206開發板試用體驗】OpenHarmony華為IoT應用開發-智慧井蓋
    發表于 06-03 20:48

    【合作伙伴】華為--智能見未來

    華為華為IoT,致力于提供極簡接入、智能化、安全可信等全棧全場景服務和開發、集成、托管、運營
    發表于 12-12 10:35

    井蓋智能監測終端——井蓋狀態監測儀

    一、產品概述井蓋智能監測終端是一款用于監測城市窨井井蓋狀態的設備,安裝于井蓋背面,當井蓋發生異動或窨井液位達到報警條件時,將觸發
    發表于 12-13 11:09

    請問nbiot怎么接線stm32?

    nbiot怎么接線stm32?
    發表于 10-19 06:00

    基于Cortex-M3內核的32位微控制器,STM32項目實戰分享!

    :分享STM32、CC2530、Linux、物聯網、C/C++、QT、FFMPEG音視頻相關技術。 基于STM32+NBIOT+華為IOT設計的
    的頭像 發表于 05-16 09:30 ?1089次閱讀
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>