TencentOS-tiny/doc/32.TencentOS_Tiny_BearPi_Mi...

27 KiB
Raw Blame History

TencentOS Tiny 小熊派 MicroPython 快速入门指南

Revision Date Description
1.0 2022-10-12 文档初版

一。MicroPython 简介

MicroPython 是 Python 3 语言的精简实现,包括 Python 标准库的一个子集能够在微控制器和受限环境中运行。MicroPython 可在不同平台上运行,为开发者提供快捷的嵌入式开发方式。

二。MicroPython 开发环境准备

2.1 MDK 软件介绍

MDK 即 RealView MDK 或 MDK-ARMMicrocontroller Development kit是 ARM 公司收购 Keil 公司以后,基于 uVision 界面推出的针对 ARM7、ARM9、Cortex-M0、Cortex-M1、Cortex-M2、Cortex-M3、Cortex-R4 等 ARM 处理器的嵌入式软件开发工具。MDK-ARM 集成了业内最领先的技术,包括 uVision4 集成开发环境与 RealView 编译器 RVCT。支持 ARM7、ARM9 和最新的 Cortex-M3/M1/M0 核处理器,自动配置启动代码,集成 Flash 烧写模块,强大的 Simulation 设备模拟,性能分析等功能,与 ARM 之前的工具包 ADS 等相比RealView 编译器的最新版本可将性能改善超过 20%。 Keil 公司开发的 ARM 开发工具 MDK是用来开发基于 ARM 核的系列微控制器的嵌入式应用程序。它适合不同层次的开发者使用包括专业的应用程序开发工程师和嵌入式软件开发的入门者。MDK 包含了工业标准的 Keil C 编译器、宏汇编器、调试器、实时内核等组件,支持所有基于 ARM 的设备,能帮助工程师按照计划完成项目。

2.2 MDK 安装

登录 MDK 官网,下载 MDK5 软件,下载地址: http://www2.keil.com/mdk5 或者 https://www.keil.com/download/product/ 下载的版本最好在 5.24 以上,本开发教程以 5.24 版本为例,双击 MDK524 应用程序文件,点击 next>>。

mdk01

勾选“I agree to ...”,即是同意一些安装协议。点击 Next>>。

mdk02

选择安装路径,可以默认也可以安装在我们自己建立的文件夹下。点击 Next>>。

mdk03

这里填写的是一些用户信息,填写完整后,继续点击 Next>>。

mdk04

然后等待安装完成即可。

mdk05

安装完成,点击 Finish。

mdk06

然后会跳出来这个界面,这个我们后面再讲,先点 OK把弹框都叉掉。

mdk07

激活 MDK导入 License激活 MDK 后便可使用了。

mdk08

mdk09

特别提示:一定要输入 License 激活 MDK 软件,建议购买正版 License。

2.3 MDK 安装 Pack

安装完 MDK 后,我们需要安装开发套件中单片机型号对应的 Pack。

安装方式一 登录官网:http://www.keil.com/dd2/pack/ 下载 Keil.STM32L4xx_DFP.2.0.0.pack 后安装,如下图

mdk_pack01

安装方式二 MDK 软件上在线安装

打开软件,在导航栏打开 Pack 安装界面,然后选择 ok 选项。

mdk_pack02

mdk_pack03

进入在线安装界面,选择 STM32L4XX Pack点击 Install 进行安装。

mdk_pack04

至此,我们开发板的单片机程序开发环境已经搭建完毕,重启 MDK 软件就可以使用了。

前面讲了开发板单片机程序的开发环境的搭建,但是为了将程序烧录到开发板中我们还需要使用仿真器。我们这套开发板选用 ST 公司的 ST-Link V2 仿真器进行开发板程序的烧写和仿真,下面介绍 ST-Link 驱动的安装及环境搭建。 在 ST 官网下载 ST-Link 驱动, https://www.st.com/content/st_com/zh/products/development-tools/software-development-tools/stm32-software-development-tools/stm32-utilities/stsw-link009.html

(驱动有 2 种32 位电脑系统安装“dpinst_x86”、64 位电脑系统安装“dpinst_amd64”

development_env_stlink_driver_file

运行对应的驱动,安装 ST-Link V2 驱动程序。安装路径尽量保持默认路径。

development_env_stlink_driver_install

安装完成后,将小熊派开发板通过 USB 接口连入电脑(开发板上自带 ST-Link。打开“设备管理器”。若看到如下图所示表示驱动安装成功。

development_env_stlink_driver_ok

这里提醒 2 点: 1 各种 Windows 版本设备名称和所在设备管理器栏目可能不一样,例如 Win10 插上 STLINK 后显示的是 STM32 STLINK。 2 如果设备名称旁边显示的是黄色的叹号,请直接点击设备名称,然后在弹出的界面点击更新设备驱动 至此ST-Link 驱动已经安装完成。接下来大家只需要在 MDK 工程里面配置一下 ST-Link 即可。

2.5 CH340 串口驱动安装

互联网搜索下载 CH340 串口芯片的驱动

安装方法:打开驱动安装程序点击安装即可。

ch340_file

ch340_driver_install

注:若安装失败,请先点击卸载,后点击安装。

2.6 安装串行终端软件

2.6.1 安装 mpremote [可选]

MicroPython 官方提供了使用 Python 实现的命令行工具 mpremote。在安装了 Python 的情况下mpremote 可以通过以下命令安装:

pip install mpremote

USB-TTL 模块连接到 PC 上后,可以在”设备管理器 - 端口COM 和 LPT“中看到对应的端口名

basic_demo_device

图中显示的端口名为 COM14在命令行中输入下列命令可以快速连接到 COM14 的串口设备上。

mpremote connect COM14

连接完成后,就可以在串行终端上进行操作了。

mpremote 还针对 MicroPython 提供了其他便捷的功能,详情可以参考 MicroPython 官方文档:https://docs.micropython.org/en/latest/reference/mpremote.html

2.6.2 安装 Tabby 或其他串行终端软件 [可选]

Tabby 是一个开源的、高度可配置的现代化终端,集成了 SSH 和串行终端等功能。 在 Tabby 的 Github 仓库中可以下载最新版本的安装包,仓库地址为:https://github.com/Eugeny/tabby/releases/latest

安装完成后,打开 Tabby Terminal点击“Profiles&connections”按钮

tabby1

在弹出的菜单中筛选“Serial:”开头的设备,找到需要的设备进行连接:

tabby2

选择所需的波特率,常见波特率有 115200 和 9600

tabby3

连接完成后就可以在串行终端上进行操作了。

三。MicroPython 基础 demo

3.1 基础 demo 工程

3.1.1 打开 TencentOS Tiny 提供的 micropython_basic_demo 工程

TencentOS Tiny 官方开源仓库下载源码,地址为: https://github.com/Tencent/TencentOS-tiny

进入 <TencentOS-tiny/board/BearPi_STM32L431RC/KEIL/micropython_basic_demo> 目录,打开 BearPi_STM32L31RC.uvprojx 工程

basic_demo_open

3.1.2 编译 micropython_basic_demo 工程

打开工程后,在左侧的工程文件导航页面打开 examples 目录,可以看到 micropython_demo.c 源码,这里主要创建了一个 MicroPython 的任务,任务中通过调用 mp_main 函数启动 MicroPython 的主要功能。开发者可以按照下图指示,点击编译按钮编译整个工程,如图:

basic_demo_compile

3.1.3 下载运行

使用 USB 线将开发板连接到 PC配置下载环境点击下图按钮进入工程配置界面

basic_demo_config1

按照下图提示配置下载器类型和 Flash 下载算法:

basic_demo_config2

basic_demo_config3

编译完成后点击如图所示“LOAD”按钮下载程序即可。

basic_demo_download

3.1.4 通过终端串口软件连接到 MicroPython REPL

MicroPython REPL 是 MicroPython 的交互式解释器,可以实现 MicroPython 语句的输入执行和输出,关于 REPL 的详细用法可以参考官方文档了解。官方文档链接为:https://docs.micropython.org/en/latest/reference/repl.html

首先将开发板与 USB-TTL 模块相连micropython_basic_demo 工程默认将 UART2 用于 REPL 的输入输出,波特率为 115200。

basic_demo_attach_uart

然后将 USB-TTL 模块连接到 PC 上,查看设备管理器找到正确的串行端口。然后用终端串口软件连接到对应的端口,就可以使用 MicroPython 了。关于串口终端软件的安装和使用可以参考第 2.6 节“安装串行终端软件”。

在终端串口软件中输入回车,如果能看到 Python 的 REPL 提示符“>>>”,证明已经成功连接到 MicroPython REPL 上了。

下图展示了在 PowerShell 中使用 mpremote 连接 MicroPython REPL 的现象:

basic_demo_repl

3.2 基础 demo 模块介绍

3.2.1 help('modules') 命令

在 REPL 中执行 help('modules') 命令,可以看到当前 MicroPython 固件中包含哪些模块。基础 demo 中包含的模块较少,如下图所示。

basic_demo_modules

如果需要特定的内置模块,可以在第 3.4 节“在基础 demo 工程上进行扩展”中了解如何将需要的 MicroPython 内置模块加入到基础 demo 工程中。

3.2.2 模块介绍

模块名称 模块简介
uarray 数组,可以针对特定类型创建数组,并对数组进行添加或扩展等操作
builtins 内置的函数和异常
gc 控制垃圾回收器,可以启动或禁用自动垃圾回收,也可以进行手动的垃圾回收
math 数学函数(暂时不提供 expm1, log2, log10, cosh, sinh, tanh, acosh, asinh, atanh, erf, erfc, gamma 和 lgamma 等特殊函数)
ustruct 打包和解包,可以将 Python 中的 Bytes 对象作为 C 语言的结构体进行处理
usys 系统相关函数
utime 与时间相关的函数(目前不提供和日历时间相关的功能)
_thread 提供多线程支持
umachine 与硬件相关的函数
micropython 访问和控制 MicroPython 的内部实现

上述模块中部分模块名以字母u开头这表明他们是 MicroPython 可以被替换的内部模块。这些模块在使用时开头的u可以被省略比如import machine 等同于 import umachine

以下划线_开头的模块表示该模块还在实验中在使用时开头的下划线不能被省略。

以上模块都可以在官方文档中找到详细使用方式,官方文档链接:https://docs.micropython.org/en/latest/library/index.html

3.3 运行示例脚本

3.3.1 通过 REPL 粘贴模式快捷运行脚本

连接到 MicroPython 的 REPL 后,可以输入 <Ctrl-E> 进入粘贴模式。在粘贴模式下REPL 会关闭自动缩进功能,也允许输入空行,方便粘贴写好的脚本。

脚本粘贴完成后,输入 <Ctrl-D> 可以退出粘贴模式,并开始执行脚本。

例如:将 pin.py 脚本的内容通过粘贴模式输入到 REPL 中如下图所示。

basic_demo_repl_paste_mode

3.3.2 通过 mpremote 快捷运行脚本

mpremote 是 MicroPython 官方提供的命令行工具,除了连接串口 REPL 以外,还可以实现快捷运行脚本的功能。

在 PC 上运行以下命令可以快速运行脚本:

mpremote connect <device> run <file>

<device> 是 PC 上连接到 REPL 的串行端口名称,<file> 是待执行的脚本文件的路径。

例如:使用 mpremote 在 COM14 端口的 REPL 运行 pin.py 脚本的命令如下。

mpremote connect COM14 run ./pin.py

3.3.3 示例脚本运行现象

进入 <TencentOS-tiny/examples/micropython_demo/scripts> 目录可以看到 TencentOS Tiny 提供的四个示例脚本:

basic_demo_scripts

MicroPython 基础 demo 可以运行两个示例脚本,分别是 pin.py 和 thread.py

  • pin.py 脚本展示了 umachine 模块和 utime 模块的部分用法。运行脚本后LED 每过 0.5s 亮灭状态变化一次;按下按键 1打印一行文本“key1 is pressed”释放按键 1打印一行文本“key1 is released”按下按键 2LED 不再闪烁,脚本退出。
  • thread.py 脚本展示了 _thread 模块的使用方法。脚本会创建四个线程,序号分别为 0~3每个线程会在打印自己的序号后退出。

3.4 在基础 demo 工程上进行扩展

基础 demo 工程只包含了有限的 MicroPython 的功能,可以通过修改工程目录下的 board/mpconfigboard.h 文件对 MicroPython 的功能进行扩展,文件中用于功能扩展的宏定义及其描述如下表。表格中还给出了该功能依赖的文件/TOS 组件,可以根据需要在工程中添加。

宏定义 描述 依赖的文件/组件
MP_USING_QSPI_FLASH 使用外部 QSPI-Flash 扩展内部 ROM 空间 开发板目录/BSP/Hardware/W25Qxx-QSPI/w25qxx.c
MP_USING_VFS 启用 uos 模块,启用 VFS 功能 tos_vfs 组件,
extmod/vfs.c
extmod/vfs_reader.c
extmod/moduos.c
MP_USING_MACHINE_SPI 在 umachine 模块中启用 SPI 功能 extmod/machine_spi.c
drivers/bus/softspi.c
MP_USING_MACHINE_I2C 在 umachine 模块中启用 I2C 功能 extmod/machine_i2c.c
MP_USING_NETWORK 启用 network 模块 socket_wrapper 组件,
sal_wrapper 组件,
extmod/modnetwork.c
extmod/modusocket.c
shared/netutils/netutils.c
MP_USING_USELECT 启用 uselect 模块 extmod/moduselect.c
以下模块在扩展 demo 中会自动启用 ----- -----
MP_USING_CMATH 启用 cmath 模块 -
MP_USING_UASYNCIO 启用 uasyncio 模块 extmod/moduasyncio.c
MP_USING_UCTYPES 启用 uctypes 模块 extmod/moductypes.c
MP_USING_UZLIBS 启用 uzlibs 模块 extmod/moduzlibs.c
MP_USING_UJSON 启用 ujson 模块 extmod/modujson.c
MP_USING_URE 启用 ure 模块 extmod/modure.c
MP_USING_HEAPQ 启用 uheapq 模块 extmod/moduheapq.c
MP_USING_UHASHLIB 启用 uhashlib 模块 extmod/moduhashlib.c
MP_USING_UBINASCII 启用 ubinascii 模块 extmod/modubinascii.c
MP_USING_URANDOM 启用 urandom 模块 extmod/modurandom.c
MP_USING_FRAMEBUF 启用 framebuf 模块 extmod/modframebuf.c

四。MicroPython 扩展 demo

4.1 扩展 demo 工程

4.1.1 打开工程前的准备

由于 MicroPython 对 ROM 的需求量较大,为了能够在 ROM 容量有限的小熊派开发板上运行更加完整的 MicroPython 功能,需要利用 Flash 下载算法对 ROM 空间进行扩展。

工程目录下包含了小熊派开发板的外部 Flash 下载算法 BearPi_W25Q64JV.FLM 文件:

extra_demo_flm

将 BearPi_W25Q64JV 文件拷贝到 <MDK 软件目录>/ARM/Flash 目录下:

extra_demo_flm_copy

进入 <TencentOS-tiny/board/BearPi_STM32L431RC/KEIL/micropython_extra_demo> 目录,打开 BearPi_STM32L31RC.uvprojx 工程,按照下图指示进入下载选项配置界面:

extra_demo_config1

basic_demo_config2

进入“Flash Download”页面检查“Programming Algorithm”区域和“RAM for Algorithm”区域中的选项是否和下图相同

extra_demo_config3

如果不同,需要检查是否已经将 BearPi_W25Q64JV.FLM 文件移动到指定目录,重启 MDK。也可以手动进行修改。

4.1.2 编译,下载和运行

扩展 demo 工程是在基础 demo 工程的基础上扩展部分功能实现的,其编译、下载以及运行步骤基本与基础 demo 工程相同,可以参考第 3.1 节“基础 demo 工程”中的相关步骤进行操作。

注意 1扩展 demo 涉及对外部 Flash 的写入,需要的时间较长,请耐心等待。

注意 2扩展 demo 中由于使用了文件系统,因此需要先按照下图,将一张 TF 卡插入到开发板的卡槽中,否则不能正常运行。

extra_demo_tf

4.2 扩展 demo 模块介绍

4.2.1 help('modules') 命令

在 REPL 中执行 help('modules') 命令,可以看到当前 MicroPython 固件中包含哪些模块。扩展 demo 中包含的模块较多,如下图所示。

extra_demo_modules

4.2.2 模块介绍

相比于基础 demo扩展 demo 增加了以下模块,基础 demo 中已经包含的模块可以在第 3.2 节“基础 demo 模块介绍”找到介绍:

模块名称 模块简介
ubinascii 实现二进制和 ASCII 格式编码的转换,目前可以完成二进制和十六进制字符串的转换以及二进制和 Base64 编码数据的转换
cmath 提供复数运算,三角函数运算以及常数 e 和 pi
ucollections 容器,包含双端队列、命名元组和有序字典
uerrno 系统错误代码,提供从 OSError 中获取详细错误代码的功能
uhashlib 哈希算法,提供 sha256 算法
uheapq 堆队列算法,提供最小堆队列算法
uio 输入/输出流,提供流对象和辅助函数的支持
ujson JSON 编码和解码功能
uos 基本“操作系统”服务(目前基本只包含了操作文件系统的功能)
urandom 产生随机数
ure 简单的正则表达式
uselect 在一组流中等待事件
usocket socket 功能目前不提供服务端的函数bind、listen、accept 等)
_uasyncio 异步 I/O 调度功能
uzlib 提供 zlib 解压功能,可以将使用 DEFLATE 算法压缩过的二进制数据解压出来
framebuf 帧缓冲区操作
network 网络配置,提供网络接口的配置(目前只支持把 ESP8266 配置为网络接口)
uctypes 按照 C 语言的方式构造结构化的二进制数据

以上模块都可以在官方文档中找到详细使用方式,官方文档链接:https://docs.micropython.org/en/latest/library/index.html

4.3 运行示例脚本

4.3.1 通过文件系统自动运行脚本

除了第 3.3 节“运行示例脚本”中提到的两种快捷运行脚本的方式,扩展 demo 还有第三种运行脚本的方式。由于扩展 demo 中引入了文件系统,因此可以在文件系统中存储启动时自动运行的脚本。

MicroPython 在启动时会依次检查文件系统根目录下是否存在名为“boot.py”和“main.py”的脚本并依次运行。

例如:通过将 pin.py 脚本移动到 TF 卡根目录中,并改名为 main.py可以实现启动时自动闪灯的效果。

extra_demo_main_py

4.3.2 示例脚本运行现象

MicroPython 扩展 demo 可以运行四个示例脚本,除了第 3.3 节“运行示例脚本”中的 pin.py 和 thread.py 脚本外,还可以运行 os.py 和 tcp.py 脚本:

  • os.py 脚本测试了 uos 模块中操作文件和目录的主要功能,脚本的运行后会输出以下内容:

    ---------------test mkdir---------------
    ['System Volume Information']
    ['test_dir', 'System Volume Information']
    ---------------test write---------------
    ['test_file']
    ---------------test read----------------
    ['Hello TencentOS-tiny\n', 'Hello MicroPython\n']
    ----------test with statement-----------
    Hello TencentOS-tiny
    
    Hello MicroPython
    
    --------------test rename---------------
    ['System Volume Information', 'test_dir2']
    ['test_file']
    --------------test unlink---------------
    []
    ['System Volume Information']
    
  • tcp.py 脚本展示了 network 模块和 usocket 模块的基本用法

    注意 1该脚本需要使用 esp8266 模块进行网络通信,因此在运行脚本前,需按照下图所示,安装上 esp8266 模块。

    extra_demo_esp8266

    注意 2脚本中的 WIFI_SSID、WIFI_PASSWORD 以及 SERVER_HOST、SERVER_PORT 需要根据实际 WiFi 和服务器情况进行修改。

    注意 3esp8266 连接 WiFi 时间可能较长,请耐心等待。

    脚本运行的结果与连接到的 TCP 服务器有关,如果连接到 TCP 回声服务器,会输出以下内容:

    esp8266 init done
    esp8266 connect done
    socket init done
    socket connect done
    send len:18
    recv data:b'This is TCP test!\n'
    send len:18
    recv data:b'This is TCP test!\n'
    send len:18
    recv data:b'This is TCP test!\n'
    send len:18
    recv data:b'This is TCP test!\n'
    send len:18
    recv data:b'This is TCP test!\n'