1、前言
Python 语言的是一款非常容易使用的解释性语言,它的主要特点如下:
- 易学易用
- 可扩展可移植
- 丰富的三方库
正是由于以上这些特点,使得python在一些逻辑简单,功能复杂的场景应用非常广泛。近几年,随着人工智能的飞速发展,Python 的优点得到的充分的体现,因此成为了AI开发的首选语言。
MicroPython(简称mpy)在保留了python语言主要特性的基础上,他还对嵌入式系统的底层做了非常不错的封装,它的特点如下:
- 沿用python语法和基本数据结构,保持易学易用性
- 提供基于嵌入式系统的硬件功能库封装,让嵌入式开发简单便捷
今天要介绍的是如何使用micropython 在HaaS100 上实现跑马灯功能
2、动态效果图
开机启动交互式mpy如下图
跑马灯效果如下图
3、代码清单
目前HaaS100 上面一共内置了六个led 灯,电源指示灯默认开机常亮,跑马灯程序是基于剩下五个灯进行的,要实现这个功能,只需要大概十行的Python代码即可
# coding=utf-8
# This is a sample Python script.
import utime
from haascv import driver
GPIO = driver.gpio()
leds=(34,35,36,40,41)
print("*****micropython start led test******")
for i in range(10):
for led in leds:
GPIO.open(led, 5, 0)
GPIO.write(0)
utime.sleep_ms(100)
GPIO.write(1)
utime.sleep_ms(100)
GPIO.close()
print("*****micropython end led test******")
4、物品清单
4.1、硬件
- HaaS100 开发板一块
- 电源一个
- micro usb 一个
4.2、软件及工具
- 最新的HaaS100 开源代码
- 串口工具
5、实现方法
我们提供了两种方式:
- 交互式python 方式
- 执行文件的方式
这两种方式基本流程一致,系统启动---->应用启动---->初始化python---->
只有最后一步不一样,第一种是启动一个交互式的python环境,支持动态输出python命令执行,第二种是直接运行一个指定的python工程文件。
因此我们重点看下最后一步是如何实现的。
5.1、交互式
关于HaaS100 的详细介绍可以参考文章:HaaS100快速开始
在下载了HaaS100 最新的开源代码以后 ,进去application/example 目录,可以看到所有关于micropython 的demo 工程: micropython_xxxx_demo
我们以micropython_repl_demo 为例,介绍下如何基于HaaS100 启动一个交互式的micropython
5.1.1、编译
aos make micropython_repl_demo@haas100 -c config
aos make
编译完成以后,在 out/micropython_repl_demo@haas100/binary/ 目录,会生成一个 micropython_repl_demo@haas100.bin
5.1.2、烧录
如果是windows 电脑,编译完成以后,按照HaaS100快速开始 文档,烧录新的micropython_repl_demo@haas100.bin 文件即可。
如果是Mac 电脑可以按照如下文档进行烧录
烧录之前,先确保机器开机,并通过usb 连接Mac 电脑。
- 将附件中的aos_burn.zip解压
- 将micropython_repl_demo@haas100.bin 拷贝到aos_burn 目录
- 执行 python flash_program.py --bin=./micropython_repl_demo@haas100.bin 进行烧录
注意事项:
- sudo pip install pyserial,确保电脑安装了pyserial
- 烧录过程之前,确保aos_burn 目录中.config_burn 中配置的串口路径无误,并且没有被其它串口程序占用
5.1.3、开启MicroPython之旅
在机器烧录完成以后,会自动开机,开机默认会启动之前烧录进去的micropython_repl_demo@haas100.bin文件。打开串口工具,选择对应的串口设备,设置波特率为1500000.启动成功的话你看到的界面如下:
接着,我们输入print('hello-world') 就能看到相应的打印
HaaS100 默认有6 个led 灯,电源灯是常亮的,我们可以通过依次输入如下代码,尝试通过micropython点亮一个led灯。或者如下图所示,使用SerialPortUtility 直接将全部代码粘贴到输入框中,然后回车,点击发送即可
from haascv import driver
GPIO = driver.gpio()
led = 34
GPIO.open(led, 5, 0)
GPIO.write(0)
注意事项:
- Ctrl +d 退出交互式模式
- Ctrl +a 加上Ctrl + q 退出串口
以上代码是点亮单个led灯,如果需要点亮多个led,请参照代码清单中的跑马灯代码,将代码通过串口工具(推荐使用SerialPortUtility,一次性全部拷贝)输入到机器,就跑马灯效果
5.2、执行Python文件
在开始之前,务必保证按照 HaaS100快速开始 搭建好helloworld_demo 的开发和烧录环境。
要创建一个自己工程有两个方法:
- 基于application/example/helloworld_demo 的 helloworld_demo ,增加自己的工程文件,并参数运行
- 复制一份helloworld_demo程序,重新命名为一个新的工程,并修改相关Config.in 和 aos.mk 文件
本文中的led_demo 采取的是第二种方法,具体代码位置位于application/example/micropython_led_demo 目录
接下来我们来看下led_demo 这个工程是如何组织工作的?
5.2.1、工程剖析
跑马灯程序的工程目录结构如下:
- aos.mk 控制了需要链接的micropython 的库和头文件
NAME := led_demo
$(NAME)_MBINS_TYPE := app
$(NAME)_VERSION := 1.0.1
$(NAME)_SUMMARY := led_demo
$(NAME)_SOURCES := maintask.c appdemo.c
$(NAME)_INCLUDES += ../../../components/haascv
$(NAME)_COMPONENTS += osal_aos
$(NAME)_COMPONENTS += littlefs
$(NAME)_COMPONENTS += haascv
GLOBAL_DEFINES += AOS_NO_WIFI
- appdemo.c 是程序的入口,负责启动python 工程文件led_test.py
#include "haascv_main.h"
int application_start(int argc, char *argv[])
{
int count = 0;
//arg_num 为传入参数的个数
int arg_num = 2 ;
//参数列表,第一个参数为默认参数,第二个参数是需要执行的文件绝对路径
char* argvs[] = {"micropython","/data/led_test.py"} ;
printf("led_demo start\r\n");
//micropython 初始化
mpy_init();
//运行python 文件
mpy_run(arg_num,argvs);
printf("led_demo end\r\n");
}
- res 目录是工程的资源文件目录,目录里面的文件会通过父目录的cp_py_to_data.sh 拷贝到platform/mcu/haas1000/prebuild/data/ 目录,对应到机器的/data/led_test.py, led_test.py 里面的内容就是文章最前面的python代码。python文件最终编译到了platform/mcu/haas1000/release/write_flash_tool/ota_bin/littlefs.bin 中
5.2.2、编译
切换到HaaS100 代码根目录,编译之前确保res 中的资源文件已经拷贝到了platform/mcu/haas1000/prebuild/data/ 目录
aos make micropython_led_demo
aos make
编译完成以后,会在out/micropython_led_demo@haas100/binary 目录生成一个micropython_led_demo@haas100.bin 文件
5.2.3、烧录
由于这个工程同时更新了两个bin 文件:micropython_led_demo@haas100.bin和littlefs.bin 文件,因此烧录的时候也需要同时烧录这两个文件
Windows 电脑烧录请参考 HaaS100快速开始
Mac 电脑烧录请参考交互式mpy中的烧录环节
烧录命令替换为 :
python flash_program.py --bin=./micropython_led_demo@haas100.bin --bin=./littlefs.bin#0xB32000
烧录完成以后,机器自动开机,就能看到以上效果了
6、写在最后
MicroPython 继承了Python易学易用的特点,同时提供了基于嵌入式硬件的基础库封装,让开发者可以很方便的通过交互式的环境,实时进行嵌入式开发,让嵌入式开发也变得简单方便。
如需更多技术支持,可加入钉钉开发者群,或者关注微信公众号
更多技术与解决方案介绍,请访问阿里云AIoT首页https://iot.aliyun.com/