概述
前言
NB模组在广域物联网领域发挥越来越重要的作用,有些NB模组有一个特性:OPENCPU。这个是降低成本和减少布板空间的利器。这里就以移远通信的NB模组——BC26模组来开发OPENCPU应用。
开发环境简介
移远的OPENCPU开发环境是GCC加APP烧录工具;虽然有优势,但是开发上做了限制,有些库和功能不能使用。
这里贴一个工程的早期demo的Git,完成了MQTT的连接上传接收等的URC的处理,一些外设的测试:
https://github.com/JetLinWork/BC26_MQTT_OPENCPU
这边做了OPENCPU的应用开发之后的一点经验和看法。
硬件上:虽然单模组的布板空间有所缩小,但没有想象那么多,因为模组电平是1.8V的域,基本的IO输出和外设交互都需要电平转换,这里占用空间就不少(分立或集成)。电源的驱动上确实低了2G模组很多,现在一个USB就能带起来。
软件上:在windows上开发,使用的是移远提供的SDK和Flash烧录工具。按照开发手册的步骤来就可以进行开发。虽然说是使用FreeRTOS但是开放的OS的API很少,只有信号量和TASK之间的message传输。在编译上限制了 像<string.h>等库的使用,提供了部分替代函数,第三方的C库移植带来了很大的麻烦。貌似触发任务调度的方式只有等待任务间message,其他的好像不行(待确认)。
详细的开发的环境介绍和开发步骤参见Git里面的/doc/下的手册 Quectel_BC26-OpenCPU_User_Guide_V10.pdf 开发手册里面有的内容我这里就不再赘述了。
在SDK里面也提供了很多外设驱动使用的例程。
URC开发
URC ( Unsolicited Result Code )就是不同于AT指令发了一个就会马上回复一个OK/ERR这种,而是一些类似中断不定时出现不知道对应那条AT发送指令的内容,例如MQTT接收到的数据就会以URC数据的方式发送到URC的处理任务。暂时有的URC的处理有TCP/LWM2M/ONENET等有限的API,不过开放了源码,你只需要按照这些例程去开发自己想要的URC接收处理函数就可以了。
关于URC的开发的内容手册里面基本没有提及,但是这个对于功能的开发来说是至关重要的,因为官方提供的功能不可能尽善尽美,总有需要自己去开发的地方。
这里就以开发MQTT组件的URC为例,URC的接收处理源文件为 ril_urc.c。
有一个结构体数组,存储了对应URC的特征字符和对应的处理函数
//片段1
/****************************************************/
/* Definitions for AT URCs and the handler */
/****************************************************/
const static ST_URC_HDLENTRY m_AtURCHdlEntry[] = {
{"rn+QIURC:",OnURCHandler_QIURC_DATA},
{"rn+QLWDATARECV:",OnURCHandler_LwM2M_RECV_DATA},
{"rn+QLWOBSERVE:",OnURCHandler_LwM2M_OBSERVE},
{"rn+MIPLEVENT:",OnURCHandler_ONENET_EVENT},
{"rn+MIPLOBSERVE:",OnURCHandler_ONENET_OBSERVER},
{"rn+MIPLDISCOVER:",OnURCHandler_ONENET_DISCOVER},
{"rn+MIPLWRITE:",OnURCHandler_ONENET_WRITE},
{"rn+MIPLREAD:",OnURCHandler_ONENET_READ},
{"rn+MIPLEXECUTE:",OnURCHandler_ONENET_EXECUTE},
{"rn+QIND: "FOTA"",OnURCHandler_DFOTA_Hander},
{"rn+QMTRECV:",OnURCHandler_QMTRECV_Hander},
{"rn+QMTOPEN:",OnURCHandler_QMTOPEN_Hander},
{"rn+QMTCONN:",OnURCHandler_QMTCONNECT_Hander},
{"rn+QMTSUB:",OnURCHandler_QMTSUB_Hander},
{"rn+QMTSTAT:",OnURCHandler_QMTSTAT_Hander},
};
//片段2
/*****************************************************************
* Function: OnURCHandler
*
* Description:
* This function is the entrance for Unsolicited Result Code (URC) Handler.
*
* Parameters:
* strURC:
* [IN] a URC string terminated by '