0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

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

3天内不再提示

不同GPIO类库的区别

CHANBAEK 来源:和娃一起玩树莓派 作者:老孟K 2023-07-02 15:03 次阅读

重点来讲解一下什么是类库,如何使用,以及不同的GPIO类库的区别。

什么是类库

类库是别人写好的解决某类或某个问题的可以重复使用的代码集合。在面向对象编程(我们今后会讲到,可以简单理解为把程序设计为类似现实世界中各种对象的方式来解决问题)的编程语言里,类库里面包括了很多别人设计好的类对象,可以直接拿来使用,比如我们代码里面的sleep方法就来自于time库,可以让程序暂停(睡觉)指定的时间。有了类库,我们就不需要所有的事情都自己解决,对于别人已经解决的问题,可以直接使用他写好的类库,就像我们做机器人,轮子可以用现成的,不需要我们从原料开始做,选择合适尺寸,材料的轮子就行了,所以编程时要善于利用类库,不要做“重复发明轮子”的事情。类库也像我们搭积木是使用的不同形状和大小的积木块,拿来用就可以做出自己需要的东西。

类库可以分为两大类:

  • 编程语言自带的类库,比如Python编程语言自带的OS,sys,logging库,RPi.GPIO和time也是自带类库。
  • 第三方类库:除上面自带类库外的其他非官方类库都是。比如现在机器学习,数据分析常见的numpy,matplotlib 等。

from与import

Python有2种方式来使用类库,分别是import 和from。我们先看看import:

import 类库名1 [as 别名1], 类库名2 [as 别名2],...

使用这种语法格式的 import 语句,会导入指定类库中的所有成员(包括变量、函数、类等)。当需要使用类库中的成员时,需用该类库名(或别名)作为前缀,否则 Python 解释器会报错。

from的语法如下:

from 类库名 import 成员名1 [as 别名1],成员名2 [as 别名2],...

from只会导入模块中指定的成员,而不是全部成员。当程序中使用该成员时,无需附加任何前缀,直接使用成员名(或别名)就可以了。

我们的控制发光二极管的程序中,可以看到这2种使用类库的方式:

import RPi.GPIO as GPIO    #需要使用别人写好的类库
from time import sleep     #需要使用别人写好的类库
GPIO.setmode(GPIO.BCM)
GPIO.setup(27,GPIO.OUT)  #这2句把GPIO27设置为输出模式
while True:
    GPIO.output(27,True)   #在GPIO输出高电位1,此时LED
    sleep(1)             #等1秒
    GPIO.output(27,False)  #在GPIO输出低电位0,此时LED灭
    sleep(1)            #等待1秒

import引入了RPi.GPIO类库,并命名为别名GPIO,在程序中使用时,都需要加上GPIO这个别名,如GPIO.setmode(GPIO.BCM).

用from time import sleep引入了sleep,在代码中使用时,就不需要加上time这里类库名,而是直接使用sleep了。

GPIO的类库比较

上面讲了怎么把类库引入程序中,要想用好类库,还需要学习类库中各种类,函数等如何使用,此时就需要看类库对应的官方文档或者参考相关的文档了。

比如RPi.GPIO类库的官方文档网站是:

https://sourceforge.net/p/raspberry-gpio-python/wiki/BasicUsage/

一般这种网站都是英文的,比较考验大家英文水平,此时可以搜索国内的相应中文文档。

RPi.GPIO库

RPi.GPIO是比较老的GPIO库,使用时需要注意它有2种GPIO的引脚规则,分别为BOARD和BCM,使用时需要先指定用哪种规则,对应的代码为:

GPIO.setmode(GPIO.BOARD) #设置为BOARD模式
  # or
GPIO.setmode(GPIO.BCM)   #设置为BCM模式

我们先看看下面的图片以便理解接下来的讨论。

图片

BOARD模式是在程序中使用的是引脚的物理数字,也就是第几个引脚。BCM模式使用的是引脚的功能定义,比如GPIO27它的物理引脚数字是13,那么设置为BOARD模式时,我们在程序中输入的引脚数字应该是13

GPIO.setmode(GPIO.BOARD)
GPIO.setup(13,GPIO.OUT)  #把第13引脚(GPIO27)设置为输出模式

设置为BCM模式时,同样的引脚设置为输出模式代码为:

GPIO.setmode(GPIO.BCM)  
GPIO.setup(27,GPIO.OUT) #把GPIO27(第13引脚)设置为输出模式

大家使用时一定要注意区别。

使用RPi.GPIO库时,基本的使用方法是:

  1. 先设置引脚模式为BOARD还是BCM
  2. 设置引脚为OUTPUT(输出)还是INPUT(输入)
  3. 控制或读取引脚的数据。

想一想:如果电路连接不变,改用BOARD模式,我们的控制二极管程序应该如何修改呢?)

gpiozero库

大家可以看到使用RPi.GPIO库还是有点麻烦,于是有人在它的基础上开发了一个新的类库,让大家更方面的来控制GPIO,这个类库的名字叫做gpiozero,它的使用文档在这里:

https://gpiozero.readthedocs.io/en/stable/index.html

gpiozero是树莓派官方推荐的学习GPIO编程的类库,它创建了LED类用来控制发光二极管,Button类用来读取按钮状态,MotionSensor用于动作传感器等非常多的对象,我们可以直接使用。

使用它控制发光二极管的代码特别简单,还是以控制连接到GPIO27引脚的LED为例,代码如下:

from gpiozero import LED
from time import sleep


red = LED(27)     #创建一个led对象,命名为red,你可以可以用其他名字


while True:
    red.on()
    sleep(1)
    red.off()
    sleep(1)

可以看到gpiozero其实默认使用了BCM模式,只是我们不需要写在代码里了。

用gpiozero库,我们只需要定义一个led对象,然后调用对象的on, off方法就可以控制发光二级管了,对比RPi.GPIO,简单多了。

除了刚才介绍的这2个类库,还有其他的GPIO类库,比如pigpio,这里就不介绍了。

下一讲我们来聊聊如何通过这2个类库读取按钮的状态。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 编程语言
    +关注

    关注

    10

    文章

    1936

    浏览量

    34563
  • GPIO
    +关注

    关注

    16

    文章

    1189

    浏览量

    51858
  • 机器学习
    +关注

    关注

    66

    文章

    8366

    浏览量

    132341
  • python
    +关注

    关注

    55

    文章

    4777

    浏览量

    84397
收藏 人收藏

    评论

    相关推荐

    使用STM32 HAL进行GPIO控制的实例

    在基于STM32微控制器的嵌入式系统开发中,GPIO(GeneralPurposeInput/Output)控制是其中最基本、最常见的操作之一。通过使用STM32的HAL,可以轻松地对GPIO进行配置和控制。本文将演示如何使用
    的头像 发表于 12-21 15:22 3056次阅读

    不可错过的三GPIO硬件设计指南!

    今天我们学习三GPIO硬件设计,这三绝对是不可错过的,本文将把三设计的重要性展示出来:
    的头像 发表于 11-04 09:45 667次阅读
    不可错过的三<b class='flag-5'>类</b><b class='flag-5'>GPIO</b>硬件设计指南!

    请问GPIO_MODE中的GPIO_MODE_IT_RISING和GPIO_MODE_EVT_RISING的区别是什么

    在学习CubeMX软件配置GPIO中断时,看到如图所示的选项:立刻就比较困惑,查了HAL后,看到GPIO_MODE的确有这样的定义如图:自己还在学习中,看了HAL的帮助文档,但不知道GPIO
    发表于 01-22 05:28

    请问这两访问有什么区别

    关于cpu访问GPIO、UART、I2C等接口,与cpu访问FLASH、ROM、SDRAM的区别?cpu访问GPIO、UART等外设,是通过特殊功能的寄存器,不也是在访问内存上的某一地址吗?而cpu访问FLASH、ROM也是访问
    发表于 09-10 05:45

    标准和HAL有啥区别

    ,程序瘫痪了,所以今天咱们来看看标准和HAL有啥区别,各个他的优点在哪里。标准串口通信GPIO
    发表于 08-04 08:22

    GPIO输出--蜂鸣器

    蜂鸣器)。 学习目的:了解如何使用开发以及为与寄存器操作的区别,学会如何控制GPIO输出。 【*】实验操作: 下载本程序到开发板,复位板子即可,蜂鸣器会响。 【*】注意事项: 无
    发表于 12-12 19:02 4次下载

    STM32F407标准学习笔记-GPIO

    STM32F407标准学习笔记-GPIO头文件 gpio.h枚举-列举同一寄存器的不同选项typedef enum{ GPIO_Low_Speed = 0x00, /*!
    发表于 11-29 15:51 46次下载
    STM32F407标准<b class='flag-5'>库</b>学习笔记-<b class='flag-5'>GPIO</b>

    STM32G031K LL使用 - GPIO

    最近使用STm32G031K6做一款IOT产品,选择了用最新LL进行开发,因为知其那对LL了解很少,所以开始的时候踩了很多坑,为防以后继续踩坑,现在做一个记录。GPIO初始化:void
    发表于 12-02 17:06 16次下载
    STM32G031K LL<b class='flag-5'>库</b>使用 - <b class='flag-5'>GPIO</b>

    HALGPIO八种工作模式

    众所周知,STM32的GPIO的工作模式有八种,但是打开HAL发现,有12中可以供自己设置。先不要懵,下面解释一下这12种工作模式的区别。实际上这12种是包含在通用的8种工作模式之中的,只是细分
    发表于 12-05 13:06 8次下载
    HAL<b class='flag-5'>库</b>的<b class='flag-5'>GPIO</b>八种工作模式

    【STM32】标准与HAL对照学习教程三--使用库函数配置GPIO点亮LED灯

    【STM32】标准与HAL对照学习教程三--使用库函数配置GPIO点亮LED灯一、前言二、准备工作三、LED硬件电路四、使用标准工程点亮LED灯1、
    发表于 12-05 14:06 15次下载
    【STM32】标准<b class='flag-5'>库</b>与HAL<b class='flag-5'>库</b>对照学习教程三--使用库函数配置<b class='flag-5'>GPIO</b>点亮LED灯

    00_STM32F4学习_HAL_GPIO函数

    00_STM32F4学习_HAL_GPIO函数最近重学STM32,打算从HAL+STM32CubeMX方式进行学习,将学习中用过及查阅整理的知识在此整理,如有错误望指正。1、初始化void
    发表于 12-05 14:21 12次下载
    00_STM32F4学习_HAL<b class='flag-5'>库</b>_<b class='flag-5'>GPIO</b>函数

    HAL-GPIO介绍

    一.GPIO 使用1.输入输出模式(8种)GPIO_Mode_AIN #模拟输入GPIO_Mode_IN_FLOATING #浮空输入GPIO
    发表于 12-28 19:32 2次下载
    HAL<b class='flag-5'>库</b>-<b class='flag-5'>GPIO</b>介绍

    【STM32】标准与HAL对照学习教程特别篇--GPIO详讲

    【STM32】SMT32标准与HAL对照学习教程特别篇--GPIO详讲一、前言二、GPIO简介1、定义2、分类3、复用三、GPIO工作模
    发表于 01-13 16:12 12次下载
    【STM32】标准<b class='flag-5'>库</b>与HAL<b class='flag-5'>库</b>对照学习教程特别篇--<b class='flag-5'>GPIO</b>详讲

    单片机GPIO配置不同输出速度有何区别

    不管标准外设,还是STM32CubeMX配置GPIO输出引脚,都会有速度GPIO_InitStruct.Speed这个选项。
    发表于 02-08 15:24 3次下载
    单片机<b class='flag-5'>GPIO</b>配置不同输出速度有何<b class='flag-5'>区别</b>?

    硬件设计技巧:三GPIO接口的实用指南

    今天教大家一些关于硬件设计的的技巧,只要掌握好三GPIO,轻松玩好硬件设计。
    的头像 发表于 11-05 12:22 134次阅读
    硬件设计技巧:三<b class='flag-5'>类</b><b class='flag-5'>GPIO</b>接口的实用指南