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 GB | 600 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开发板上做以下操作
外设操作(官方) | GPIO | I2C | SPI | UART |
功能(官方) | 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
欢迎各位同学联系我们进行技术相关的探讨,也可以在评论区进行提问,大家一起进步吧!