本帖最后由 ICCCCC 于 2020-6-30 13:02 编辑
0x11:RT-Thread MicroPython
这阵子项目,没有更多时间来玩麻雀一号,但是咱们工程师一般都不会轻易放弃。折中选择了下,那就直接使用python,python之前只是看过,没具体去学习过,借此机会顺便学习下。下面是RT-Thread官方的介绍,在此借用宣传下:
## 主要特性
- MicroPython 是 Python 3 编程语言的一种精简而高效的实现,它包含 Python 标准库的一个子集,并被优化为在微控制器和受限环境中运行。
- RT-Thread MicroPython 可以运行在任何搭载了 RT-Thread 操作系统并且有一定资源的嵌入式平台上。
- MicroPython 可以运行在有一定资源的开发板上,给你一个低层次的 Python 操作系统,可以用来控制各种电子系统。
- MicroPython 富有各种高级特性,比如交互式提示、任意精度整数、闭包函数、列表解析、生成器、异常处理等等。
- MicroPython 的目标是尽可能与普通 Python 兼容,使开发者能够轻松地将代码从桌面端转移到微控制器或嵌入式系统。程序可移植性很强,因为不需要考虑底层驱动,所以程序移植变得轻松和容易。
## MicroPython 的优势
- Python 是一款容易上手的脚本语言,同时具有强大的功能,语法优雅简单。使用 MicroPython 编程可以降低嵌入式的开发门槛,让更多的人体验嵌入式的乐趣。
- 通过 MicroPython 实现硬件底层的访问和控制,不需要了解底层寄存器、数据手册、厂家的库函数等,即可轻松控制硬件。
- 外设与常用功能都有相应的模块,降低开发难度,使开发和移植变得容易和快速。
## MicroPython 的应用领域
- MicroPython 在嵌入式系统上完整实现了 Python3 的核心功能,可以在产品开发的各个阶段给开发者带来便利。
- 通过 MicroPython 提供的库和函数,开发者可以快速控制 LED、液晶、舵机、多种传感器、SD、UART、I2C 等,实现各种功能,而不用再去研究底层硬件模块的使用方法,翻看寄存器手册。这样不但降低了开发难度,而且减少了重复开发工作,可以加快开发速度,提高开发效率。以前需要较高水平的嵌入式工程师花费数天甚至数周才能完成的功能,现在普通的嵌入式开发者用几个小时就能实现类似的功能。
- 随着半导体技术的不断发展,芯片的功能、内部的存储器容量和资源不断增加,成本不断降低,可以使用 MicroPython 来进行开发设计的应用领域也会越来越多。
### 产品原型验证
- 众所周知,在开发新产品时,原型设计是一个非常重要的环节,这个环节需要以最快速的方式设计出产品的大致模型,并验证业务流程或者技术点。与传统开发方法相比,使用 MicroPython 对于原型验证非常有用,让原型验证过程变得轻松,加速原型验证过程。
- 在进行一些物联网功能开发时,网络功能也是 MicroPython 的长处,可以利用现成的众多 MicroPython 网络模块,节省开发时间。而这些功能如果使用 C/C++ 来完成,会耗费几倍的时间。
### 硬件测试
- 嵌入式产品在开发时,一般会分为硬件开发及软件开发。硬件工程师并不一定都擅长软件开发,所以在测试新硬件时,经常需要软件工程师参与。这就导致软件工程师可能会耗费很多时间帮助硬件工程师查找设计或者焊接问题。有了 MicroPython 后,将 MicroPython 固件烧入待测试的新硬件,在检查焊接、连线等问题时,只需使用简单的 Python 命令即可测试。这样,硬件工程师一人即可搞定,再也不用麻烦别人了。
### 教育
- MicroPython 使用简单、方便,非常适合于编程入门。在校学生或者业余爱好者都可以通过 MicroPython 快速的开发一些好玩的项目,在开发的过程中学习编程思想,提高自己的动手能力。
# RT-Thread MicroPython 快速上手
## 开始使用 MicroPython
> **注意**:RT-Thread MicroPython 需要运行在 **RT-Thread 3.0** 版本以上。
### 选择合适的 BSP 平台
RT-Thread MicroPython mini 版本占用资源最大不超过:
- 1、ROM : 190KB
- 2、RAM : 8KB
常见的许多开发板都可以运行 MicroPython,如 `stm32f10x` 、`stm32f40x` 、`stm32f429-apollo`、`imxrt1052-evk` 、`iot-camera` 等。
### MicroPython 软件包的安装
- MicroPython 软件包可以通过 env 工具在线下载获得。在下载 MicroPython 软件包前,建议使用 `pkgs --upgrade` 命令更新软件包列表,并且在配置版本时勾选 `latest` 版本,如图:
- 使用 env 下载 MicroPython 软件包的方法请参考: [`RT-Thread env 工具使用手册`](https://www.rt-thread.org/document/site/rtthread-development-guide/rtthread-tool-manual/env/env-user-manual/)
### 选择开发环境
- 目前 MicroPython 支持三种开发环境,分别为 `MDK / IAR / GCC`,选择合适的开发环境,使用 env 工具将 MicroPython 软件包开启后,需重新生成工程,再进行编译、下载。
### 运行 MicroPython
- 在 Finsh/MSH 命令行内输入 `python` 即可进入 MicroPython 的交互命令行 REPL(Read-Evaluate-Print-Loop),可在终端看到如下界面:
使用 `Ctrl-D` 或输入 `quit()` 以及 `exit()` 即可退出 REPL ,回到 RT-Thread Finsh/MSH。
## MicroPython 基本功能
### Python 语法与内建函数
#### 使用 python 交互命令行
- MicroPython 是 Python 3 编程语言的一种精简而高效的实现,语法和 Python 3 相同,并带有丰富的内建函数,使用 MicroPython 交互命令行即可运行 Python 代码:
#### 交互命令行的粘贴模式
- `MicroPython` 比一般的 python 交互环境多了一个特别的**粘贴模式**,可以一次粘贴输入多行 python 代码。
- 在命令行提示符状态下,按下 `Ctrl-E` 组合键,就会出现提示:`paste mode; Ctrl-C to cancel, Ctrl-D to finish` 。粘贴需要运行的代码后,按下 `Ctlr-D` 即可退出粘贴模式,同时输入的代码也会自动执行。
- 程序正在执行时,如果想取消,可以使用 `Ctrl-C`。
# MicroPython 模块
- MicroPython 提供丰富的模块,每个模块提供特定的功能。了解开发的过程中一些常用的模块的使用方式,可以让你很好的使用 MicroPython 的功能。
- 这些模块可以通过 env 工具的 menuconfig 功能来开启和关闭,如果你需要使用特定的模块,在 menuconfig 中选中模块名,保存退出后,重新编译运行即可。
## Python 标准库和微型库
Python 的标准库被 “微型化”后,就是 MicroPython 标准库,也称 MicroPython 模块。它们仅仅提供了该模块的核心功能,用来替代 Python 标准库 。一些模块使用 Python 标准库的名字,但是加上了前缀 "u",例如``ujson``代替``json``。也就是说 MicroPython 的标准库(微型库),只实现了一部分模块功能。通过给这些库以不同的方式命名,用户可以写一个 Python 级的模块来扩展微型库的功能,以便于兼容 CPython 的标准库(这项工作就是 [micropython-lib](https://github.com/micropython/micropython-lib) 项目的正在做的)。
在一些嵌入式平台上,可添加 Python 级别封装库从而实现命名兼容 CPython,使用 MicroPython 标准库既可使用他们的 u-name,也可以使用 non-u-name。使用 non-u-name 的模块可以被库路径文件夹里面的同名模块所覆盖。
例如,当``import json``时,首先会在库路径文件夹中搜索一个 ``json.py`` 文件或 ``json`` 目录进行加载。如果没有找到,它才会去加载内置 ``ujson`` 模块。
## RT-Thread MicroPython 模块
### 常用内建模块
- [rtthread][1] – RT-Thread 系统相关函数
- [utime][2] – 时间相关函数
- [sys][3] – 系统特有功能函数
- [math][4] – 数学函数
- [uio][5] – 输入/输出流
- [ucollections][6] – 提供有用的集合类
- [ustruct][7] – 打包和解包原始数据类型
- [array][8] – 数字数据数组
- [gc][9] – 控制垃圾回收
- [uos][15] – 基本的 “操作系统” 服务
- [select][16] – 等待流事件
- [uctypes][17] – 以结构化的方式访问二进制数据
- [uerrno][18] – 系统错误码模块
- [_thread][19] – 多线程支持
### 硬件模块
- [machine][10] – 与硬件相关的功能
- [machine.Pin][11] - Pin 引脚控制类
- [machine.UART][14] - UART 外设控制类
- [machine.I2C][12] - I2C 外设控制类
- [machine.SPI][13] - SPI 外设控制类
- [machine.RTC][29] - RTC 外设控制类
- [machine.PWM][30] - PWM 外设控制类
- [machine.ADC][31] - ADC 外设控制类
- [machine.LCD][34] - LCD 外设控制类
### 网络模块
- [usocket][28] – 网络套接字模块
- [network][32] – 网络连接控制模块
- [network.WLAN][33] – WiFi 连接控制类
### 常用第三方模块
- [cmath][20] – 复数的数学函数
- [ubinascii][21] – 二进制/ ASCII转换
- [uhashlib][22] – 哈希算法
- [uheapq][23] – 堆排序算法
- [ujson][24] – JSON编码与解码
- [ure][25] – 正则表达式
- [uzlib][26] – zlib 解压缩
- [urandom][27] – 随机数生成模块
本次使用的是麻雀一号,以上模块并没有全部支持,需要测试能用再使用,希望官方加大力度更新固件。
【RT-Thread作品秀】RT-Thread应用创新设计大赛-实时天气
https://bbs.21ic.com/icview-2983678-1-1.html?fromuser=ICCCCC
(出处: 中国电子网技术论坛)
|