在Zephyr玩转MicroPython【入门篇】

MicroPython这几年被越来越多的大佬们用在形形色色的嵌入式项目上,Zephyr RTOS本身支持MicroPython的使用,分成入门和进阶两篇来讲讲如何在Zephyr上玩转MicroPython。

本次讲解使用的硬件平台是聆思的CSK6芯片,配套有支持Zephyr RTOS的SDK。

MicroPython是什么

MicroPython是对Python 3特性进行了精简且高效化的一种实现,包括 Python 标准库的一小部分,并且优化到可在单片机和资源有限的环境中运行。其中包含了 Python 中几乎完整的高级语言特性,例如交互式提示、任意精度整数、闭包、列表理解、 生成器、异常处理等。同时,它又可以精简到只需 256K 的 flash 和 16K 的RAM 即可运行。跟C语言相比,MicroPython也有自己的优势,所以越来越多的极客厂商开始向大众介绍如何在嵌入式设备上使用micropython来实现产品案例例如一些智能刷卡系统、体温检测、声控灯等等都可以用micropython来实现完整的产品案例。

C语言MicroPython
运行方式编译成二进制文件作为脚本直接运行
异步编程不支持支持
编码体验关注点多,相对代码量多上手快,代码量少

环境(SDK)说明

现在的开源社区中主要流行的micropython有两个版本,首先是官方的micropython,可直接在Zephyr上运行,并且根据在Zephyr上封装的标准api适配了GPIO等简单的硬件操作。另一个版本就是由LGVL维护的micropython版本,它在保留了官方的原有特性的前提下适配了LVGL的接口,我们可以使用这个接口实现LVGL的开发,比C语言实现LVGL开发效率更高。

但由于这两个版本都要考虑更全面的适配,所以项目非常庞大,因此本次使用的是聆思裁剪后的SDK,更适合在CSK6芯片的硬件上进行开发。聆思MicroPython SDK对比官方的MircoPython有如下优点。

  • 在满足完整需求的前提下,将SDK资源占用最小化
  • 适配官方未支持的zephyr特性、csk芯片功能(例如wifi联网等)
官方 MicroPython聆思 MicroPython
对zephyr适配作为app作为module
体积6.x GB600 MB
LVGL适配不支持支持

MicroPython的软件流程与原理

micropython在编译的过程中去尝试构建这个python的解释器,收集要转移成python模块的c代码,然后使这些c 代码在micropython中也可以直接调用,然后把这些东西编译成lipmicropython.a的产物,通过静态链接库的方式作为依赖的存在。

当固件运行起来之后启动这个python虚拟机,然后加载这个文件系统上的这个main.py做运行。脚本运行完成后,就会将这个串口终端来作为这个python的命令行终端。

实操与讲解

开发环境部署

  • Windows系统需要先安装环境,命令行执行:lisa zep use-env csk6-mpy
  • Linux 与 macOS 可忽略此步骤

注意:使用lisa zep命令需要先安装环境工具,可以参考聆思CSK6环境安装进行部署。

拉取代码

lisa zep create --from-git https://cloud.listenai.com/zephyr/applications/app_mpy_sample.git

拉取后的目录结构如下:

怎么跟MicroPython固件进行通讯

需要先构建这个文件系统的镜像,然后把镜像烧录到对应的flash地址,操作完成后启动固件才能访问到文件系统。烧录固件需要用到lisa命令行工具,新同学可以参考聆思文档中心-环境搭建来获得编译环境。跟MicroPython固件进行通讯需要用到mpremote,这是MicroPython官方维护的用于与 MicroPython 固件通讯的串口终端工具,下载地址:https://docs.micropython.org/en/latest/reference/mpremote.html

编译烧录

业务固件编译/烧录

进入sample目录进行编译和烧录

默认为 .\app_mpy_sample,目录名如有更改,请更改下命令中的路径。

cd .\app_mpy_sample

lisa zep build -b csk6011a_c3_nano

lisa zep flash --runner pyocd

文件系统编译/烧录

如下图所示,resource目录下的文件系统内容是构建成镜像烧录到开发板中,

lfs1代表是.overlay里设备树对应的自动挂载flash分区的命名,

reg=<0x265000 0x80000> 指创建一个512KB的文件系统分区来作为分区位置filesystem_part:partition@26500 代表分区的信息

partition = <filesystem_part> 选中filesystem_part挂载到 /flash (由mount-point设定)

mount-point = “/flash” 设置挂载点,固件启动后可以通过该挂载点访问文件系统

构建文件系统:

lisa zep fs:build

烧录文件系统:

lisa zep exec pyocd flash -e sector -a 0x18000000 -t csk6001 --base-address=0x18265000 build/resource/lfs1.bin --frequency=30000000

连接MicroPython镜像

使用mpremote进行连接, 下载地址:https://docs.micropython.org/en/latest/reference/mpremote.html

或命令行安装:pip install mpremote

连接MicroPython:

windows环境:mpremote

Linux环境:mpremote c onnect /dev/[定义的地址名]

连接成功后按下开发板复位按钮,如下图所示,可以输出hello world的信息,也可以直接在终端就行python的操作。

MicroPython在Zephyr上可以做哪些操作

使用MicroPython可以在CSK6011-NanoKit开发板上做以下操作

外设操作(官方)GPIOI2CSPIUART
功能(官方)Flash 读写DiskAccess存储访问zsensor访问传感器socket
csk.wifi_mgr(聆思提供)适配 WiFi Manager 能力,配合 CSK 网络模块联网
zephyr.net_mgmt(聆思提供)适配 zephyr DHCPv4 ,用作联网后的 DHCP 分配

GPIO 演示

使用machine.Pin类点亮下图CSK6011-NanoKit开发板上标记的LED绿灯,可使用以下代码直接控制亮灭的操作。

from machine import Pin
pin = Pin(("GPIO_B", 6), Pin.OUT)
pin.value(1)
pin.value(0)

GPIO基础命令及注释 

pin = Pin(("GPIO_1",21),Pin.IN)                    # create input pin on GPIO1
print(pin)                                         # print pin port and number

*********************************************************************************

pin.init(Pin.OUT,Pin.PULL_UP,value=1)        # reinitialize pin
pin.value(1)                                                    # set pin to high
pin.value(0)                                                    # set pin to low
pin.on()                                                            # set pin to high
pin.off()                                                          # set pin to low

************************************************************************************

pin = Pin(("GPIO_1",21),Pin.IN)                   # create input pin on GPIO1
pin = Pin(("GPIO_1",21),Pin.OUT,value=1)           # set pin high on creation
pin = Pin(("GPIO_1",21),Pin.IN,Pin.PULL_UP)        # enable internal pull-up resistor

**************************************************************************************

switch = Pin(("GPIO_2",6),Pin.IN)                        # create input pin for a switch
switch.irq(lambdat:print("SW2 changed"))         # enable an interrupt when switch

文件系统访问

继续使用前面编译烧录好的CSK6011-NanoKit开发板,读写文件Python示例如下:

视频讲解

为了提供更加详细的实操展示和讲解,也录了对应的讲解视频,感兴趣的伙伴可以看看,视频中将包含以下内容:

  • 什么是 MicroPython
  • MicroPython 与 C语言 相比有哪些差异
  • 如何在 Zephyr RTOS 上运行MicoPython
  • 搭建开发环境并使用MicroPython控制芯片外设

在Zephyr玩转MicroPython【入门篇】

其他学习资源

Zephyr系列相关分享 | CSDN
环境搭建 | 聆思文档中心
芯片介绍 | 聆思文档中心
支持简介 | 聆思文档中心
更多视频课程

关于聆思

聆思科技是一家专注提供智能终端系统级(SoC)芯片的高科技企业,目前推出的CSK6系AI芯片已适配Zephyr RTOS。

希望了解更多有关CSK6 AI芯片信息的伙伴也可以+V:listenai-csk 

欢迎各位同学联系我们进行技术相关的探讨,也可以在评论区进行提问,大家一起进步吧!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值