《基于Python鸿蒙开发板外设控制》直播图文及答疑
在鸿蒙设备上 Python 以原生 App 的形式存在,其职责是执行 Python 脚本文件,并把对设备操作的请求传递到鸿蒙系统,由系统执行具体的操作,进而达到“使用 Python 语言操作设备”的目的。
![《基于Python鸿蒙开发板外设控制》直播图文及答疑(2021.09.16)-鸿蒙HarmonyOS技术社区](https://s6.51cto.com/oss/202109/26/fe9094381e68211ce0d98a2fde86da1b.jpg)
![《基于Python鸿蒙开发板外设控制》直播图文及答疑(2021.09.16)-鸿蒙HarmonyOS技术社区](https://s3.51cto.com/oss/202109/26/97b8c4c0a2775ef2f1ffc80a8a7a596e.jpg)
目前由于代码版本差异和硬件厂商的定制化差异,Python 框架需要进行适配才能按照预期的方式运行(详细适配步骤后续会以文档方式给出)。随着持续开发,最终适配好的版本可以完全屏蔽 C 语言的开发方式,使用 Python 实时对代码进行解释执行。
![《基于Python鸿蒙开发板外设控制》直播图文及答疑(2021.09.16)-鸿蒙HarmonyOS技术社区](https://s2.51cto.com/oss/202109/26/77f76181a94cbdd21996a7e70bf1dd1b.jpg)
Python 框架以静态库的形式提供,因此可通过 API 将 Python 代码集成到 C 源码中。同时,也是因为这些 API 的存在,后续我就可以开发专用的 Python 任务,动态解释执行 Python 代码。如何动态执行?嗯。。。 REPL 在路上了!!!
![《基于Python鸿蒙开发板外设控制》直播图文及答疑(2021.09.16)-鸿蒙HarmonyOS技术社区](https://s3.51cto.com/oss/202109/26/631398724e90c6bf61ef2222b9bea901.jpg)
这是一个多文件 Python 脚本示例。目前在开发板上支持了多个 Python 文件的相互依赖,比如:test.py 调用 another.py 中的代码。对于熟悉 Python 编程的同学来说这本身是一件很正常的事,然而,在鸿蒙 L0 级别的设备(资源受限设备)中需要花一些功夫定制支持这个特性。
![《基于Python鸿蒙开发板外设控制》直播图文及答疑(2021.09.16)-鸿蒙HarmonyOS技术社区](https://s5.51cto.com/oss/202109/26/8c21ef25a285e328838617c7164f67a8.jpg)
![《基于Python鸿蒙开发板外设控制》直播图文及答疑(2021.09.16)-鸿蒙HarmonyOS技术社区](https://s5.51cto.com/oss/202109/26/bb09efee1fb9eeecd4f95cda719fab1a.jpg)
![《基于Python鸿蒙开发板外设控制》直播图文及答疑(2021.09.16)-鸿蒙HarmonyOS技术社区](https://s6.51cto.com/oss/202109/26/7f9dc4ff63ff374bc1051ae8aca16a9a.jpg)
![《基于Python鸿蒙开发板外设控制》直播图文及答疑(2021.09.16)-鸿蒙HarmonyOS技术社区](https://s5.51cto.com/oss/202109/26/2d89493c1ff50e03e69a66f7f327f4ae.jpg)
![《基于Python鸿蒙开发板外设控制》直播图文及答疑(2021.09.16)-鸿蒙HarmonyOS技术社区](https://s4.51cto.com/oss/202109/26/8b34dff0d33093d98b71c50d8be603f1.jpg)
Python 接口提供了 GPIO 编程的能力,详见帖子《使用Python开发鸿蒙设备程序(1-GPIO外设控制)》。
![《基于Python鸿蒙开发板外设控制》直播图文及答疑(2021.09.16)-鸿蒙HarmonyOS技术社区](https://s2.51cto.com/oss/202109/26/03b46e78a5040385010fa270c485cab6.jpg)
![《基于Python鸿蒙开发板外设控制》直播图文及答疑(2021.09.16)-鸿蒙HarmonyOS技术社区](https://s4.51cto.com/oss/202109/26/7fcb17eb0f258bfda014a57909b7ecf9.jpg)
![《基于Python鸿蒙开发板外设控制》直播图文及答疑(2021.09.16)-鸿蒙HarmonyOS技术社区](https://s6.51cto.com/oss/202109/26/d969fabdc3027f42e0442d5a774b3511.jpg)
![《基于Python鸿蒙开发板外设控制》直播图文及答疑(2021.09.16)-鸿蒙HarmonyOS技术社区](https://s2.51cto.com/oss/202109/26/3bb25ed3eb54728820c765dfc9a3bcef.jpg)
Python 接口提供了 I2C 编程的能力,详见帖子《使用Python开发鸿蒙设备程序(2-I2C应用实例)》。
直播答疑:
1. Python 也很容易读,与 C 比较哪个更容易?
答:从语言的角度,Python 比 C 更容易学习和掌握,因此使用 Python 开发设备的难度要比使用 C 语言低很多,简而言之就是:使用 Python 更容易上手。
2. 唐老师,这个 Python 引擎是你自己开发的吗?
答:这个 Python 框架的语言解释器取自 MicroPython-v1.13 。我在解释器的基础做了鸿蒙系统的适配进而可以进行设备开发。Python 解释器不是我开发的,但是整个 Python 框架是我设计开发的,包括后续的一些列工具链,也会由我开发完成。
3. 老师回调函数怎么支持多参数?
答:Python 版本的回调函数参数可以是对象,比如:list 对象。因此,只要把需要的多个参数存入一个 list 对象,然后将这个 list 对象作为回调参数使用即可。
4. import gpio 能否改成类似树莓派的导入 import RPi.GPIO ,比如 import HOS.GPIO,这样在未来能知道是鸿蒙的 gpio 库。
答:这个 Python 框架专为鸿蒙 L0 设备开发的,没有移植到其它系统的打算。所以,所有库都是为鸿蒙而开发的。另外,大家现在看到的接口都只是我设计规划中的底层 Python 接口,使用上还稍显繁琐;后续,我会开发上层面向对象的接口,使用起来更加的轻松愉快。
5. 老师,不能实时执行 Python 吗?
答:可以,相关接口已经提供了,如:DTPython_RunCode(const char* code) ,只需要开发一个 REPL 命令行工具就可以有实时执行 Python 代码的体验了,而这个 REPL 命令行工具的开发稍后会启动。
6. 唐老师,支持 Pygame 或 Turtle 吗?结合外设可以做非常炫酷的外设硬操作游戏或传感,呈现一体的软件。
答:鸿蒙 L0 设备的能力比较有限,目前主要作为数据采集器以及外设主控板使用,没法做太多炫酷的东西,并且这类库对资源需求大,L0 设备没法支持。如果真要做这类东西,可以考虑富鸿蒙设备(如:Hi3516),在这类设备上可以实现很多炫酷效果。
7. GPIO 底层是调用 OHOS 什么接口?
答:Python 中的 GPIO 接口会适配到鸿蒙本地 GPIO 接口上,即:最终调用 iot_gpio.h 定义的函数。
8. Python 鸿蒙如何实现远程升级?
答:如果是升级 Python 代码,那么直接远程下载 Python 文件即可实现升级。
9. 发布产品后,如何保证 Python 源代码不外泄?
答:Python 源码最终存储于设备的 Flash 中,最终的产品只要不提供对外的调试接口,那么就没法直接拿到源码,除非强制对产品进行逆向才有可能。当然,可以考虑采用加密 Python 源码的方式防止外泄。
10. 鸿蒙开发有没有什么低成本的深度学习视觉开发板?Hi3516 价格 1000 左右有点贵,别家同类开发板比要便宜很多,比如K210只要200左右。
答:目前支持视觉的富鸿蒙开发板确实只有 Hi3516 一种,但是随着适配鸿蒙的硬件厂商越来越多,相信适合大家使用的高性价比视觉开发板会陆续出现。
文章相关附件可以点击下面的原文链接前往下载
https://harmonyos.51cto.com/resource/1265
相关文章
- 用python实现桌面自动化
- 用python来通过PPT开卷考试
- Python - 好用第三方库 isort
- SparkSQL并行执行多个Job的探索
- Nebula Graph 源码解读系列 | Vol.04 基于 RBO 的 Optimizer 实现
- 二、SHELL位置变量
- 用 Python 生成 Excel 报表。
- 九、条件表达式和操作符案例
- 循环1-函数的概念与作用
- UnitTest测试框架全栈详解
- 用 Python 合并 Excel。
- 使用Python开发一个恐龙跑跑小游戏
- python测试开发django-168.clone后 bootstrap-select 中 selectpicker 选择无效
- python测试开发django-167. jQuery中append() 动态新增的元素 click 事件无效的解决办法
- python测试开发django-166.jQuery 使用append()动态添加div元素
- python测试开发django-165.form表单序列化json的2种方式
- python测试开发django-164.bootstrap-table 单元格添加select下拉框
- API 接口要这样设计,才能快乐起来!
- python测试开发django-172.jQuery 发送请求获取的数据设置为全局变量
- python测试开发django-171.ORM查询之exact和iexact