0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于 NB-IoT 通信模組的低功耗智能門磁傳感器

智能物聯(lián)研習(xí)社 ? 來(lái)源:智能物聯(lián)研習(xí)社 ? 作者:智能物聯(lián)研習(xí)社 ? 2021-01-27 16:41 ? 次閱讀

智能門磁傳感器在智能安防領(lǐng)域扮演著重要的角色,應(yīng)用的場(chǎng)合也越來(lái)越多。離家后不確定家中門窗是否關(guān)閉?不妨打開手機(jī)確認(rèn)一下。文介紹如何使用涂鴉三明治開發(fā)板快速完成一個(gè)基于 NB-IoT 通信模組的低功耗智能門磁傳感器產(chǎn)品原型,實(shí)現(xiàn)門磁電池電量兩個(gè)基礎(chǔ)功能。

MCU 方案與 SoC 方案不同,傳感器和聯(lián)網(wǎng)模組的驅(qū)動(dòng)代碼寫在 MCU 中,您可以自行開發(fā) MCU 代碼,擁有更多的可玩性。涂鴉三明治開發(fā)板門磁傳感套件中,傳感器板干簧管根據(jù)開合狀態(tài)輸出高低電平給 MCU 控制板,MCU 通過串口 與 NB-IoT 通信板連接,使用涂鴉智能 App 配網(wǎng)。您可以將門磁狀態(tài)展現(xiàn)在手機(jī)端,并與其他智能設(shè)備聯(lián)動(dòng)。本教程中:

  • MCU 型號(hào)為 STM32G071RB

  • Demo 例程以 Keil(MDK-ARM)為開發(fā)環(huán)境,使用 STM32CubeMX 配置生成初始化代碼

物料清單

硬件 (3)

  • 涂鴉三明治 NB-IoT 通信板(NM1)數(shù)量:1

配合 MCU 使用,提供聯(lián)網(wǎng)能力。

  • 涂鴉三明治門磁傳感器功能板數(shù)量:1

通過磁鐵靠近或遠(yuǎn)離干簧管使干簧管通斷產(chǎn)生的高低電平信號(hào)來(lái)判斷當(dāng)前的門窗磁狀態(tài)是開啟或關(guān)閉。

  • NUCLEO-G71RB數(shù)量:1

第 1 步:硬件連接

本次使用的涂鴉三明治開發(fā)板門磁傳感套件主要包含:

門磁傳感器功能板,板載兩路干簧管一路觸發(fā)輸出為低,一路觸發(fā)輸出為高,您可以根據(jù)實(shí)際情況選用。

NB-IoT MCU 通信板,板載涂鴉 NM1 模組,負(fù)責(zé)智能化連接。模組已燒錄通用固件,MCU 對(duì)接涂鴉串口協(xié)議,即可使用模組+App+云涂鴉一站式智能化服務(wù)。

MCU控制板,采用ST官方 NUCLEO-G071RB 開發(fā)板,負(fù)責(zé)傳感數(shù)據(jù)接收和模組通訊控制。將三明治開發(fā)板套件控制板、通訊板、功能板拼接組裝,實(shí)物效果如下圖。

  • 第 2 步:例程環(huán)境

軟件開發(fā)過程主要使用 STM32CubeMX 來(lái)配置初始化 MCU,以 Keil5 為開發(fā)環(huán)境實(shí)現(xiàn) MCU 與傳感器和模組協(xié)議對(duì)接。首先調(diào)通 MCU 和模組的通訊,可以實(shí)現(xiàn) App 配網(wǎng),MCU 數(shù)據(jù)傳輸?shù)?App。

第 3 步:創(chuàng)建工程和產(chǎn)品

您可以根據(jù)以下步驟,快速在涂鴉 IoT 平臺(tái)上開發(fā)一個(gè)智能門磁。

  1. 進(jìn)入 涂鴉智能IoT平臺(tái)。

  2. 參考 選品類創(chuàng)建產(chǎn)品 創(chuàng)建一款門磁產(chǎn)品。其中產(chǎn)品屬性如下:

開發(fā)方式:自定義方案

聯(lián)網(wǎng)方式:NB-IoT

功耗類型:PSM

84508060ce274f70b7443ffcba9def5a~tplv-tt-shrink:640:0.image

3、根據(jù)頁(yè)面提示選擇產(chǎn)品的標(biāo)準(zhǔn)功能和自定義功能。功能選擇門磁電池電量,本DEMO例程只支持這兩個(gè)基本功能,如需其它功能需要自行實(shí)現(xiàn)。

3b0b27c9c18942059d490b8adf7fef2e~tplv-tt-shrink:640:0.image

4、選擇您喜歡的面板,第一次開始調(diào)試也可以選擇為開發(fā)調(diào)試面板,便于調(diào)試,后面也可以更換面板。

5、面板選擇完后,進(jìn)入硬件開發(fā)階段,在頁(yè)面拉到最下面,下載開發(fā)資料

cbe862897b6e4354b0d54b1d801c9e8a~tplv-tt-shrink:640:0.image

6、硬件測(cè)試。

下載到 MCU 開發(fā)包后,使用開發(fā)包中的涂鴉模組調(diào)試助手,您可以使用助手模擬 MCU 模式,配合調(diào)試模組通訊板,驗(yàn)證模組是否通訊正常,同時(shí)也可以熟悉涂鴉串口協(xié)議提高對(duì)接效率。確定通信板正??捎玫?,可以跳過此步驟。若調(diào)試過程中對(duì)協(xié)議收發(fā)有疑問,也可以使用此助手協(xié)助查看正確數(shù)據(jù)交互格式。 使用步驟可參考 涂鴉模組調(diào)試助手使用說明。

第 4 步:移植 MCU SDK

在使用 STM32CubeMX 生產(chǎn)初始化工程代碼后,即可開始移植 MCU_SDK。本章節(jié)簡(jiǎn)單介紹了移植過程和功能實(shí)現(xiàn),將mcu_sdk中的文件加入工程后,編譯根據(jù)報(bào)錯(cuò)提示,進(jìn)行修改。如需查看詳細(xì)的移植調(diào)試教程,請(qǐng)參考 MCU SDK 移植。

  1. uart_transmit_output()函數(shù)按照#error中的提示信息處理,處理后注釋掉。

3f7cc3efc97d477db45ddac562f14c8e~tplv-tt-shrink:640:0.image

2、完善uart_receive_input()函數(shù)按照#error中的提示信息處理,處理后注釋掉。

ad6451379b5c47b3bc1fb767731372ff~tplv-tt-shrink:640:0.image

3、將nbiot_uart_service()函數(shù)按照#error中的提示信息處理,處理后注釋掉。

35bebbeb056847fda67ce1b3e1e3cb89~tplv-tt-shrink:640:0.image

4、nbiot_protocol_init()函數(shù)按照#error中的提示信息處理,處理后注釋掉。

接下來(lái)便是all_data_update()函數(shù),該函數(shù)會(huì)自動(dòng)上報(bào)系統(tǒng)中所有 DP 信息,您不要調(diào)用該函數(shù)。

第 5 步:編寫嵌入式程序

  1. 新建一個(gè)user_func.h文件,在其中定 + 義一個(gè)結(jié)構(gòu)體,用來(lái)記錄門磁設(shè)備的各種狀態(tài)。

//傳感器上報(bào)標(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)上報(bào)鎖
	unsignedcharremaining_power;//設(shè)備剩余電量,單位百分比}device_status_t;
  1. 在新建的user_func.c文件中實(shí)現(xiàn)一些自定義的功能函數(shù),同時(shí)在nbiot.h文件中添加頭文件#include "user_func.h"。

  2. main.c文件中,添加頭文件#include "nbiot.h"。MCU上電啟動(dòng)后,進(jìn)入while(1){}循環(huán)前,除了常規(guī)的配置IO口、串口、ADC以外還需要執(zhí)行的:

nbiot_protocol_init();//使能低功耗模式時(shí)鐘__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()是電池電量檢測(cè)函數(shù),在函數(shù)內(nèi)通過ADC采樣和換算得出大概的剩余電量并保存。由您自行實(shí)現(xiàn)。

  • user_sensor_up_poll()是傳感器上報(bào)任務(wù)處理函數(shù),根據(jù)NB模組的設(shè)備狀態(tài)等多種因素判讀是否做上報(bào)數(shù)據(jù)發(fā)送處理以及是否需要讓MCU進(jìn)入STOP低功耗模式。由您自行實(shí)現(xiàn)。

voiduser_sensor_up_poll(void){	
	//	當(dāng)NB模組為已綁定連接狀態(tài)且門狀態(tài)上報(bào)鎖打開的情況下。門狀態(tài)上報(bào)鎖在收到模組上報(bào)成功回碼后會(huì)打開
	if((NB_STATE_DEVICE_BINDED==mcu_get_nbiot_work_state())&&(device_status_s.door_up_lock)){		//判讀有未處理的門狀態(tài)上報(bào)任務(wù),開始向NB模組發(fā)送上報(bào)數(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{			
			//判斷剩余電量是否低于電量上報(bào)閾值,發(fā)送電量上報(bào)數(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進(jìn)入低功耗模式
			enter_lowpower_mode();							
		}
	}
}

實(shí)現(xiàn)進(jìn)入和退出低功耗模式兩個(gè)函數(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)閉時(shí)鐘
	__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();	//進(jìn)入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);	//傳感器需要上報(bào)門開關(guān)狀態(tài)
	device_status_s.sensor_state=STATE_DOOR_NEED_UP;
}

MCU的Stop低功耗模式主要由中斷來(lái)喚醒,所以需要在中斷回調(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模式中喚醒需要重新連接涂鴉云,喚醒時(shí)第一次門狀態(tài)上報(bào)會(huì)失敗,所以需要在模組連接成功并返回工作狀態(tài)回碼時(shí)重新發(fā)送一次上報(bào)狀態(tài),即在system.c文件下data_handle函數(shù)的工作狀態(tài)回碼處理case中添加代碼實(shí)現(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ù)的上報(bào)回碼處理case中添加代碼:

caseSTATE_UPLOAD_CMD:
	//判斷result的值,確認(rèn)收到模組返回的信息后,打開門狀態(tài)上報(bào)鎖,準(zhǔn)備下一次上報(bào)
device_status_s.door_up_lock=1;break;

第 6 步:(可選)場(chǎng)景聯(lián)動(dòng)

產(chǎn)品功能調(diào)試通過后,App 端已經(jīng)可以接收到門磁感器的數(shù)據(jù)。智能傳感器最大的應(yīng)用場(chǎng)景是用來(lái)收集傳感數(shù)據(jù)來(lái)和其它產(chǎn)品進(jìn)行聯(lián)動(dòng)。如果您已經(jīng)擁有了其他涂鴉生態(tài)設(shè)備或開發(fā)板,可以在 App 端實(shí)現(xiàn)場(chǎng)景聯(lián)動(dòng)功能的配置。詳細(xì)步驟,請(qǐng)參考 場(chǎng)景聯(lián)動(dòng)設(shè)置。

6dd7cd82e65d4e7a8b88c9db13e01d8e~tplv-tt-shrink:640:0.image

auth.tuya.com/?from=https%3A%2F%2Fiot.tuya.com%2F&_source=795a75d7c1af33f95d8ea55409e4b22e

基于涂鴉智能 IoT 平臺(tái),您可以使用三明治開發(fā)板、STM32CubeMX、Keil開發(fā)環(huán)境,快速搭建一款智能門磁傳感器產(chǎn)品原型。

審核編輯:符乾江

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 傳感器
    +關(guān)注

    關(guān)注

    2551

    文章

    51200

    瀏覽量

    754515
  • mcu
    mcu
    +關(guān)注

    關(guān)注

    146

    文章

    17173

    瀏覽量

    351624
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    NB-IOT物聯(lián)網(wǎng)基站是如何通信的呢?

    、測(cè)試、應(yīng)用和網(wǎng)絡(luò)發(fā)展。 一、NB-IOT物聯(lián)網(wǎng)網(wǎng)絡(luò)組成有哪些呢? 包括NB-IOT終端、NB-IOT基站、NB-IOT分組核心網(wǎng)、物聯(lián)網(wǎng)連接管理平臺(tái)和工業(yè)應(yīng)用服務(wù)
    的頭像 發(fā)表于 01-02 15:55 ?142次閱讀
    <b class='flag-5'>NB-IOT</b>物聯(lián)網(wǎng)基站是如何<b class='flag-5'>通信</b>的呢?

    芯訊通NB-IoT模組E7025 R3實(shí)現(xiàn)大規(guī)模部署

    作為全球知名物聯(lián)網(wǎng)通信模組提供商,芯訊通擁有全制式、全品類模組產(chǎn)品線,所打造的產(chǎn)品已遍布全球五大洲,為各產(chǎn)業(yè)合作伙伴的終端通信連接提供助力。芯訊通推出的
    的頭像 發(fā)表于 12-09 16:56 ?535次閱讀

    NB-IoT型無(wú)線水壓、水位傳感器使用說明書

    電子發(fā)燒友網(wǎng)站提供《NB-IoT型無(wú)線水壓、水位傳感器使用說明書.pdf》資料免費(fèi)下載
    發(fā)表于 08-08 12:44 ?0次下載

    電流傳感器 開環(huán)與閉環(huán)的區(qū)別

    在電流測(cè)量技術(shù)不斷進(jìn)步的今天,電流傳感器憑借其卓越的性能,已成為工業(yè)和科研領(lǐng)域中不可或缺的工具。這種傳感器通過感應(yīng)電流產(chǎn)生的磁場(chǎng)變化,提供了一種間接但極為精確的電流測(cè)量方法。
    的頭像 發(fā)表于 07-03 16:44 ?1885次閱讀
    <b class='flag-5'>磁</b>通<b class='flag-5'>門</b>電流<b class='flag-5'>傳感器</b> 開環(huán)<b class='flag-5'>磁</b>通<b class='flag-5'>門</b>與閉環(huán)<b class='flag-5'>磁</b>通<b class='flag-5'>門</b>的區(qū)別

    Cat.1網(wǎng)絡(luò)會(huì)取代NB-IoT技術(shù)嗎?

    通信模型在斷電應(yīng)用下的功耗對(duì)比,每包數(shù)據(jù) 長(zhǎng)度 50Bytes,測(cè)試模型包括:上報(bào)一包數(shù)據(jù)、連續(xù)上報(bào)三包數(shù)據(jù)、連續(xù)上報(bào)三包數(shù)據(jù)同時(shí)服務(wù)下發(fā)一包數(shù)據(jù) 。NB-IoT 與 Cat.1
    發(fā)表于 06-04 06:17

    LoRa與NB-IoT兩大低功耗通信技術(shù)對(duì)比

    在物聯(lián)網(wǎng)(IoT)的浪潮中,低功耗廣域網(wǎng)絡(luò)(LPWAN)技術(shù)成為了連接智能設(shè)備的核心。其中,LoRa和NB-IoT作為兩大主流技術(shù),憑借各自的特點(diǎn)和優(yōu)勢(shì),在物聯(lián)網(wǎng)的廣闊天地中各自扮演著
    的頭像 發(fā)表于 05-11 16:20 ?1540次閱讀

    IoT設(shè)備物聯(lián)網(wǎng)通信選型指南:NB-IoT、LTE-Cat.1與LTE-M

    NB-IoT網(wǎng)絡(luò)組成包括 NB-IoT終端、NB-IoT基站、NB-IoT分組核心網(wǎng)、IoT連接管理平臺(tái)和行業(yè)應(yīng)用服務(wù)
    發(fā)表于 03-13 13:46 ?1892次閱讀
    <b class='flag-5'>IoT</b>設(shè)備物聯(lián)網(wǎng)<b class='flag-5'>通信</b>選型指南:<b class='flag-5'>NB-IoT</b>、LTE-Cat.1與LTE-M

    高集成度、低功耗、高性價(jià)比的NB-IoT模組

    EC系列模組是安信可開發(fā)的NB-IoT模組。其中NB部分采用的主芯片方案為EC616S。該芯片具備超高集成度的NB-IoT SoC、支持超
    的頭像 發(fā)表于 03-12 15:29 ?1370次閱讀
    高集成度、<b class='flag-5'>低功耗</b>、高性價(jià)比的<b class='flag-5'>NB-IoT</b><b class='flag-5'>模組</b>

    NB-IoT設(shè)備天線靜電浪涌保護(hù)方案解析

    窄帶物聯(lián)網(wǎng)(Narrow Band Internet of Things,NB-IoT)是一種為物聯(lián)網(wǎng)設(shè)備提供低功耗、廣覆蓋和高可靠性連接的無(wú)線通信技術(shù)。它是LTE(Long Term Evolution)網(wǎng)絡(luò)的一種變體,專門設(shè)
    發(fā)表于 03-05 12:30 ?514次閱讀
    <b class='flag-5'>NB-IoT</b>設(shè)備天線靜電浪涌保護(hù)方案解析

    NB-IoT設(shè)備天線靜電浪涌保護(hù)方案

    NB-IoT設(shè)備天線靜電浪涌保護(hù)方案窄帶物聯(lián)網(wǎng)(NarrowBandInternetofThings,NB-IoT)是一種為物聯(lián)網(wǎng)設(shè)備提供低功耗、廣覆蓋和高可靠性連接的無(wú)線通信技術(shù)。它
    的頭像 發(fā)表于 03-05 08:02 ?600次閱讀
    <b class='flag-5'>NB-IoT</b>設(shè)備天線靜電浪涌保護(hù)方案

    NB-IoT設(shè)備天線靜電浪涌保護(hù)方案

    窄帶物聯(lián)網(wǎng)(Narrow Band Internet of Things,NB-IoT)是一種為物聯(lián)網(wǎng)設(shè)備提供低功耗、廣覆蓋和高可靠性連接的無(wú)線通信技術(shù)。它是LTE(Long Term
    的頭像 發(fā)表于 02-29 17:48 ?649次閱讀
    <b class='flag-5'>NB-IoT</b>設(shè)備天線靜電浪涌保護(hù)方案

    汽車上用的遠(yuǎn)程通信單元,可以用NB-IOT模塊嗎?

    汽車上用的遠(yuǎn)程通信單元,可以用NB-IOT模塊嗎?
    發(fā)表于 02-04 07:12

    nb-iot單燈控制中的nb-iot是什么?

    nb-iot單燈控制中的nb-iot是什么? NB-IoT是一種低功耗寬帶物聯(lián)網(wǎng)技術(shù),主要應(yīng)用于物聯(lián)網(wǎng)設(shè)備的
    的頭像 發(fā)表于 02-03 11:34 ?1626次閱讀

    什么是NB-IoT模塊?什么是4G模塊?NB-IoT模塊與4G模塊之間的區(qū)別

    。 1. NB-IoT模塊: NB-IoT是一種低功率、窄帶寬的無(wú)線通信技術(shù),專門設(shè)計(jì)用于低功耗、低帶寬的物聯(lián)網(wǎng)應(yīng)用。NB-IoT模塊適用于
    的頭像 發(fā)表于 02-01 10:22 ?1w次閱讀

    什么是窄帶物聯(lián)網(wǎng)(NB-IoT)?應(yīng)用領(lǐng)域有哪些?

    什么是窄帶物聯(lián)網(wǎng)(NB-IoT)?應(yīng)用領(lǐng)域有哪些? 窄帶物聯(lián)網(wǎng)(NB-IoT)是一種低功耗、廣覆蓋、低成本的無(wú)線通信技術(shù),專為物聯(lián)網(wǎng)應(yīng)用而設(shè)計(jì)。它通過在現(xiàn)有蜂窩網(wǎng)絡(luò)基礎(chǔ)設(shè)施上進(jìn)行軟件升
    的頭像 發(fā)表于 02-01 10:13 ?4330次閱讀