创作

完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>

3天内不再提示

怎么用Python开发OpenHarmony设备程序-GPIO外设控制

gh_e4f28cfa3159 来源:OpenAtom OpenHarmony 作者:唐佐林 2021-11-18 10:33 次阅读

(以下内容来自嘉宾分享,不代表 OpenHarmony 项目群工作委员会观点)

唐佐林

Python SIG Leader、狄泰软件训练营创始人

软件架构师、视觉算法工程师

之前,我将 MicroPython 的解释器给“挖”了出来,然后做了适配,成功运行于 OpenHarmony 设备(Hi3861)之上(详见前一篇帖子:《用Python开发OpenHarmony设备程序-初体验》

为了实现最初的梦想:通过 Python 降低 OpenHarmony 设备开发的门槛。最近我又开始创作起来,大刀阔斧的在之前工作的基础上做了 Python SDK 的设计和开发。终于,现在可以直接用 Python 来控制 OpenHarmony 开发板外设了。

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

import gpio  # 导入 gpio 模块                                            import os    # 导入 os 模块                                                                                                         led = 7            # GPIO_7 连接了一个 LED 灯                                                                                                                                                                                                                                                                               gpio.gpio_init()   # 初始化系统 GPIO 环境                                                                                                  func = gpio.query_func_value(led, 'gpio')  # 查找 GPIO_7 目标功能编号                                                         # 'gpio' 指基本输入输出功能                                             gpio.set_func(led, func)           # 设置 GPIO_7 为基本输入输出                        gpio.set_dir(led, gpio.dir_out)    # 设置 GPIO_7 作为输出使用gpio.set_output(led, 1)            # 设置 GPIO_7 输出高电平                                   # 即:点亮 GPIO_7 上的 LED 灯                                                                                                                                                                while True:                                                          os.sleep(1)    # 休眠 1 秒                                                                                                              gpio.gpio_deinit()#清理GPIO环境

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

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

Show me the code!

import gpio                                                       import os                                                                                                                             led = 7                                                          button = 11     # GPIO_11 接入了一个按键                                                                                                                                    led_on = False  # 标识 LED 灯的状态                                                 
# 按键回调函数                                                                   
def button_callback(arg) :                                           cur_tick = os.get_tick()         # 获取系统当前 tick 用于实现按键防抖                                                                                               
    if cur_tick - arg[0] > 20:       # 当时间流失量大于 20 tick 时                                         # 改变 LED 灯的状态        global led_on                                 if led_on :                  # 当前状态为“打开”,则关闭 LED 灯                                        gpio.set_output(led, 0)                                          led_on = False                                                   print('LED is OFF!')                                         else :                       # 当前状态为“关闭”,则打开 LED 灯                              gpio.set_output(led, 1)                                         led_on = True                                                    print('LED is ON!')                                                                                                             arg[0] = cur_tick            # 记录当前 tick 为下次按键触发做准备                                

                                                                   gpio.gpio_init()                                                                                                                    func = gpio.query_func_value(led, 'gpio')                                                                                           gpio.set_func(led, func)                                         gpio.set_dir(led, gpio.dir_out)                                  gpio.set_output(led, 0)                                                                                                             func = gpio.query_func_value(button, 'gpio') # 查找 GPIO_11 目标功能编号                                                                 # 'gpio' 指基本输入输出功能                      gpio.set_func(button, func)                  # 设置 GPIO_11 为基本输入输出                          gpio.set_dir(button, gpio.dir_in)            # 设置 GPIO_11 作为输入使用                gpio.set_pull(button, gpio.pull_up)          # 设置 GPIO_11 的初始态为高电平                    gpio.set_isr_mode(button, gpio.fall_low)     # 设置 GPIO_11 在从高电平到低电平                                             # 转换时触发中断                                             
                                             # 设置 btton_callback 为中断触发时会调用的函数
gpio.register_isr_func(button, button_callback, [os.get_tick()])                                                                    while True:                                                          os.sleep(1)                                                                                                                     gpio.gpio_deinit()

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

整个过程如下图所示:

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

操作步骤

下载附件中的 libdtpython.a 并存储到 /code/vendor/hisi/hi3861/hi3861/build/libs (详见前一篇帖子)

编写 Python 代码并使用工具 Txt2CStr.exe 转换为 C 数组(详见前一篇帖子)

将转换后的代码加入附件中的 demo 工程中编译并执行

注意事项

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

路径:

/code/vendor/hisi/hi3861/hi3861/build/config/usr_config.mk

配置:

CONFIG_I2C_SUPPORT=y

代码已经开源,欢迎下载体验!

https://gitee.com/openharmony-sig/python

编辑:jq

原文标题:使用Python开发OpenHarmony设备程序-GPIO外设控制

文章出处:【微信号:gh_e4f28cfa3159,微信公众号:OpenAtom OpenHarmony】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    DAYU200开箱系列第一期

    当当当当~荷小君又来了
    发表于 05-26 17:51 71次 阅读

    基于OpenHarmony的本地MQTT服务实现

    一、MQTT协议简介MQTT(消息队列遥测传输)是一个基于客户端-服务器的消息发布/订阅传输协议,是ISO标准(ISO/IEC...
    发表于 05-26 17:46 59次 阅读
    基于OpenHarmony的本地MQTT服务实现

    OpenHarmony项目最吸引人的点在哪里?

    一开始由于不了解 Gitee 文档的运作机制,感觉整个操作流程很是复杂;在提交 PR 的时候,也遇到....
    的头像 HarmonyOS官方合作社区 发表于 05-26 17:41 52次 阅读

    wsshOps基于django开发的webssh堡垒机

    ./oschina_soft/gitee-wssh-ops.zip
    发表于 05-26 16:49 4次 阅读
    wsshOps基于django开发的webssh堡垒机

    RDPY Python远程桌面协议

    ./oschina_soft/rdpy.zip
    发表于 05-26 16:23 1次 阅读
    RDPY Python远程桌面协议

    loon-python命令行客户端

    ./oschina_soft/loon.zip
    发表于 05-26 16:01 3次 阅读
    loon-python命令行客户端

    litecli SQLite数据库命令行工具

    ./oschina_soft/litecli.zip
    发表于 05-26 15:49 1次 阅读
    litecli SQLite数据库命令行工具

    DevEco Studio有哪几种预览功能

    应用的开发过程中,往往需要多次调试和修改,如果支持实时,预测改边看效果,所见即所得,可大大提高边开发效率。为满足这一需求...
    发表于 05-26 15:42 262次 阅读

    重装DevEco Studio出现SDK安装不上的情况要怎么处理?

    重装时出现以下问题,无法下载sdk
    发表于 05-26 15:39 238次 阅读

    termtosvg将终端会话录制为SVG动画

    ./oschina_soft/termtosvg.zip
    发表于 05-26 15:36 1次 阅读
    termtosvg将终端会话录制为SVG动画

    使用900版本ide编译systemui,状态栏和控制中心无法显示怎么处理?

    碰巧到开发板,上下不显示、时间和显示栏可以正常显示到屏幕控制中心滑动不出来,中间环境如下 开发板:dayu200 openharmony系...
    发表于 05-26 15:33 150次 阅读

    deepin-terminal深度终端

    ./oschina_soft/deepin-terminal.zip
    发表于 05-26 15:13 3次 阅读
    deepin-terminal深度终端

    icemapleblueleaves聊天机器人软件

    ./oschina_soft/gitee-CHAT-ROBOT.zip
    发表于 05-26 11:28 3次 阅读
    icemapleblueleaves聊天机器人软件

    Tool-Chicken-Chat工具鸡聊天室

    ./oschina_soft/gitee-Tool-Chicken-Chat.zip
    发表于 05-26 11:20 1次 阅读
    Tool-Chicken-Chat工具鸡聊天室

    开发TV端默认界面和视频播放界面以及手机遥控端默认界面

    目前家庭电视机主要通过其自带的遥控器进行操控,实现的功能较为单一。例如,当我们要在TV端搜索节目时,....
    的头像 HarmonyOS官方合作社区 发表于 05-26 11:06 209次 阅读

    如何通过调用OpenHarmony的NDK接口,实现对GPIO控制,达到LED闪烁的效果

    概述 OpenHarmony  WLAN模组基于Hi3861平台提供了丰富的外设操作能力,包含I2C、I2S、ADC、UART、...
    发表于 05-26 10:15 419次 阅读

    如何让RK3588芯片支持HDMI0接口输出为8K分辨率呢

    RK3588 芯片最高支持的输出分辨率可以到8K,由于Android12 SDK要支持多个显示接口,所以默认最高只配置了4K的分辨率支持...
    发表于 05-26 10:06 297次 阅读

    python学习框架介绍

    对于爬虫初学者来说,弄清楚一个领域的知识体系往往比单纯学习某个技术要重要得多,因为技术总会跟随时代发生快速变化,而知识...
    发表于 05-25 16:47 1132次 阅读

    如何利用BME680实现智能家居控制中心的设计

    该项目具有检测室内环境数据和发送电子邮件、开灯按钮、体感照明屏等功能。
    的头像 科技观察员 发表于 05-25 16:08 138次 阅读
    如何利用BME680实现智能家居控制中心的设计

    DAYU200 | 分布式遥控器

    1.概述 目前家庭电视机主要通过其自带的遥控器进行操控,实现的功能较为单一。例如,当我们要在TV端搜索节目时,电视机在遥控...
    发表于 05-25 15:47 1665次 阅读

    W800芯片平台进入OpenHarmony主干

    近日,江苏润和软件股份有限公司与北京联盛德微电子有限责任公司联合宣布:W800 芯片平台正式合入 O....
    的头像 科技观点 发表于 05-25 12:57 90次 阅读
    W800芯片平台进入OpenHarmony主干

    详解Python中的Pandas和Numpy库

    pandas、numpy是Python数据科学中非常常用的库,numpy是Python的数值计算扩展....
    的头像 数据分析与开发 发表于 05-25 12:49 129次 阅读

    直播预告OpenHarmony标准系统多媒体子系统之相机解读

      5 月 26 日(周四)晚上 19 点,OpenHarmony 开源开发者成长计划知识赋能第五期....
    的头像 OpenHarmony开发者 发表于 05-25 11:43 259次 阅读
    直播预告OpenHarmony标准系统多媒体子系统之相机解读

    BearPi-HM Micro已进OpenHarmony主干

    继小熊派旗下产品 BearPi-HM Nano 通过兼容性测评,进入 OpenAtom OpenHa....
    的头像 科技观点 发表于 05-25 10:59 166次 阅读
    BearPi-HM Micro已进OpenHarmony主干

    OpenHarmony轻量和小型系统编译构建指导

    概述 一个基于gn和ninja的构建系统,以支持OpenHarmony组件化开发为目标,提供以下基本功能: 支持按组件拼装产品并编译。独...
    发表于 05-25 10:46 1154次 阅读

    QuickXDev sublime text 2/3插件

    ./oschina_soft/QuickXDev.zip
    发表于 05-25 10:13 3次 阅读
    QuickXDev sublime text 2/3插件

    Paperwork OCR文档扫描和搜索工具

    ./oschina_soft/paperwork.zip
    发表于 05-25 10:04 3次 阅读
    Paperwork OCR文档扫描和搜索工具

    Doc2dash为Dash.app创建Docsets

    ./oschina_soft/doc2dash.zip
    发表于 05-25 10:02 3次 阅读
    Doc2dash为Dash.app创建Docsets

    Pydiction vim的Python代码自动完成插件

    ./oschina_soft/pydiction.zip
    发表于 05-25 09:55 3次 阅读
    Pydiction vim的Python代码自动完成插件

    Gmate文本编辑器

    ./oschina_soft/gmate.zip
    发表于 05-25 09:29 7次 阅读
    Gmate文本编辑器

    Editra跨平台文本编辑器

    ./oschina_soft/editra.zip
    发表于 05-25 09:22 3次 阅读
    Editra跨平台文本编辑器

    OpenHarmony 3.1 Release版本功能一览

    作为面向全场景、全连接、全智能时代的分布式操作系统,OpenHarmony通过将各类不同终端设备的能....
    的头像 瑞迅科技嵌入式 发表于 05-24 14:23 127次 阅读

    pywpsrpc WPS for Linux二次开发Python接口

    ./oschina_soft/gitee-pywpsrpc.zip
    发表于 05-24 14:20 12次 阅读
    pywpsrpc WPS for Linux二次开发Python接口

    vy类Vim编辑器

    ./oschina_soft/vy.zip
    发表于 05-24 11:56 7次 阅读
    vy类Vim编辑器

    AutoPublish简单易用的文章多平台发布工具

    ./oschina_soft/Autopublish.zip
    发表于 05-24 11:09 6次 阅读
    AutoPublish简单易用的文章多平台发布工具

    Chardet通用字符编码检测器

    ./oschina_soft/chardet.zip
    发表于 05-24 10:40 6次 阅读
    Chardet通用字符编码检测器

    ATM的应用权限访问控制概念介绍

    默认情况下,应用只能访问有限的系统资源。但某些情况下,应用为了扩展功能,需要访问额外的系统或其他应用....
    的头像 OpenAtom OpenHarmony 发表于 05-24 10:28 181次 阅读

    neomake异步插件

    ./oschina_soft/neomake.zip
    发表于 05-24 10:18 6次 阅读
    neomake异步插件

    nvim-code-kata nvim插件

    ./oschina_soft/nvim-code-kata.zip
    发表于 05-24 10:14 6次 阅读
    nvim-code-kata nvim插件

    stack-ide-nvim Neovim插件

    ./oschina_soft/stack-ide-nvim.zip
    发表于 05-24 10:12 6次 阅读
    stack-ide-nvim Neovim插件

    deoplete.nvim Neovim​异步完成框架

    ./oschina_soft/deoplete.nvim.zip
    发表于 05-24 09:52 6次 阅读
    deoplete.nvim Neovim​异步完成框架

    Nvim-R Neovim的R插件

    ./oschina_soft/Nvim-R.zip
    发表于 05-24 09:50 11次 阅读
    Nvim-R Neovim的R插件

    【人物访谈】熊磊:成功移植 OpenHarmony 到多套开发板,是最开心的事

    编者按:在OpenHarmony生态发展过程中,涌现了大批优秀的代码贡献者,本专题旨在表彰贡献、分享....
    的头像 jf_35791075 发表于 05-24 09:40 5次 阅读
    【人物访谈】熊磊:成功移植 OpenHarmony 到多套开发板,是最开心的事

    基于OpenHarmony的华为云IoT智慧路灯实现

    一、智慧路灯简介我们平时看到的传统路灯基本是通过定时开启、定时关闭来控制路灯亮灭,在夏天白昼时间长,....
    的头像 jf_35791075 发表于 05-24 09:27 3次 阅读
    基于OpenHarmony的华为云IoT智慧路灯实现

    notepad-pyqt5 PyQt记事本

    ./oschina_soft/gitee-notepad-pyqt5.zip
    发表于 05-24 09:20 27次 阅读
    notepad-pyqt5 PyQt记事本

    qutebrowser网页浏览器

    ./oschina_soft/qutebrowser.zip
    发表于 05-23 11:16 8次 阅读
    qutebrowser网页浏览器

    anonymousmail匿名邮箱系统

    ./oschina_soft/anonymousmail.zip
    发表于 05-23 11:04 6次 阅读
    anonymousmail匿名邮箱系统

    Mailnag邮件提示程序

    ./oschina_soft/mailnag.zip
    发表于 05-23 10:51 6次 阅读
    Mailnag邮件提示程序

    DASK适用于Python中的并行和分布式计算

    Dask 是一个灵活的开源库,适用于 Python 中的并行和分布式计算。
    的头像 NVIDIA英伟达 发表于 05-20 17:35 65次 阅读

    NVIDIA Triton助力腾讯PCG加速在线推理

      借助NVIDIA Triton 推理框架,配合 DALI/FIL/Python 等Backend....
    的头像 星星科技指导员 发表于 05-20 15:25 284次 阅读
    NVIDIA Triton助力腾讯PCG加速在线推理

    自动化测试框架unittes详解

    从事FPGA开发无论是仿真还是上板验证,总少不了各种各样的case遍历,手动执行起来就太麻烦了。尤其....
    的头像 FPGA之家 发表于 05-20 14:47 691次 阅读

    RAPPOR Google保密技术

    ./oschina_soft/rappor.zip
    发表于 05-20 09:19 27次 阅读
    RAPPOR Google保密技术

    DissidentX抗审查工具

    ./oschina_soft/DissidentX.zip
    发表于 05-20 09:18 17次 阅读
    DissidentX抗审查工具

    基于OpenHarmony实现智能猫眼

    RTSP 采用 Server/Client 模式,在本样例场景中 Hi3518EV300为RTSP ....
    的头像 HarmonyOS官方合作社区 发表于 05-20 09:16 134次 阅读

    PTVS Visual Studio的Python开发插件

    ./oschina_soft/PTVS.zip
    发表于 05-19 09:49 5次 阅读
    PTVS Visual Studio的Python开发插件

    SmartColorPicker Sublime颜色选择插件

    ./oschina_soft/SmartColorPicker.zip
    发表于 05-19 09:45 5次 阅读
    SmartColorPicker Sublime颜色选择插件

    styledPopup Sublime插件

    ./oschina_soft/st<x>yledPopup.zip
    发表于 05-19 09:44 5次 阅读
    styledPopup Sublime插件

    GutterColor Sublime Text3颜色插件

    ./oschina_soft/GutterColor.zip
    发表于 05-19 09:40 5次 阅读
    GutterColor Sublime Text3颜色插件

    Markdown​Editing Markdown编辑插件

    ./oschina_soft/MarkdownEditing.zip
    发表于 05-19 09:39 15次 阅读
    Markdown​Editing Markdown编辑插件

    GitGutter Sublime Text插件

    ./oschina_soft/GitGutter.zip
    发表于 05-19 09:35 3次 阅读
    GitGutter Sublime Text插件