BC26 OPEN开发之--LWM2M连接分析
翔神教你学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的流程就讲完了,看下代码执行结果把: