1. MicroPython¶
这是一个基于RT-Thread的MicroPython移植教程,RT-Thread版本需要在3.0以上。
1.1. 功能介绍¶
设备上电后执行SD卡中指定的脚本文件,也可以使用上位机通过串口发送命令来执行脚本。
1.2. 制作脚本¶
野火配套开发板已经制作好了固件,可以直接使用,将对应开发板的程序下载到你的开发板中即可,开发板上需要插上SD卡哦。
脚本的制作环境是VS Code的MicroPython插件,MicroPython的插件信息请参考:https://marketplace.visualstudio.com/items?itemName=RT-Thread.rt-thread-micropython
配置好了环境就可以开始使用MicroPython了。
1.2.1. python点亮第一个灯¶
众所周知,再玩python的时候,需要导入需要的包,micropython也是如此,machine.Pin 类是 machine 模块下面的一个硬件类,它提供了引脚的控制方法,导入它就可以简单的控制GPIO外设。
1 | from machine import Pin
|
这样我们就可以利用它实现LED的控制,比如下面这段代码,(“PB5”, 21)为引脚标识符,它由是一个由代号和引脚号组成的元组,21是B5的引脚号,绿色LED引脚是PB0自然它的引脚号就是16,蓝色LED引脚为PB1,所以引脚就是17了,依次类推。
Pin.OUT_PP是将引脚设置为输出模式,就这样将脚本运行,红色LED就被点亮了,
1 2 3 4 5 6 7 8 9 10 | from machine import Pin
def main():
p_out = Pin(("PB5", 21), Pin.OUT_PP) #霸道开发板的红色LED为PB5
p_out.value(0) #设为低电平
if __name__ == '__main__':
main()
|
编写完脚本之后将开发板通过USB转串口连接至电脑的USB,如图1 - 1所示,点击第二个类似插头的小图标,选择对应的COM口即可与开发板连接,
1 - 1
① 用于创建工程; ② 用于连接开发板; ③ 将写好的脚本同步到开发板中,(这里我们用的是SD卡保存脚本,脚本会同步到SD卡中); ④ 在线运行脚本; ⑤ 停止运行。
点击第四个图标,我们上面写的脚本就可以在开发板中运行,
1.2.2. utime模块¶
utime 模块提供获取当前时间和日期、测量时间间隔和延迟的功能。
1 | import utime
|
我们将定时器与LED结合起来,实现闪烁的效果,utime.sleep_ms是毫秒睡眠,utime.sleep_us是微秒睡眠。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | from machine import Pin
import utime
LED1 = 21 #霸道版的LED_R为PB5 所以是编号是 21
def main():
print("Welcome to RT-Thread MicroPython!")
p_out = Pin(("PB5", LED1), Pin.OUT_PP)
for i in range(10):
p_out.value(0) # 设为低电平
utime.sleep_ms(1000) # 延时1秒
p_out.value(1) # 设为高电平
utime.sleep_ms(1000) # 延时1秒
if __name__ == '__main__':
main()
|
这样就可以控制开发板上的LED循环闪烁了。
详细的MicroPython 库使用方法请参考:https://www.rt-thread.org/document/site/submodules/micropython/docs/micropython-librarys/
1.3. 制作固件¶
对固件制作感兴趣的同学可以看一下下面的固件制作方法,自己做一个固件。
这里以野火STM32F103霸道开发板为例,与其他开发板制作方式基本相同。
1.3.1. 准备工作¶
从官网中下载RT-Thread的源码,下载地址为:https://github.com/RT-Thread/rt-thread
在RT-Thread源码中提供了众多开发板的bsp,这里我们将采用stm32f103-fire-arbitrary模板来制作固件,看图1 - 2。
图1 - 2
这里我们还需要用到Env工具,这个工具的使用也比较简单,关于它的下载与使用请参考:https://www.rt-thread.org/document/site/programming-manual/env/env/
1.3.2. 使用Env配置工程¶
就算不熟悉Env工具也没关系,这里我们只需要简单配置几个地方就行。但是最好按照官网的教程将Env启动添加至右键中会方便很多。
进入stm32f103-fire-arbitrary中点击右键,在此处打开Env工具,看图1 - 3。
图1 - 3
打开后通过命令行输入 menuconfig 进入配置界面,看图1 - 4。
图1 - 4
menuconfig 常用快捷键如图1 - 5所示:
图1 - 5
输入 menuconfig 进入菜单界面,看图1 - 6。
图1 - 6
通过上下键选择,回车键确认,我们先来配置MicroPython的软件包,看图1 - 7、1 - 8 、1 - 9、1 - 10。
图1 - 7
图1 - 8
图1 - 9
图1 - 10
通过上面的简单的操作,就配置好了micropython的软件包。
下面再配置SD卡外设,通过按Esc键不断返回上一层,回到菜单主界面,选中硬件外设,看图1 - 11,
图1 - 11
进入板载外设选项中,看图1 - 12,
图1 - 12
将光标移动至Enable SDCARD(sdio),通过空格选中它,看图1 - 13。
图1 - 13
就这样SD卡就配置好了,最后我们还需要修改一些main线程的堆栈大小,必须大于4096,看图1 - 14,图1 - 15,
图1 - 14
图1 - 15
这样就基本设置完成了,通过Esc键返回并保存更改,回到命令行界面通过 pkgs –update 下载并安装软件包,图1 - 16,
图1 - 16
再通过 scons –target=mdk5 命令生成mdk5工程,或者用scons –target=iar 命令生成iar工程。
1.3.3. 修改程序¶
第50行的 MSH_CMD_EXPORT 是添加自定义命令,这里我们可以通过 START_MICRO_PYTHON 宏定义确定上电时直接进入micropython运行脚本,还是通过命令行运行脚本。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | #include <rtthread.h>
#include <rtdevice.h>
#include <board.h>
// 如果想上电时就执行 .py 文件,就将开启此宏定义。没有开启此宏定义时,就在命令行(/msh)中输入python xxx.py执行.py 文件
//#define START_MICRO_PYTHON
void micropython_thread(); // micropython线程
void micropython_init(void); // 创建micropython线程
static struct rt_thread micropython;// micropython线程句柄
static char micropython_stack[4096];// 线程栈大小
int main(void)
{
#ifdef START_MICRO_PYTHON
micropython_init(); // 初始化micropython线程
#endif
return RT_EOK;
}
/* 创建micropython线程 */
void micropython_init()
{
rt_thread_init(µpython,
"thread2",
micropython_thread,
RT_NULL,
µpython_stack[0],
sizeof(micropython_stack),
2, 20);
rt_thread_startup(µpython);
rt_thread_mdelay(100);
}
/* micropython线程 */
void micropython_thread()
{
while(1)
{
extern void mpy_main(const char *filename);
/* 在此处修改需要执行得 .py文件 */
mpy_main(NULL);
}
}
#ifndef START_MICRO_PYTHON
MSH_CMD_EXPORT(micropython_init, micropython thread);
#endif
|