QuecPython——执行Python代码的运行环境,是一种全新的物联网开发方式。Quec取自Quectel,QuecPython的开发是基于Quectel的物联网模组。Python(中文名蟒蛇,俗名爬虫,别名胶水语言)是一种跨平台的计算机程序设计语言,入门容易、编写简单快捷、调试方便、开发效率高,已成为当下最受欢迎的程序设计语言之一。
QuecPython也可以说是移远通信为客户更加便捷地在物联网模组上做二次开发而量身打造的嵌入式操作系统。!
QuecPython开源三步曲:QPYcom、DTU 固件+工具、SDK!
我们一直在默默努力精进,虽然QPYcom已经日臻完美,但!是!我们还在憋大招呢——QuecPython VSCode Plugin很快就能和大家见面啦!再说DTU固件+工具,我们不仅开源了DTU的代码,还开源了DTU上位机配置工具,开发者可以很轻松地就能实现一个可量产、可商用的DTU产品啦。
那么,接下来,敲黑板,划重点,注意看,QuecPython最重要、最耀眼、最吸睛、最瞩目、万众期盼已久的——QuecPyton SDK开源啦!
概述
QuecPython开源SDK(软件开发工具包)的命名为HeliosSDK,采用了整套的编译工具链以及组件,用户通过HeliosSDK便可以修改现有开源QuecPython的组件代码、新增自己需要的组件以及编译固件。
QuecPythonSDK开源后,开发者需安装git并cloneSDK,再安装HeliosSDK的编译工具链:https://gitee.com/QuecPython/toolchain。
完成上述两步之后即可开始开源SDK的体验之旅了,详细的文档和使用说明为您护航。
新的开源SDK架构带来了全新的编译方式,新的架构和编译方式有如下优势:
用户只需要将自己需要的组件参与编译,不需要的组件不会被编译,做到了组件随应用需求自动裁剪。
SDK可将任意多个可能需要的组件全部添加进来,为使用带来了良好体验,模组可以支持任何功能,而不受存储空间限制。
不需要的功能可在编译时进行筛选和剔除,再也不用担心模组空间不够用。
可自己定制化开发需要的功能和模块。
注:开源内容详见下文SDK目录结构。
我们将持续对HeliosSDK内容进行更新,修复现有bug并保持最新的功能迭代,并提供使用说明和技术文档进行技术支持(仅限于文档,FAE不提供编译固件以外的任何支持)。
Helios SDK概述
HeliosSDK(以下简称:SDK、Helios、古希腊太阳神)以组件化方式组织,包括系统级组件、服务级组件、外设组件及第三方组件。
系统级组件主要包括os、bsp、文件系统、各类网络协议栈、OTA、日志输出等功能。
服务级组件目前包括QuecPython功能。
外设组件目前包括camera、NorFlash、LCD等功能。
第三方组件目前包括lvgl、tts等功能。
各组件之间的依赖关系,通过在组件内编译管理的脚本中指定依赖路径即可,下文详述。
同时各组件功能是否开启,可通过menuconfig进行配置,方便功能裁剪。
本篇入门指南仅介绍如拉取代码和编译一个简单的sample案例,想要编译QuecPython的固件和修改、新增组件请拉取代码请查看HeliosSDK/doc/html目录下入门、进阶以高级文档。
代码拉取
在命令行中按照顺序分别执行以下命令,即可拉取完整的SDK代码。
git clone https://gitee.com/QuecPython/HeliosSDK.git
cd HeliosSDK
git submodule init
git submodule update
SDK目录结构
下图是SDK目录结构,图中不同颜色分别表示以下含义:
紫色:git仓库相关文件和目录
黄色:SDK固有的文件夹
绿色:SDK中的脚本文件
蓝色:SDK中的源代码文件
粉色:readme.md
灰色:编译生成的文件夹,可被清除
黑色:注释信息
(点击图片可查看大图)
应用代码编写
理论上,可在SDK目录下任意位置新建应用代码文件。为了规范起见,建议在SDK的根目录下新建应用代码文件夹。功能的单元测试代码,建议放置于功能所在目录下的test或demo文件夹。SDK建议使用微软的VSCode打开,移远后续将推出针对VSCode的易用插件,敬请期待。
以SDK根目录下的sample为例:
新建应用代码文件夹:在SDK根目录下新建sample文件夹。
创建应用代码源文件:进入sample文件夹,新建文件sample.c。
编写应用代码:打开sample.c。
包含头文件
sample.c仅需要包含最基本的头文件,即helios.h、helios_debug.h、helios_os.h。
helios.h目前定义了添加自启动项的接口。
helios_debug.h定义了日志打印的相关接口。
helios_os.h定义了多线程相关接口。
包含头文件代码如下:
include "helios.h"
include "helios_debug.h"
include"helios_os.h
自定义日志打印接口
日志打印接口说明:
helios_debug.h提供了如下日志打印相关的接口:voidHelios_Debug_Enable(void):使能日志打印功能。voidHelios_Debug_Disable(void):关闭日志打印功能。helios_debug(fmt,...):通用日志输出接口。
custom_log(tag,fmt, ...):可自定义标签的日志输出接口,标签会连同日志一起输出。
默认使能日志打印功能。
在sample.c中定义自定义标签的日志输出接口,标签名称为APP,代码如下:
define app_debug(fmt, ...) custom_log(APP, fmt, ##__VA_ARGS__) //custom_log在helios_debug.h中定义
实现应用功能
在sample.c中实现每一秒钟循环打印一次日志的功能,代码如下:
static void AppSample(void *argv)
{
UNUSED(argv); // 在helios.h中定义
while (1)
{
app_debug("app sample running ..."); // 自定义的带标签的日志输出
Helios_sleep(1); // 在helios_os.h中定义
}
}
添加为自启动项
编写完应用功能代码后,调用以下接口,会在系统启动完成后,自动启动应用功能:
application_init(AppSample,"AppSample",2,0);//在helios.h中定义
application_init接口用法说明
定义:application_init(entry,name, stack_size_kib, startup_prio)
参数:entry- 应用代码入口地址
参数:name- 应用名称
参数:stack_size_kib- 应用线程栈大小,以KB(K字节)为单位
参数:startup_prio- 启动优先级,0表示最高优先级
编写编译管控脚本。
新建mk脚本文件
在应用代码根目录下(本例为sample目录下)新建和应用代码根目录同名的.mk文件,本例新建文件为sample.mk。
编写mk脚本文件
编译管控脚本的详细写法可参考SDK根目录下的README.MD,此处仅针对sample.c做阐述。
NAME:=SAMPLE #组件名称,建议和组件根目录名称一致,全部大写
$(NAME)_SRCS:=sample.c#添加需要编译的源码的相对路径(相对于组件代码根目录,此处相对于sample目录)
$(NAME)_INCS:=.#仅组件内部可引用的头文件相对路径(相对于组件代码根目录,此处相对于sample目录,其实sample下无头文件,此行可删除)
$(NAME)_COMPONENTS:=#当前组件依赖的其他组件相对路径(相对于SDK根目录,置空时可删除此行)
编译和烧录
1. 查看编译命令用法。
在SDK目录下启动的命令行中,键入helios回车,查看helios命令的用法。
输出结果如下:
Usage: helios <action> [<app>] [<at>] [<fw_name>]
These are common commands used in various situations:
menuconfig - Do the project configuration
make <app> [[<at>] [<fw_name>]] - Do the compilation work
private_clean - Clean the app private target
clean - Clean the output directory
help - Show this help page
编译命令的详细用法参考SDK根目录下的README.MD。
2. 编译固件。
以EC600SCN_LB模组为例,在命令行中键入以下命令,并回车:
helios makesample @EC600SCN_LB EC600SCNLBR01A01M08
helios:触发编译流程。
make:表示编译固件。
sample:应用入口地址(相对于SDK根目录)。
@EC600SCN_LB:指定目标模块型号,可缺省,缺省值为@EC200UCN_AA。
EC600SCNLBR01A01M08:固件版本号名称,可缺省,以指定的应用代码的根目录名称作为缺省值。
如需清除编译目标,在命令行中键入以下命令,并回车:
helios clean
3. 查看编译目标。
生成的固件包存储于SDK根目录下的output/release文件夹中,如下图所示。
4、烧录固件。
功能测试
1、连接PC和模组。
用串口线缆将模组Debug串口和PC连接。
2、查看PC端的Debug串口号。
打开PC设备管理器,如下图,本实验的Debug串口号为COM20。
3、打开PC端的串口调试工具。
本文以SecureCRT为例,点击下图的快速连接按钮,弹出QuickConnect窗口。
点击Port选项的下拉菜单,选中COM20,其余参数严格遵照图中的配置即可。
点击右下角Connect按钮即可打开串口。
4、启动模租程序。
复位模组,启动程序。
5、查看模组运行日志
在SecureCRT的串口数据接收区查看运行日志,如下图:
上图可看出,日志输出的格式包含了自定义标签APP、输出日志的函数名AppSample、输出日志的文件行数L29,及日志内容appsample running ...
至此,我们编译的程序已经顺利跑起来了。
怎么样,够给力吧?后续,我们将更详细地讲述如何使用,敬请期待哦~