智能門磁傳感器在智能安防領(lǐng)域扮演著重要的角色,應(yīng)用的場合也越來越多。離家后不確定家中門窗是否關(guān)閉?不妨打開手機確認一下。文介紹如何使用涂鴉三明治開發(fā)板快速完成一個基于 NB-IoT 通信模組的低功耗智能門磁傳感器產(chǎn)品原型,實現(xiàn)門磁和電池電量兩個基礎(chǔ)功能。
MCU 方案與 SoC 方案不同,傳感器和聯(lián)網(wǎng)模組的驅(qū)動代碼寫在 MCU 中,您可以自行開發(fā) MCU 代碼,擁有更多的可玩性。涂鴉三明治開發(fā)板門磁傳感套件中,傳感器板干簧管根據(jù)開合狀態(tài)輸出高低電平給 MCU 控制板,MCU 通過串口 與 NB-IoT 通信板連接,使用涂鴉智能 App 配網(wǎng)。您可以將門磁狀態(tài)展現(xiàn)在手機端,并與其他智能設(shè)備聯(lián)動。本教程中:
物料清單
硬件 (3)
-
涂鴉三明治 NB-IoT 通信板(NM1)數(shù)量:1
配合 MCU 使用,提供聯(lián)網(wǎng)能力。
-
涂鴉三明治門磁傳感器功能板數(shù)量:1
通過磁鐵靠近或遠離干簧管使干簧管通斷產(chǎn)生的高低電平信號來判斷當(dāng)前的門窗磁狀態(tài)是開啟或關(guān)閉。
-
NUCLEO-G71RB數(shù)量:1
第 1 步:硬件連接
本次使用的涂鴉三明治開發(fā)板門磁傳感套件主要包含:
門磁傳感器功能板,板載兩路干簧管一路觸發(fā)輸出為低,一路觸發(fā)輸出為高,您可以根據(jù)實際情況選用。
NB-IoT MCU 通信板,板載涂鴉 NM1 模組,負責(zé)智能化連接。模組已燒錄通用固件,MCU 對接涂鴉串口協(xié)議,即可使用模組+App+云涂鴉一站式智能化服務(wù)。
MCU控制板,采用ST官方 NUCLEO-G071RB 開發(fā)板,負責(zé)傳感數(shù)據(jù)接收和模組通訊控制。將三明治開發(fā)板套件控制板、通訊板、功能板拼接組裝,實物效果如下圖。
-
第 2 步:例程環(huán)境
軟件開發(fā)過程主要使用 STM32CubeMX 來配置初始化 MCU,以 Keil5 為開發(fā)環(huán)境實現(xiàn) MCU 與傳感器和模組協(xié)議對接。首先調(diào)通 MCU 和模組的通訊,可以實現(xiàn) App 配網(wǎng),MCU 數(shù)據(jù)傳輸?shù)?App。
第 3 步:創(chuàng)建工程和產(chǎn)品
您可以根據(jù)以下步驟,快速在涂鴉 IoT 平臺上開發(fā)一個智能門磁。
-
進入 涂鴉智能IoT平臺。
-
參考 選品類創(chuàng)建產(chǎn)品 創(chuàng)建一款門磁產(chǎn)品。其中產(chǎn)品屬性如下:
開發(fā)方式:自定義方案
聯(lián)網(wǎng)方式:NB-IoT
功耗類型:PSM
3、根據(jù)頁面提示選擇產(chǎn)品的標(biāo)準(zhǔn)功能和自定義功能。功能選擇門磁和電池電量,本DEMO例程只支持這兩個基本功能,如需其它功能需要自行實現(xiàn)。
4、選擇您喜歡的面板,第一次開始調(diào)試也可以選擇為開發(fā)調(diào)試面板,便于調(diào)試,后面也可以更換面板。
5、面板選擇完后,進入硬件開發(fā)階段,在頁面拉到最下面,下載開發(fā)資料。
6、硬件測試。
下載到 MCU 開發(fā)包后,使用開發(fā)包中的涂鴉模組調(diào)試助手,您可以使用助手模擬 MCU 模式,配合調(diào)試模組通訊板,驗證模組是否通訊正常,同時也可以熟悉涂鴉串口協(xié)議提高對接效率。確定通信板正常可用的,可以跳過此步驟。若調(diào)試過程中對協(xié)議收發(fā)有疑問,也可以使用此助手協(xié)助查看正確數(shù)據(jù)交互格式。 使用步驟可參考 涂鴉模組調(diào)試助手使用說明。
第 4 步:移植 MCU SDK
在使用 STM32CubeMX 生產(chǎn)初始化工程代碼后,即可開始移植 MCU_SDK。本章節(jié)簡單介紹了移植過程和功能實現(xiàn),將mcu_sdk中的文件加入工程后,編譯根據(jù)報錯提示,進行修改。如需查看詳細的移植調(diào)試教程,請參考 MCU SDK 移植。
-
將uart_transmit_output()函數(shù)按照#error中的提示信息處理,處理后注釋掉。
2、完善uart_receive_input()函數(shù)按照#error中的提示信息處理,處理后注釋掉。
3、將nbiot_uart_service()函數(shù)按照#error中的提示信息處理,處理后注釋掉。
4、nbiot_protocol_init()函數(shù)按照#error中的提示信息處理,處理后注釋掉。
接下來便是all_data_update()函數(shù),該函數(shù)會自動上報系統(tǒng)中所有 DP 信息,您不要調(diào)用該函數(shù)。
第 5 步:編寫嵌入式程序
-
新建一個user_func.h文件,在其中定 + 義一個結(jié)構(gòu)體,用來記錄門磁設(shè)備的各種狀態(tài)。
//傳感器上報標(biāo)志typedefenum{
STATE_IDLE=0,
STATE_DOOR_NEED_UP=1 }sensor_state_t;//門開關(guān)狀態(tài)typedefenum{
STATE_CLOSE=0,
STATE_OPEN=1 }door_state_t;typedefstruct{
door_state_tdoor_state;
sensor_state_tsensor_state; unsignedchardoor_up_lock;//門狀態(tài)上報鎖
unsignedcharremaining_power;//設(shè)備剩余電量,單位百分比}device_status_t;
-
在新建的user_func.c文件中實現(xiàn)一些自定義的功能函數(shù),同時在nbiot.h文件中添加頭文件#include "user_func.h"。
-
在main.c文件中,添加頭文件#include "nbiot.h"。MCU上電啟動后,進入while(1){}循環(huán)前,除了常規(guī)的配置IO口、串口、ADC以外還需要執(zhí)行的:
nbiot_protocol_init();//使能低功耗模式時鐘__HAL_RCC_PWR_CLK_ENABLE();//初始化NB模組喚醒腳的電平HAL_GPIO_WritePin(GPIOA,GPIO_PIN_10,GPIO_PIN_SET);
在while(1){}循環(huán)內(nèi):
while(1)
{nbiot_uart_service();
power_detect_poll();
user_sensor_up_poll();
}
-
nbiot_uart_service()是SDK提供的串口數(shù)據(jù)處理函數(shù),解析并處理NB-IoT模組返回的數(shù)據(jù)。
-
power_detect_poll()是電池電量檢測函數(shù),在函數(shù)內(nèi)通過ADC采樣和換算得出大概的剩余電量并保存。由您自行實現(xiàn)。
-
user_sensor_up_poll()是傳感器上報任務(wù)處理函數(shù),根據(jù)NB模組的設(shè)備狀態(tài)等多種因素判讀是否做上報數(shù)據(jù)發(fā)送處理以及是否需要讓MCU進入STOP低功耗模式。由您自行實現(xiàn)。
voiduser_sensor_up_poll(void){
// 當(dāng)NB模組為已綁定連接狀態(tài)且門狀態(tài)上報鎖打開的情況下。門狀態(tài)上報鎖在收到模組上報成功回碼后會打開
if((NB_STATE_DEVICE_BINDED==mcu_get_nbiot_work_state())&&(device_status_s.door_up_lock)){ //判讀有未處理的門狀態(tài)上報任務(wù),開始向NB模組發(fā)送上報數(shù)據(jù)。
if(STATE_DOOR_NEED_UP==device_status_s.sensor_state){
device_status_s.sensor_state=STATE_IDLE;
mcu_dp_bool_update(DPID_DOORCONTACT_STATE,device_status_s.door_state);
device_status_s.door_up_lock=0;
}else{
//判斷剩余電量是否低于電量上報閾值,發(fā)送電量上報數(shù)據(jù)并降低閾值
if(device_status_s.remaining_power<=?power_threshold)?{
mcu_dp_value_update(DPID_BATTERY_PERCENTAGE,?device_status_s.remaining_power); if(power_threshold?>=25){
power_threshold-=25;
}
} //打開NB模組PSM休眠鎖
mcu_set_nbiot_sleeplock(0); //MCU進入低功耗模式
enter_lowpower_mode();
}
}
}
實現(xiàn)進入和退出低功耗模式兩個函數(shù):
voidenter_lowpower_mode(){
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_10,GPIO_PIN_SET);
lowpower_gpio_init();
HAL_ADC_Stop(&hadc1);
HAL_ADC_DeInit(&hadc1);
HAL_UART_DeInit(&huart3); //HAL_TIM_Base_DeInit(&htim3);
//關(guān)閉時鐘
__HAL_RCC_DMA1_CLK_DISABLE();
__HAL_RCC_GPIOB_CLK_DISABLE();
__HAL_RCC_GPIOC_CLK_DISABLE();
__HAL_RCC_GPIOC_CLK_DISABLE();
__HAL_RCC_GPIOD_CLK_DISABLE();
__HAL_RCC_GPIOF_CLK_DISABLE();
HAL_SuspendTick(); //進入stop模式
HAL_PWR_EnterSTOPMode(PWR_MAINREGULATOR_ON,PWR_STOPENTRY_WFI);
}voidleave_lowpower_mode(){
SystemClock_Config();
MX_GPIO_Init(); //MX_TIM3_Init();
MX_USART3_UART_Init();
__HAL_UART_ENABLE_IT(&huart3,UART_IT_RXNE);
MX_ADC1_Init();
HAL_ADC_Start(&hadc1); //拉低引腳喚醒NB模組
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_10,GPIO_PIN_RESET); //傳感器需要上報門開關(guān)狀態(tài)
device_status_s.sensor_state=STATE_DOOR_NEED_UP;
}
MCU的Stop低功耗模式主要由中斷來喚醒,所以需要在中斷回調(diào)函數(shù)中調(diào)用nbiot_uart_service()并記錄門的開關(guān)狀態(tài):
voidHAL_GPIO_EXTI_Falling_Callback(uint16_tGPIO_Pin){
leave_lowpower_mode();
device_status_s.door_state=STATE_OPEN;
}voidHAL_GPIO_EXTI_Rising_Callback(uint16_tGPIO_Pin){
leave_lowpower_mode();
device_status_s.door_state=STATE_CLOSE;
}
由于NB模組從PSM模式中喚醒需要重新連接涂鴉云,喚醒時第一次門狀態(tài)上報會失敗,所以需要在模組連接成功并返回工作狀態(tài)回碼時重新發(fā)送一次上報狀態(tài),即在system.c文件下data_handle函數(shù)的工作狀態(tài)回碼處理case中添加代碼實現(xiàn):
//工作狀態(tài) caseNBIOT_STATE_CMD:
nbiot_work_state=nbiot_uart_rx_buf[offset+DATA_START];
nbiot_uart_write_frame(NBIOT_STATE_CMD,0); if(STATE_DOOR_NEED_UP==mcu_get_nbiot_work_state()){
mcu_dp_bool_update(DPID_DOORCONTACT_STATE,device_status_s.door_state);
device_status_s.sensor_state=STATE_IDLE;
}break;
在system.c文件下data_handle函數(shù)的上報回碼處理case中添加代碼:
caseSTATE_UPLOAD_CMD: //判斷result的值,確認收到模組返回的信息后,打開門狀態(tài)上報鎖,準(zhǔn)備下一次上報 device_status_s.door_up_lock=1;break;
第 6 步:(可選)場景聯(lián)動
產(chǎn)品功能調(diào)試通過后,App 端已經(jīng)可以接收到門磁感器的數(shù)據(jù)。智能傳感器最大的應(yīng)用場景是用來收集傳感數(shù)據(jù)來和其它產(chǎn)品進行聯(lián)動。如果您已經(jīng)擁有了其他涂鴉生態(tài)設(shè)備或開發(fā)板,可以在 App 端實現(xiàn)場景聯(lián)動功能的配置。詳細步驟,請參考 場景聯(lián)動設(shè)置。
| auth.tuya.com/?from=https%3A%2F%2Fiot.tuya.com%2F&_source=795a75d7c1af33f95d8ea55409e4b22e |
基于涂鴉智能 IoT 平臺,您可以使用三明治開發(fā)板、STM32CubeMX、Keil開發(fā)環(huán)境,快速搭建一款智能門磁傳感器產(chǎn)品原型。
審核編輯:符乾江
-
傳感器
+關(guān)注
關(guān)注
2576文章
55041瀏覽量
791377 -
mcu
+關(guān)注
關(guān)注
147文章
18925瀏覽量
398280
發(fā)布評論請先 登錄
直川NB-IoT傾角傳感器:伊利貨架安全智能守護者
羅德與施瓦茨NB-IoT NTN終端測試解決方案
無線傾角傳感器在貨架監(jiān)測領(lǐng)域的技術(shù)應(yīng)用與價值解析
掘金新藍海!利爾達重磅推出NB-IoT全球通模組
基于 NB-IoT 通信模組的低功耗智能門磁傳感器
評論