【Py4OH系列教程】鸿蒙Python框架的前世今生 原创 精华

唐佐林
发布于 2024-11-18 16:21
浏览
1收藏

各位小伙伴,long time no see!

 

我是蜀鸿会唐佐林,鸽了那么久,决定再次回归社区,重启Python for OpenHarmony系列的技术教程。希望大家能够关注这个系列,一键三连哦!

 

1.前世今生

话说这事还得追溯到4年前。。。

2020年,还是视觉算法工程师的我收到华为的召唤:学习鸿蒙技术,打造鸿蒙系统,推动鸿蒙生态发展。这个召唤让我非常开心,毕竟能在初期就参与一个未来可期的系统开发是非常难得的!没有一点点迟疑,我立即就加入了当时还只有百来人的鸿蒙团队。

都说众人拾柴火焰高,没人能够熄灭满天的星光。做出一个系统容易,但要推广一个系统,让大家都愿意使用这个系统就有难度了。因此,要扩大鸿蒙生态圈就必须面对这个令人头疼的问题:怎么让更多人可以轻松愉快的上手鸿蒙开发???

【Py4OH系列教程】鸿蒙Python框架的前世今生-鸿蒙开发者社区

 

为了解决这个问题,我把目光瞄向了Python语言!Python语言简单易学,从小学生到大学生,从专业开发者到非计算机专业人群都可以学习使用,几乎是人均可学,编程入门首选。所以,一个大胆的想法在我脑中闪现:在鸿蒙上支持Python语言,团结Python开发者,一起推动国产系统的发展!于是,说干就干,我把可以找到的Python框架都做了技术验证,从多个维度进行了比较,最终选择MicroPython进行改造。为了规避未来可能的风险,我并没有选择对MicroPython进行移植,而是做减法,直接把MicroPython中的Python语言解释器给抽取出来,并适配到OpenHarmony!有了Python语言解释器,我就可以自定义SDK和开发框架了,以简单易用为最终目标,帮助大家快速入门鸿蒙开发。

【Py4OH系列教程】鸿蒙Python框架的前世今生-鸿蒙开发者社区

​最初的Demo完成后​​​,这个Python for OpenHarmony的项目(Py4OH)得到了PMC的关注,并以此为契机成立了​​​OH Python SIG​​,我作为Leader领导Python在OpenHarmony上的实践与应用。。。


2.登场首秀

2021年11月,​​第一个具备完整开发功能的Py4OH框架在社区发布。​


整个框架包含以下三个部分:

  • Py4OH 引擎 – OpenHarmony 上的 Python 语言解析器以及内置接口
  • Py4OH REPL – PC 上的 Python 交互命令行,用于与 Py4OH 引擎通信完成设备编程
  • Py4OH 库 – 为 OpenHarmony 硬件定制开发的 Python 库,简化设备开发

【Py4OH系列教程】鸿蒙Python框架的前世今生-鸿蒙开发者社区


Py4OH框架支持 repl 和 app 两种设备运行模式,其中 repl 模式为动态编程方式,在开发阶段使用,对Python程序进行动态调试;app 模式用于Python程序的最终部署执行,该模式下,设备上电后加载main.py执行。

【Py4OH系列教程】鸿蒙Python框架的前世今生-鸿蒙开发者社区


Py4OH动态编程示例:

D.T.Py40H >>> %connect(192.168.1.40)
Connection is OK!

D.T.Py40H >>> import math

D.T.Py40H >>> r = 5

D.T.Py40H >>> area = math.pi * (r ** 2)

D.T.Py40H >>> print('area ='+ str(area))
area = 78.53981633974484

以上代码是在Py4OH-REPL交互式命令行中动态输入的,大家可以看到通过逐步输入Python代码算出了半径为5的圆面积;其中计算结果在PC上展示,而计算过程是在OpenHarmony设备上完成。整个过程无需编译也无需烧写,代码完成即可执行,做到OpenHarmony设备开箱即用。


3.外设驱动

除了开箱即用,Py4OH另一个值得推荐的特性是:用纯面向对象的程序设计范式编写外设驱动!

 

LED驱动示例(led.py):

import gpio

class Led:
    def __init__(self, pin_num):
        self.pin_num = pin_num
        self.is_on = False
        gpio.gpio_init(self.pin_num)
        func = gpio.query_func_value(self.pin_num, 'gpio')
        gpio.set_func(self.pin_num, func)
        gpio.set_dir(self.pin_num, gpio.dir_out)
        gpio.set_output(self.pin_num, 0)
                
    def on(self):
        gpio.set_output(self.pin_num, 1)
        self.is_on = True
        
    def off(self):
        gpio.set_output(self.pin_num, 0)
        self.is_on = False


LED控制示例(main.py):

import os
import led

# 创建10号引脚上的 Led 对象
# 通过 Led 对象控制 LED 灯的亮和灭
light = led.Led(10)  

while True :
    light.on()     # 点亮10号引脚上的LED灯
    os.sleep(1)    # 休眠1秒
    light.off()    # 关闭10号引脚上的LED灯
    os.sleep(1)    # 休眠1秒


上面的代码完成了嵌入式开发入门的“Hello World”级程序:点亮LED灯。


  • led.py文件中的Led是一个用面向对象范式编写的类(class),这个类的构造函数(__init__)做好了点亮LED灯的准备工作,on() 和 off() 方法用于控制LED灯的亮和灭。
  • main.py文件是程序的入口文件,执行后首先创建Led对象,之后用Led对象对10号引脚上的LED灯进行控制。


整个程序逻辑非常简单,也就是控制目标LED灯的状态。各位小伙伴可以使用C语言在OpenHarmony设备上实现同样功能的程序,对比体会一下基于Py4OH框架开发的优势!


4.硬件支持

目前Py4OH已经支持了众多的OpenHarmony设备,比如:小凌派开发套件,小熊派开发套件,大师兄系列开发套件等;正在适配的设备有:STM32F407系列,Esp32系列,Hi3863系列。

另外,蜀鸿会官方也推出了自己的Py4OH创客套件(​​蜀鸿熊猫派​​),可基于该套件自行动手搭建创意作品,也可直接用于产品原型验证。

【Py4OH系列教程】鸿蒙Python框架的前世今生-鸿蒙开发者社区


无论是Py4OH设备开发框架还是蜀鸿会创客套件,我都会持续迭代更新,为各位小伙伴提供低门槛且有趣的一条鸿蒙技术路线。

 

好了,今天先讲解到这,下次跟大家聊聊怎么具体上手Py4OH开发,在OpenHarmony设备上调试和部署Python程序。


Enjoy it!

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
已于2024-11-18 16:47:01修改
1
收藏 1
回复
举报
回复
    相关推荐