使用Python开发鸿蒙设备程序(1-GPIO外设控制) 原创 精华

唐佐林
发布于 2021-9-9 21:57
浏览
26收藏

        话说很久以前,我将 MicroPython 的解释器给“挖”了出来,然后做了适配,成功运行于鸿蒙设备(Hi3861)之上(详见前一篇帖子:《使用Python开发鸿蒙设备程序(0-初体验)》。然而,这在本质上也就只是一件装酷的事,除了写个 Hello World 体验资源受限设备上的 Python 语言程序设计之外,基本一无是处。。。

 

        为了实现最初的梦想:通过 Python 降低鸿蒙设备开发的门槛。最近我又开始躁动起来,大刀阔斧的在之前工作的基础上做了 Python SDK 的设计和开发。终于,现在可以直接用 Python 来控制鸿蒙开发板外设了。我之前的帖子《<<鸿蒙开发板外设控制>>直播图文版(2020.10.28)》中涉及的案例都可以用 Python 完成!大家看完这篇帖子后,可以尝试使用 C 和 Python 来实现相同的功能,体会一下不同。

 

        Ok!我们进入正题,直接上 Python 代码学习!    

使用Python开发鸿蒙设备程序(1-GPIO外设控制)-鸿蒙开发者社区

        在这里给大家做一点点概念上的科普,帮助大家更好的理解代码。GPIO(General Purpose Input/Output)即:通用型输入输出的简称,其物理表现形式为:可接收或输出电信号的引脚,使用者可根据需要将其作为输入(GPI)或输出(GPO)使用。并且, 一般情况下,开发板上都有多个 GPIO 引脚供使用。当 GPIO 作为输出使用时,输出的电信号为高电平(1)或者低电平(0),因此,只要在电路上稍加设计就可以接入外设(如:LED灯,电动机,等),并通过程序控制外设的状态。有了这些概念之后,上面的示例的代码理解起来就简单了!无非就是将 LED 灯(一种外设)接入第 7 号 GPIO 引脚,并通过程序设置第 7 号引脚输出高电平,点亮 LED 灯。

 

        如果只是单纯的通过代码点亮一个 LED 灯,是真的不难,但也是真的挺无聊。所以,再给大家一个稍微复杂一点的示例:通过开关控制 LED 灯的状态。

 

“Show me the code!”

 

使用Python开发鸿蒙设备程序(1-GPIO外设控制)-鸿蒙开发者社区

 

        这个示例看起来挺吓人的,比上一个示例复杂了一些。然而,本质却依旧是 GPIO 外设控制。在硬件连接上,第 11 号 GPIO 引脚接入了一个按键,其目的是接收按键的信号,既然是接收信号那么显然 GPIO 基本功能应该设置为“输入”(与连接 LED 的第 7 号 GPIO 基本功能设置相反)。并且,将初始状态设置为高电平(pull up)态,当引脚电平从高电平转为低电平(按键被按下)时触发中断。最后,设置中断触发后调用的函数为 button_callback,当这个函数被调用时会通过 GPIO_7 改变外接 LED 灯的状态。

 

整个过程如下图所示:

使用Python开发鸿蒙设备程序(1-GPIO外设控制)-鸿蒙开发者社区

 

使用Python开发鸿蒙设备程序(1-GPIO外设控制)-鸿蒙开发者社区

============ 华丽的分割线 ============

 

相信大家已经迫不及待想要动手实战,体验一下 Python 操作外设的快感了。

 

Ok! 方法如下:

  1. 下载附件中的 libdtpython.a 并存储到 /code/vendor/hisi/hi3861/hi3861/build/libs (详见前一篇帖子
  2. 编写 Python 代码并使用工具 Txt2CStr.exe 转换为 C 数组(详见前一篇帖子
  3. 将转换后的代码加入附件中的 demo 工程中编译并执行

 

注意:

由于在 Python 中提供了 i2c 相关接口,因此,需要改动文件 user_config.mk。

路径:/code/vendor/hisi/hi3861/hi3861/build/config/usr_config.mk

配置:CONFIG_I2C_SUPPORT=y

 

代码已经开源,记得给个星星哦!

https://gitee.com/delphi-tang/python-for-hos

 

Enjoy it!

 

下一篇预告:

使用Python开发鸿蒙设备程序(2-I2C应用实例)

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
demo.zip 5.53K 109次下载
libdtpython.zip 206.52K 117次下载
gpio-demo.zip 1.59K 134次下载
已于2021-9-21 22:56:39修改
49
收藏 26
回复
举报
22条回复
按时间正序
/
按时间倒序
时空未宇
时空未宇

赞赞赞🤗 🤗

感谢唐sir的贡献

😉 😉 

回复
2021-9-9 22:36:04
Lccle
Lccle

唐老师永远的神,是我在技术领域里最大的偶像。狄泰学院的课让我受益匪浅,唐老师记得也要抓紧时间录课。🤗 😉 

已于2021-9-9 23:17:11修改
回复
2021-9-9 23:15:09
董昱
董昱

这个好厉害,赞一个

回复
2021-9-10 09:09:04
唐佐林
唐佐林 回复了 Lccle
唐老师永远的神,是我在技术领域里最大的偶像。狄泰学院的课让我受益匪浅,唐老师记得也要抓紧时间录课。🤗 😉

多谢老学员支持啊!!!

回复
2021-9-10 09:13:18
唐佐林
唐佐林 回复了 董昱
这个好厉害,赞一个

献丑了。

董老师有空也玩玩我这个Python吧。

回复
2021-9-10 09:14:58
董昱
董昱 回复了 唐佐林
献丑了。 董老师有空也玩玩我这个Python吧。

有空必须试一下。有了Python代码更加精简了。 

回复
2021-9-10 14:00:23
远道可思
远道可思

谢谢,唐佐林老师,以在neptune开发板上体验成功,不过GP|O与IIC部分后续会公布源代码?

回复
2021-9-10 14:28:27
唐佐林
唐佐林 回复了 远道可思
谢谢,唐佐林老师,以在neptune开发板上体验成功,不过GP|O与IIC部分后续会公布源代码?

会的,我还没来得及上传更新,就这几天更新到gitee。

回复
2021-9-10 14:33:37
xu佳(新号)
xu佳(新号)

每个外设的python-sdk,都自己造轮子。工作量不小,加油

回复
2021-9-11 10:05:50
唐佐林
唐佐林 回复了 xu佳(新号)
每个外设的python-sdk,都自己造轮子。工作量不小,加油

鸿蒙初开,一切都要 0 到 1 。

我的策略是先适配 native api 的 Python 版,然后再在其上开发库。

1
回复
2021-9-11 10:21:10
陈天赐
陈天赐

唐老师会的真是太多了,我远远不及

2
回复
2021-9-11 11:08:29
唐佐林
唐佐林 回复了 陈天赐
唐老师会的真是太多了,我远远不及

加油学起来,现在是学习鸿蒙的最好时机。

回复
2021-9-11 11:11:39
mb613c32b969532
mb613c32b969532

牛逼plus

1
回复
2021-9-11 12:38:43
wx613c41c0c7d25
wx613c41c0c7d25

刚刚加入狄泰,点赞支持!

回复
2021-9-11 13:44:58
mb5fa5839b31013
mb5fa5839b31013

鸿蒙布道师,果然非同凡响!

回复
2021-9-11 14:01:11
功夫大叔
功夫大叔

唐老师不出手则已,出手就这么酷!

回复
2021-9-13 17:47:10
唐佐林
唐佐林 回复了 功夫大叔
唐老师不出手则已,出手就这么酷!

欢迎关注这个项目,后续会使劲更新。。。

回复
2021-9-13 20:29:38
鸿蒙开发
鸿蒙开发

老师厉害

回复
2021-9-14 09:21:58
wx5901c75ba919b
wx5901c75ba919b

请问GPIO底层是调用OHOS什么接口函数实现的?

回复
2021-9-16 21:14:38
唐佐林
唐佐林 回复了 wx5901c75ba919b
请问GPIO底层是调用OHOS什么接口函数实现的?

通过 iot_gpio.h 中定义的接口实现的。

回复
2021-9-16 21:43:29
回复
    相关推荐