LoRa模块往往会内置相关的传感器产品,比如RAK7204是一个温湿度的LoRaWAN传感器产品,他就内置了多种环境传感器,可以采集温度、湿度、气压及室内空气质量参数。
不同的用户、不同的应用场景,可能会导致用户对于该节点的收发数据的实际需求并不相同。
通常作为一个嵌入式工程师开始去开发一款物联网产品,对于物联网模块的选择,通常有几种方式,包括串口AT命令,串口透传,如果希望获得更低的功耗和更优的成本,就可以选择使用模块内置的MCU做自己的应用程序。
但是,OpenMCU的方式需要模块供应商具备很强的SDK整合能力和良好的支持文档,比如瑞科慧联公司就具备多款LoRa模块允许用户进行二次开发,并且,还提供了多个经低功耗设计的二次开发应用实例,可以帮助用户实现更低的系统成本和更低的系统功耗。用户可以参考这些实例,并根据自己的实际需求来对这些实例略作修改,就可以实现自己的应用目的。
本文针对初次使用LoRaWAN模块产品并希望用OpenMCU方式做二次开发的开发者们,介绍了LoRa模块模块二次开发的具体步骤。
在物联网模块内部做二次开发有两种方式,通常的做法是集成一个可以做开发的SDK,根据SDK的一些配置接口去实现自己的应用程序,但是这个做法需要用户对于物联网模块内部的MCU的开发环境有一定的熟悉才可以实现高效的开发。瑞科慧联(RAK Wireless)提供一个新的方式帮助开发者实现利用内部的MCU做二次开发。瑞科慧联针对LoRaWAN的协议栈封装出来多种面向场景的API, 用户只需要了解API的用法,编写自己的应用程序,通过一个基于Web的在线编译平台得到自己的开发,这个在线编译器,相当于就是,开发者只需要编写具体的应用部分,然后将主程序,传上去之后,编译好了,平台输出一个可执行文件,即完成全部开发过程。
图1 以RUI方式进行OpenMCU二次开发的流程图
1、了解RUI的构成和RUI API的用途。
基于RUI开发的固件,由两部分组成:RUI SDK,以及Application,如本文图1所示。
其中,RUI SDK部分为RUI的内核,已经适配了RAK的LoRaWAN模块产品,同时向上提供一组统一的RUI API,供Application部分调用。
RUI API的用途和用法介绍,请参考RUI API手册(可以在瑞科慧联的官网上,公司官网->资源->文档中心,这样的方式可以获取到所有产品的手册)。
注:1) Application是开放源码的,用户可以对其进行二次开发,按照自己的应用逻辑进行修改,需要的底层功能支撑都有相应的RUI API可以调用。
2)RUI SDK部分是非开放源码的,它被放置于RUI在线编译器中,当用户完成Application部分的二次开发并使用RUI在线编译器进行编译时,RUI SDK会被自动加载到定制化固件中。
2、 对照RAK瑞科慧联在Github上的RUI产品开发实践代码,了解RUI API的用法。
RAK的LoRaWAN模块及衍生产品,其官方发布的固件所对应的Application代码,均可以在RAK的Github中找到。
图2是Github上的文件的示例:
图2 瑞科慧联发布在Github上的固件所对应的Application代码文件存放示例图
可以看到,这个代码仓是按照核心模块的型号来分目录的。我们只需要找到对应的核心模块目录,就可以看到基于该模块的一些产品实践代码了。
以LoRaWAN模块RAK811为例,如图3所示,当我们进入到“based on RAK811”目录后,可以看到一些基于RAK811模块的产品实践示例,这些代码展示了如何基于RAK811模块增加一些外设和传感器,通过这些示例代码可以让开发者更快了解如何通过RUI加载传感器:
图3 瑞科慧联在Github上的LoRaWAN模块RAK811的产品实践示例目录图
其中,
1) “app_5205”是LoRaWAN追踪器模块RAK5205的官方固件所对应的Application源码,文件夹目录示例如图4所示。
图4 瑞科慧联在Github上的LoRaWAN追踪器模块RAK5205的产品实践示例目录图
LoRaWAN追踪器模块RAK5205是基于RAK811模块,增加了环境监测传感器(BME680)、三轴加速度传感器(LIS3DH)、以及GPS模块(Ublox MAX 7Q)。该目录中的代码示例展示了如何基于RAK811模块,通过I2C挂接其它sensor以及通过UART挂接GPS模块,并通过RUI API调用的方式完成定制化固件的开发。
2) “app_7204”是RAK7204的官方固件所对应的Application源码,包括RAK7204的传感器驱动、AT命令实现、应用逻辑处理等,都在这里(如图5所示),这里面使用了很多RUI API,用于实现相关功能。
图5 瑞科慧联在Github上的LoRa模块RAK7204的产品实践示例目录图
LoRa模块RAK7204是基于RAK811模块,增加了环境监测传感器(BME680)。因此,可以通过该产品实践代码了解到如何基于RAK811模块增加一款I2C的传感器,并通过RUI API的调用,快速完成定制化固件的开发。例如,图5中红色长方形圈出来的文件“app_7204.c”是应用逻辑处理的实现,如果要做应用逻辑的定制开发,可以重点对照这里面的代码来理解RUI API的实际用法。
3) “app_PT100_Digital_Pressure_Sensor”是基于RAK811模块,增加一款液压传感器PT100.
4) “app_RAK811”是RAK811模块的官方固件所对应的application代码,如果想要修改RAK811模块的工作逻辑和流程,可以基于该实例代码进行修改。
3、 从RAK Github上的RUI产品开发实践代码中挑选一个合适的实例代码,并在它的基础上进行修改,按照实际应用需求进行二次开发。
RAK Github上的这些产品开发实践代码已经实现了Application的主体部分,基于它进行代码修改和二次开发将事半功倍。
例如,图5所示的RAK7204示例代码对于节点收到的LoRa下行数据,只是将其通过串口打印出来,并未做处理,这一点可以从图6所示的”app_7204.c”文件中的代码看出:
图6 瑞科慧联在Github上的LoRa模块RAK7204的app_7204.c代码示例
如果你希望自己的定制化固件中对LoRa的下行数据进行处理,可以通过修改该函数的代码实现来达成目标。
4、 完成二次开发后,使用RUI的在线编译器进行编译,得到最终的定制化固件。
RUI是瑞科慧联深度优化的IoT端侧软件工具。完成Application部分的定制化开发后,就可以使用RUI的在线编译器进行编译了,编译的界面如图7以及图8所示。
图7 瑞科慧联RUI的使用界面之登录界面
图8 瑞科慧联RUI的使用界面之选择产品型号
如前所述,编译时,编译器会自动将Application和RUI SDK进行加载并编译都一起,输出最终的定制化固件。
RUI在线编译器的网址可以参见产品使用文档的说明。可以用邮箱自行注册并使用,详细的使用方法请参见RUI在线编译器的使用说明文档。
5、 将编译出的定制化固件烧写到RAK物联网终端产品中并使用
OK,经过前面的步骤,你已经编译得到了最终的定制化固件二进制文件了,现在可以将它烧写到产品中进行使用了。烧写固件的方法,在对应的产品使用文档中都有详述,此处不再复述,可到瑞科慧联的官网中文档中心(官网->资源->文档中心),查找对应的产品使用文档,按照产品使用文档中的操作步骤执行即可完成固件烧写。
三、总结
直接在内置OpenMCU的LoRa模块上进行二次开发,可以参考供应商提供的二次开发实例,这些二次开发实例往往是经过低功耗设计的,因此,用户不仅可以节约大量开发时间、无需另外购置部件,从而节约大量成本,还可以通过这些经过低功耗设计的二次开发应用实例,来实现更低的系统成本和更低的系统功耗。
评论
查看更多