3分钟入门Python轻应用开发

Python轻应用
连云、控端、AI、多媒体、UI
回复
yong.jy
帖子: 8
注册时间: 2021年 3月 26日 15:55

3分钟入门Python轻应用开发

#1

帖子 yong.jy » 2021年 5月 19日 19:37

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、硬件
  1. HaaS100 开发板一块
  2. 电源一个
  3. micro usb 一个
4.2、软件及工具
  1. 最新的HaaS100 开源代码
  2. 串口工具
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 电脑。 注意事项:
  • 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)

注意事项:
  1. Ctrl +d 退出交互式模式
  2. Ctrl +a  加上Ctrl + q 退出串口
以上代码是点亮单个led灯,如果需要点亮多个led,请参照代码清单中的跑马灯代码,将代码通过串口工具(推荐使用SerialPortUtility,一次性全部拷贝)输入到机器,就可以实现跑马灯效果。

5.2、执行Python文件

在开始之前,务必保证按照 HaaS100快速开始搭建好helloworld_demo 的开发和烧录环境。

要创建一个自己工程有两个方法:
  1. 基于application/example/helloworld_demo 的 helloworld_demo ,增加自己的工程文件,并参数运行
  2. 复制一份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

烧录完成以后,机器自动开机,就能看到以上效果了。


结尾

关于Python轻应用的更多资料,请参考《Python轻应用手册》。

欢迎加入Python轻应用钉钉群,探讨更多技术问题。

图片


 

头像
shaoziyang
帖子: 2384
注册时间: 2019年 10月 21日 13:48

Re: 3分钟入门Python轻应用开发

#2

帖子 shaoziyang » 2021年 5月 19日 22:25

:DD
 

mys
帖子: 3
注册时间: 2021年 5月 19日 14:59

Re: 3分钟入门Python轻应用开发

#3

帖子 mys » 2021年 5月 20日 09:49

值得尝试

15268026301
帖子: 40
注册时间: 2021年 6月 3日 10:12

Re: 3分钟入门Python轻应用开发

#4

帖子 15268026301 » 2021年 8月 2日 22:08

这个脚本编译成的bin是怎么的?是py脚本加个密改个后缀?还是python字节码?还是转换了机器指令二进制
 

yong.jy
帖子: 8
注册时间: 2021年 3月 26日 15:55

Re: 3分钟入门Python轻应用开发

#5

帖子 yong.jy » 2021年 8月 3日 09:39

脚本没有编译成bin,文章中提到的Alios-Things源码编译成固件bin。固件里面包含了python虚拟机,虚拟机执行了python文件。

回复

  • 随机主题
    回复总数
    阅读次数
    最新文章