翔神教你學NB
BC26 OPEN開發之--LWM2M連接分析
前言:
NB-IOT商用已經2年多了,三大運營商都建設了大量的NB網絡,尤其以中國電信最爲積極,各個模組廠家推出了大量的NB模組,移遠的NB模組的出貨量佔了絕大數。BC26作爲移遠推出的第一款支持open開發的模組獲得了大量的應用,爲什麼?價格優勢在那呢。筆者利用這款模組開發了不下10款產品,其中一款產品3個月出貨達到了40K.不多說了,下來就聊聊BC26的open開發之LWM2M。
爲什麼是LMM2M啊? 因爲中國電信開發平臺支持LWM2M.同時電信的NB網絡覆蓋最廣。
試驗準備:
BC26 OPEN開發一套:
如果沒有的可以點擊:
https://item.taobao.com/item.htm?spm=a2126o.11854294.0.0.35eb4831eGzhta&id=601354111610
筆者年初做的一款BC26開發板,價格相當於白送就收個模塊錢。有的就繼續往下看。
編譯工具一個:
筆者用的是VS CODE 爲什麼用這個邊用先賣個關子。
VS CODE打開工程如下圖:
關鍵的數據結構:
typedef enum{
STATE_NW_QUERY_STATE,
STATE_LwM2M_SERV,
STATE_LwM2M_CONF,
STATE_LwM2M_ADDOBJ,
STATE_LwM2M_OPEN,
STATE_LwM2M_UPDATE,
STATE_LwM2M_CFG,
STATE_LwM2M_SEND,
//STATE_LwM2M_RD,
STATE_LwM2M_CLOSE,
STATE_LwM2M_DELETE,
STATE_TOTAL_NUM
}Enum_ONENETSTATE;
static u8 m_lwm2m_state = STATE_NW_QUERY_STATE;
這個枚舉類型裏定義了,LWM2M的重要狀態。並對變量進行了初始化。
主任務:
void proc_main_task(s32 taskId)
定時器回調函數:
static void Callback_Timer(u32 timerId, void* param);
串口回調函數:
static void CallBack_UART_Hdlr(Enum_SerialPort port, Enum_UARTEventType msg, bool level, void* customizedPara);
proc_main_task的流程圖如下:
URC處理是該任務的重點處理流程如下:
proc_main_task中在while(1)的死循環中來獲取模塊底層上報的URC消息,根據URC消息進行不通的處理。
另外一個重要的函數
static void Callback_Timer(u32 timerId, void* param)
負責注網和電信平臺建立網絡連接,在測試前要保證BC26模塊在電信平臺註冊同時SIM卡沒有欠費。
/*****************************************************************
* LwM2M timer param
******************************************************************/
#define LwM2M_TIMER_ID TIMER_ID_USER_START
#define LwM2M_TIMER_PERIOD 1000
每一個TIMER需要一個ID編號,上面定義了ID和週期,該定時器1S執行一次。
Callback_Timer函數裏用狀態機實現了注網和連接平臺的過程,具體的流程如下:
到這LWM2M的流程就講完了,看下代碼執行結果把: