人工智能-树莓派小车(2)——GPIO接口介绍

上次我们进行了系统的安装和环境的配置,实现了树莓派的第一次唤醒,以及更改唤醒词的演示,详细见人工智能之我与树莓派(1)

今天,我们进行进阶操作,研究如何通过语音,来控制GPIO端口,进而控制LED灯和小车。首先介绍GPIO接口和LED灯的使用。

GPIO接口介绍

树莓派与其他的开发板不同的是他有着40个GPIO口可以用来外部扩展,GPIO指的是General Purpose Input Output (通用输入/输出),是树莓派与其他硬件连接起来的桥梁。

树莓派GPIO接口实物图

树莓派 40PIN 引脚图

那么如何使用这些接口?开源领域具有良好的分享精神,树莓派同样也集成了各种库,最常用的有三个:

python GPIO

【开发语言】——python
【简单介绍】——该库更确切的名称为raspberry-gpio-python,树莓派官方资料中推荐且容易上手。python GPIO是一个小型的python库,可以帮助用户完成raspberry相关IO口操作。但是python GPIO库还没有支持SPI、I2C或者1-wire等总线接口。除了python GPIO之外,还有众多的python扩展库(例如webiopi),毫无疑问的说python非常适合树莓派,树莓派也非常适合python。

wiringPi

【开发语言】——C语言
【简单介绍】——wiringPi适合那些具有C语言基础,在接触树莓派之前已经接触过单片机或者嵌入式开发的人群。wiringPi的API函数和arduino非常相似,这也使得它广受欢迎。作者给出了大量的说明和示例代码,这些示例代码也包括UART设备,I2C设备和SPI设备等,毫无疑问地说wiringPi功能非常强大。

BCM2835 C Library

【开发语言】——C语言
【简单介绍】BCM2835 C Library可以理解为使用C语言实现的相关底层驱动,它给我的感觉更像STM32的库函数,BCM2835 C Library的驱动库包括GPIO、SPI和UART等,可以通过学习BCM2835 C Library熟悉BCM2835相关的寄存器操作。如果有机会开发树莓派上的linux驱动,或自主开发python或PHP扩展驱动,可以从BCM2835 C Library找到不少的“灵感”。

在这里,基于Python是最简单易用的编程语言之一以及其 丰富的扩展能力,我当然选择的是Python的RPI.GPIO库,下面简单介绍一下它的用法:

RPI.GPIO

引脚编号方式

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

  • 第一种方式是使用BOARD编号系统。该方式参考 Raspberry Pi 主板上 P1 接线柱的针脚编号。
  • 第二种方式是使用BCM编号。这是一种较底层的工作方式 – 该方式参考 Broadcom SOC 的通道编号。

所有的这两种编码方式所对应的位置,你都可以在上面的图中找到对应的位置。

在使用之前必须指定所使用的方式:

GPIO.setmode(GPIO.BOARD)
GPIO.setmode(GPIO.BCM)

配置通道

在使用某个接口之前,还需要为每个用于输入或输出的针脚配置通道。通道有两种,一种是IN,一种是OUT。

GPIO.setup(channel, GPIO.IN)
GPIO.setup(channel, GPIO.OUT)

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

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

当GPIO的状态是OUT时,还可以指定端口的初始状态,同样是两种HIGH和LOW,对应着输出高电平和低电平。

输入

读取 GPIO 针脚的值:

GPIO.input(channel)

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

输出

设置 GPIO 针脚的输出状态:

GPIO.output(channel, state)

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

清理

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

GPIO.cleanup()

警告

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

禁用该警告消息(不会产生副作用,仅会覆盖原来的端口电平信息):

GPIO.setwarnings(False)

通过GPIO口控制LED灯

安装RPI.GPIO库

# 下载 
$ wget https://pypi.python.org/packages/e2/58/6e1b775606da6439fa3fd1550e7f714ac62aa75e162eed29dbec684ecb3e/RPi.GPIO-0.6.3.tar.gz
# 解压缩 
$ tar xvzf RPi.GPIO-0.6.3a.tar.gz
# 进入解压之后的目录 
$ cd RPi.GPIO-0.6.3a 
# 启动安装 
$ sudo python setup.py install

主代码

#!/usr/bin/env python
# encoding: utf-8

import RPi.GPIO
import time

# 指定GPIO口的选定模式为GPIO引脚编号模式
RPi.GPIO.setmode(RPi.GPIO.BCM)

# 指定GPIO14的模式为输出模式,且初始状态为低电平。
# 如果上面GPIO口的选定模式指定为主板模式的话,这里就应该指定8号而不是14号。
RPi.GPIO.setup(14, RPi.GPIO.OUT,initial = GPIO.LOW)

# 循环10次
for i in range(0, 10):
    # 让GPIO14输出高电平(LED灯亮)
    RPi.GPIO.output(14, True)
    # 持续一段时间
    time.sleep(0.5)
    # 让GPIO14输出低电平(LED灯灭)
    RPi.GPIO.output(14, False)
    # 持续一段时间
    time.sleep(0.5)

RPi.GPIO.cleanup()
# 清理GPIO口

系列教程

人工智能-树莓派小车(1)——DuerOS语音唤醒
人工智能-树莓派小车(2)——GPIO接口介绍
人工智能-树莓派小车(3)——GPIO控制小车
人工智能-树莓派小车(4)——通过语音玩转智能小车
人工智能-树莓派小车(5)——用微信控制智能小车

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,222评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,455评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,720评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,568评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,696评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,879评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,028评论 3 409
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,773评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,220评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,550评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,697评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,360评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,002评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,782评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,010评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,433评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,587评论 2 350

推荐阅读更多精彩内容