第5章 用树莓派点亮LED灯

   用树莓派点亮一个LED灯是非常简单的事情,但却非常重要,是利用GPIO控制外部硬件设备的基础,机器人的大部分功能都可以通过操纵GPIO来实现的。换句话说,能控制一个LED灯,就能让机器人动起来。本章将的主要内容如下。

  • 搭建一个树莓派多功能实验平台的材料及其功能用途。
  • 树莓派的GPIO引脚功能和基本用法。
  • 点亮一个LED灯的电路、程序设计思路和代码。

5.1 搭建实验平台

   为便于后续的实验,我们首先需要搭建一个多功能实验平台(见图5.1,含本章所需材料),各部件的功能用途如下。

图 5.1 多功能实验平台

  • 1:树莓派3B+型主板(含电源)
       一块树莓派3B+型主板(含电源),该主板应配备有一张已经安装好Raspbian系统的MicroSD卡。

  • 2:面包板
       实验过程中,面包板非常适用于电子电路的组装和调试,各种电子元器件可以根据需要随意插入或拔出,而无需焊接,节省了电路的组装时间,而且元件可以重复使用。

  • 3:T型GPIO扩展版
       GPIO扩展版上标有GPIO引脚的功能,与面包板配合使用非常便于对GPIO进行外接。

  • 4:40P排线
       用于连接树莓派与T型GPIO扩展版,长度适中即可。

  • 5:实验平台底座
       使用一块亚克力板作为实验平台的底座,用于固定树莓派主板和面包板,以便于实验操作,同时对树莓派主板形成一定的保护。

  • 6:万用表
       在进行GPIO硬件控制调试的时候,如果实验结果不是事先所预计的,那么我们可以使用万用表对电路进行简单的测试,排查问题。

  • 7:LED灯
       发光二极管LED是一种廉价和高效的光源,常在电路及仪器中作为指示灯,或者组成文字或数字显示。LED灯非常便于显示GPIO引脚的输出状态,在开发树莓派外部硬件控制程序时,可以先使用LED灯确定GPIO引脚输出正确后再连接要控制的硬件,避免由于GPIO输出错误而导致外部硬件损坏。本章我们需要用到到一个红色的LED灯,需要注意的是LED较长的引脚为正极,较短的引脚为负极。

  • 8:电阻
       实验过程中,请根据实际选择必要的电阻,本章需要用到一个470Ω或1kΩ的电阻。

  • 9:杜邦线
       用于连接各电子元件,无需焊接,本章仅需要用到两根公对公的杜邦线。为便于识别,建议遵循有关规范,连接电源(GPIO引脚)的线采用红色线连接,接地端使用黑色线连接。

5.2 GPIO引脚

   前面我们讲过,树莓派与普通计算机最大的区别就在于它拥有若干个可编程的GPIO,可以用来控制外部设备、从外部设备获取信息或是和硬件进行数据交互等,因此了解各个GPIO引脚的功能和使用方法是非常重要的。树莓派GPIO接口已发布了3个版本,原始的两个版本仅有26个引脚,“+”型树莓派版本有40个引脚,本章及后续章节我们将主要介绍“+”型树莓派版本的GPIO。
   树莓派GPIO接口有BOARD、BCM和wiringPi三种编号方式,三种编码方式的对应关系如表5.1所示。

表 5.1 树莓派40Pin引脚对照表

  • BOARD
       BOARD编号方式是树莓派主板上P1接头上的的引脚号,从左到右,从上到下进行编号,左边为奇数,右边为偶数,支持BOARD编号方式的库主要有RPi.GPIO、WiringPi-Go。

  • BCM
       BCM编号侧重于CPU寄存器,是根据Broadcom SOC的GPIO寄存器编号的,支持的库比较多,用的也比较多,是后续章节主要使用的编号方式。为便于使用BCM编号方式,建议采用类似“T型GPIO扩展版”或“GPIO参考卡片”等配件,让引脚功能一目了然。

  • wiringPi
       wiringPi编号侧重于实现逻辑,GPIO端口从0开始编号,WiringPi库是支持wiringPi编号方式的最主要GPIO库。

   B+型树莓派主板的40个引脚提供了17个GPIO专用接口,1个UART总线接口、1个SPI总线接口、1个I2C总线接口、2个5V电源接口、2个3.3V电源接口、8个地接口,使用的时候一定先要清楚选择了那套编号方式,相应的库是否支持。

提示:

  • 通电后不要使用金属物体(如螺丝刀等)接触GPIO接口,或短接GPIO引脚。
  • 外接输入输出设备时,要先仔细了解设备的额定功率(含电压和电流),不要直接连接高功耗元件(如直流电机等),或输出电压超3.3V的设备。当使用低功率LED时,最好在LED的正极串联一个限流电阻。
  • GPIO工作在3.3V逻辑电平上,0V表示逻辑0,3.3V则表示逻辑1。调试GPIO程序时,可以使用万用表测试GPIO引脚电压,判断输出是否正确。
  • GPIO接口仅提供数字的输入和输出,当需要用到模拟输入时,可以使用ADC芯片或采用电阻式传感器来实现。

5.3 点亮LED灯

   在前面的章节中,我们已经介绍了大量的基础理论,接下来我们将进入实战,开始有趣的实验。本节将介绍如何使用树莓派控制一个LED灯,您将看到一个LED灯在树莓派的控制下不停的闪烁。

5.3.1 实验电路

   本实验的电路原理图如图5.2所示,一个红色发光二极管正极通过一个限流电阻串连到树莓派的GPIO19上,负极则连接到树莓派的GND上,从而形成一个完整的回路。

图 5.2 树莓派点亮LED电路图

   GPIO引脚的输出电压约为3.3V,高于LED上约1.7V的压降,如果直接串联,会有一个非常大的电流通过LED,这个电流通常大到可以损坏LED,甚至供电设备。因此,需要在LED和电源(GPIO引脚)间串联一个电阻限制电流,从而对LED和为其供电的GPIO引脚提供保护。不同厂家,不同颜色压降略有区别,我们假设所用LED的压降为1.8V,GPIO引脚的电流为3mA,限流电阻大小的计算方法如下:

R = ( 3.3V - 1.8V ) / 3mA = 500Ω  

   因此,我们选择使用一个1kΩ的电阻。该电路的最终实物连线图如图5.3所示。

图 5.3 电路实物连接图

提示:

  • 除了使用以上的方法计算限流电阻的值,您还可以访问类似实用工具大全http://tool.520101.com/网站,使用网站提供的LED限流电阻计算器进行计算。实际上,这个网站还提供了不少实用的电子电路计算工具,非常有助于我们后续章节的学习。
  • 限流电阻的阻值不应太小,也不能太大。太小,则起不到限流的作用;太大,则LED的亮度会比较暗。
  • 为保障树莓派主板和电子元件的安全,连线工作应在为断电的情况下进行,并在确定线路连接无误后再通电。

5.3.2 程序思路

   程序的基本设计思路如下:

BEGIN  
    引入GPIO库  
    引入time库  
    将GPIO19设置为输出模式  
    DO FOREVER  
        点亮LED
        等待1秒钟
        熄灭LED
        等待1秒钟
    ENDO
    清理释放GPIO资源
END

5.3.3 程序代码

   Python操作GPIO需要用到RPi.GPIO库,Raspbian系统默认未安装这个库,所以请先使用XShell远程登录树莓派运行以下命令安装RPi.GPIO库。

sudo apt install python3-rpi.gpio  

   RPi.GPIO库安装完毕后,按照第4章介绍的方法新建一个项目,然后输入以下代码并运行,运行效果如图5.4所示。程序的详细说明见注释,这里我们使用了try: Finally: 结构捕捉异常,确保当我们中断程序时(如使用Ctrl+C或者操作系统提供的方法),GPIO.cleanup()函数能被执行,以清理释放GPIO资源。在Pycharm下运行程序时,点击工具栏上的Stop按钮也可以中断程序。

import RPi.GPIO as GPIO                 # 引入GPIO模块  
import time                             # 引入time模块  

GPIO.setmode(GPIO.BCM)                  # 使用BCM编号方式  

GPIO.setup(19, GPIO.OUT)                # 将GPIO19设置为输出模式  

if __name__ == '__main__':
    try:
        while True:                     # 无限循环  
            GPIO.output(19, True)       # 将GPIO19设置为高电平,点亮LED  
            time.sleep(1)               # 等待1秒钟  
            GPIO.output(19, False)      # 将GPIO19设置为低电平,熄灭LED  
            time.sleep(1)               # 等待1秒钟  
    finally:
        GPIO.cleanup()                  # 清理释放GPIO资源,将GPIO复位  
图 5.4 实验运行效果

5.4 本章小结

   本章首先介绍搭建一个树莓派多功能实验平台所需的材料及其功能用途,然后详细介绍了树莓派GPIO引脚的三种编号方式、功能和使用注意事项,最后介绍用树莓派点亮一个LED灯的电路、程序设计思路和代码。

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

推荐阅读更多精彩内容