翔神教你學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卡沒有欠費。
#define LwM2M_TIMER_ID TIMER_ID_USER_START
#define LwM2M_TIMER_PERIOD 1000
每一個TIMER需要一個ID編号,上面定義了ID和周期,該定時器1S執行一次。
Callback_Timer函數裡用狀态機實作了注網和連接配接平台的過程,具體的流程如下:
标題
到這LWM2M的流程就講完了,看下代碼執行結果把: