文档章节

RPi.GPIO 模块使用基础

沉淀岁月
 沉淀岁月
发布于 2017/03/22 16:00
字数 1027
阅读 14
收藏 0
点赞 0
评论 0

RPi.GPIO 模块程序包提供了一个在 Raspberry Pi 中控制 GPIO 的类。

注意,该模块不适合应用到追求实时性或计数周期的应用中。这是由于您无法预测 Ptyhon 何时繁忙,以及资源回收的时间。而且它是运行在基于 Linux 核心的系统中,也不合适用于实时应用 – 原因在于其它进程可能获得更高的 CPU 优先级。如果您一定要追求实时操作的性能,可以考虑购买一块 Arduino 主板http://www.arduino.cc!

还需要注意一点,目前的版本还不支持 Raspberry Pi 的 SPI、I2C、1-wire、串口等功能。计划在不久的将来会实现的!

本文是 RPi.GPIO 模块文档系列文章的第一篇,除本文外还包括以下几篇:

使用 RPi.GPIO 模块的输入(Input)功能
使用 RPi.GPIO 模块的输出(Output)功能
使用 RPi.GPIO 模块的脉宽调制(PWM)功能

导入模块

导入 RPi.GPIO 模块:

1

import RPi.GPIO as GPIO

通过该操作,您可以将模块名称映射为 GPIO,以便接下来您其它脚本进行使用。

导入模块并检查它是否导入成功,可以尝试:

1

2

3

4

try:

    import RPi.GPIO as GPIO

except RuntimeError:

    print("导入 RPi.GPIO 时出现错误!这可能由于没有超级用户权限造成的。您可以使用 'sudo' 来运行您的脚本。")

针脚编号

目前有两种方式可以通过 RPi.GPIO 对 Raspberry Pi 上的 IO 针脚进行编号。

第一种方式是使用 BOARD 编号系统。该方式参考 Raspberry Pi 主板上 P1 接线柱的针脚编号。使用该方式的优点是无需考虑主板的修订版本,您硬件始终都是可用的状态。您将无需从新连接线路和更改您的代码。

第二种方式是使用 BCM 编号。这是一种较低层的工作方式 – 该方式参考 Broadcom SOC 的通道编号。使用过程中,您始终要保证主板上的针脚与图表上标注的通道编号相对应。您的脚本可能在 Raspberry Pi 主板进行修订版本更新时无法工作。

指定您所使用的方式(必须指定):

1

GPIO.setmode(GPIO.BOARD)

或者

1

GPIO.setmode(GPIO.BCM)

警告

可能您的 Raspberry Pi 的 GPIO 上同时有多个脚本/循环。因此,如果 RPi.GPIO 检测到某个针脚被设置为其它用途而非默认的状态(默认为输入),您会在尝试配置某脚本时得到警告消息。

禁用该警告消息:

1

GPIO.setwarnings(False)

配置通道

您需要为每个用于输入或输出的针脚配置通道。

配置为输入的通道:

1

GPIO.setup(channel, GPIO.IN)

(通道编号是基于您所使用的编号系统所指定的(BOARD 或 BCM)。)

更多关于输入通道的进阶信息可以在这里找到。

配置为输出的通道:

1

GPIO.setup(channel, GPIO.OUT)

(通道编号是基于您所使用的编号系统所指定的(BOARD 或 BCM)。)

您还可以指定输出通道的初始值:

1

GPIO.setup(channel, GPIO.OUT, initial=GPIO.HIGH)

输入

读取 GPIO 针脚的值:

1

GPIO.input(channel)

(通道编号是基于您所使用的编号系统所指定的(BOARD 或 BCM)。)这将返回 0 / GPIO.LOW / False 或者 1 / GPIO.HIGH / True。

输出

设置 GPIO 针脚的输出状态:

1

GPIO.output(channel, state)

(通道编号是基于您所使用的编号系统所指定的(BOARD 或 BCM)。)

状态可以为 0 / GPIO.LOW / False 或者 1 / GPIO.HIGH / True。

清理

在任何程序结束后,请养成清理用过的资源的好习惯。使用 RPi.GPIO 也同样需要这样。恢复所有使用过的通道状态为输入,您可以避免由于短路意外损坏您的 Raspberry Pi 针脚。注意,该操作仅会清理您的脚本使用过的 GPIO 通道。

在您的脚本结束后进行清理:

1

GPIO.cleanup()

Raspberry Pi 修订版本和 RPi.GPIO 版本

检测 Raspberry Pi 主板的修订版本:

1

GPIO.RPI_REVISION

检测 RPi.GPIO 的版本:

1

GPIO.VERSION

本文转载自:http://shumeipai.nxez.com/2016/09/28/rpi-gpio-module-basics.html

共有 人打赏支持
沉淀岁月
粉丝 25
博文 257
码字总数 91615
作品 0
朝阳
高级程序员
为树莓派接上第一个传感器

本来以为接传感器没什么好写的,按照说明书做就可以了,但发现还是有些技术细节需要解释的。 首先,我所用的传感器开发商应该是针对国外开发的(尽管是国内的公司)。它里面有个install.sh的...

黄冠能
2015/06/24
2.3K
0
树莓派动手实验-1.LED实验

之前折腾树莓派都是纯软的,今天心血来潮想给女儿张奕晨做个智能小车玩,于是一步步走上软硬兼施的路上~(≧▽≦)/~啦啦啦。 第一步,先点亮个LED再说。 硬件准备: PI,面包板,2根杜邦线(一...

quanpower
2013/11/28
0
3
在树莓派3B上使用RPi.GPIO

一直都听说树莓派功能很强大,这几天就买了个pi3试玩一下。拿到手装好系统,就开始测试GPIO口,点亮一个LED。直接用python去操作GPIO好像不行,还好网上有很多python封装包可以用。RPi.GPIO使...

e哥
2016/10/29
1K
6
使用webiopi控制树莓派的GPIO引脚电平(WEB在线管理)

1、必须安装python开发版,即python-dev,不然后面很多软件都会安装不成功,提示目录无法找到之类的。(教训) 正常情况下,以上在线安装命令即可安装成功,但运气不好的是,笔者在安装时,在...

quanpower
2014/04/20
0
0
用Python让Raspberry Pi“动”起来

【编者按】本文是来自奥松机器人社区的投稿,作者为小强之工,真名贝振权,无线电、电子、嵌入式爱好者。 前段时间,接触了一款在开源硬件界被称为是“人气之王”的树莓派(Raspberry Pi)袖珍...

RagingTyphoon
2015/08/16
0
0
Raspberry Pi GPIO 使用入门

Raspberry Pi有许多的GPIO(General Purpose Input Output:通用输入/输出),可以用来控制和读取数字电路中TTL电平的逻辑0和逻辑1。我们要使用RPi的GPIO首先要知其GPIO的定义,常用的有两种...

酸酸苹果汁
2014/01/13
23.4K
3
树莓派RaspberryPi的RPi.GPIO使用指南

Python操作树莓派GPIO的必要准备 sudo apt-get install python-setuptoolssudo easy_install -U distributesudo apt-get install python-devsudo easy_install RPi.GPIO 树莓派GPIO定义图 PR......

quanpower
2013/11/26
0
0
树莓派使用红外感应传感器

一个简单的被动式红外线传感器可以让你检测运动状态。这个传感器有三个引脚,可用于连接到Raspberry Pi的GPIO端。当该模块检测到运动状态时,其中一个引脚会输出高电压,输出电压大约为3.3V。...

风穴眼
2016/10/06
0
0
banana pi gpio testing

安装GPIO库 (1)更新源: $ sudo apt-get update (2)安装python: $ sudo apt-get install python-dev (3)安装python-pip( python-pip是一个可以替代easy_install的安装和管python软件...

sinovoip
2014/05/16
0
0
通过WEB控制树莓派RGB灯光

前段时间玩了下RPi.GPIO,感觉挺有意思的。之后也看了wiringPi和BCM2835库。 wiringPi:http://wiringpi.com/ BCM2835:http://www.airspayce.com/mikem/bcm2835/ 如果是用python操作树莓派G...

e哥
2016/11/04
663
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

JPA @MappedSuperclass 注解说明

基于代码复用和模型分离的思想,在项目开发中使用JPA的@MappedSuperclass注解将实体类的多个属性分别封装到不同的非实体类中。 1.@MappedSuperclass注解只能标准在类上:@Target({java.lang....

海博1600
15分钟前
0
0
Scala Configuration 相关API

Play使用了 Typesafe config library,但是也提供了一个有着更多Scala高级特性的的 Configuration 封装。不熟悉Typesafe配置的开发者可以移步 configuration文件的语法和特性文档。 读取配置...

Landas
今天
1
0
使用cookie技术 记住账号

1. 效果 2. 实现过程 2.1 前端 将用户的选中传递给后台 这个参数的获取是 参考:https://my.oschina.net/springMVCAndspring/blog/1860498 // var rememberLogin = $("#rememberLoginId").i...

Lucky_Me
今天
1
0
《趣谈网络协议》02之网络分层的真实含义

一、提出问题 1.提出问题 当你听到什么二层设备、三层设备、四层 LB 和七层 LB 中层的时候,是否有点一头雾水,不知道这些所谓的层,对应的各种协议具体要做什么“工作”? 2.这四个问题你弄...

aibinxiao
今天
2
0
Python3学习日志二 Python中的集合set和字典dict

1.集合set 定义一个集合set 我们可以看到定义集合set有两种不同的形式,如果要定义一个空的集合set不能用{}而是要用set();另外,集合是无序的,而且set中的元素是不可重复的,如果你定义了一...

Mr_bullshit
今天
0
0
adb 操作指令详解

ADB,即 Android Debug Bridge,它是 Android 开发/测试人员不可替代的强大工具,也是 Android 设备玩家的好玩具。 注:有部分命令的支持情况可能与 Android 系统版本及定制 ROM 的实现有关。...

孟飞阳
今天
0
0
nodejs安装以及环境配置(很好的node安装和配置文章,少走很多弯路)

一、安装环境 1、本机系统:Windows 10 Pro(64位) 2、Node.js:v6.9.2LTS(64位) 二、安装Node.js步骤 1、下载对应你系统的Node.js版本:https://nodejs.org/en/download/ 2、选安装目录进...

sprouting
今天
1
0
Redisson

了解了Redisson,发现使用挺简单的,接下来准备深入学习一下。 Redisson介绍 Redisson是架设于Redis基础之上的一个Java驻内存数据网格(In-Memory Data Grid) Redisson在基于NIO的Netty框架上...

to_ln
今天
0
0
python有哪些好玩的应用实现,用python爬虫做一个二维码生成器

python爬虫不止可以批量下载数据,还可以有很多有趣的应用,之前也发过很多,比如天气预报实时查询、cmd版的实时翻译、快速浏览论坛热门帖等等,这些都可以算是爬虫的另一个应用方向! 今天给...

python玩家
今天
0
0
python爬虫日志(3)-爬去异步加载网页

在浏览器检查元素页面中,选取Network中的XHR选项即可观察每次加载页面,网页发出的请求,观察url的规律即可利用封装的函数对每一页进行爬取。

茫羽行
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部