在树莓派中使用Python编程实现对LED灯的控制

电子说

1.3w人已加入

描述

一、树莓派与Python语言编程

树莓派是一块仅为信用卡般大小的微型电脑,可用于嵌入式开发和计算机编程,目前在中小学创客教育活动领域有着极为广泛的应用。借助于扩展板及“积木”编程(比如古德微机器人网站),中小学生就可以比较轻松地使用树莓派开发出例如超声波测距、定时闹钟、声控楼道灯、倒车提醒器等具有实际应用价值的“产品”,甚至还有智能语音输出、文字识别等更为高端的人工智能方面的应用(与百度AI关联)。作为树莓派的编程“黄金搭档”,Python语言是目前正在广泛使用的通用高级编程语言,它主要是为了强调代码可读性而开发的,语法允许使用更少的代码行来表达概念;配合使用丰富的通用型传感器和功能强大的语言“库”模块,使用Python语言编程进行创客实验已经成为树莓派最为强势的应用之一(如图1所示)。

图1

二、简易红绿灯实验的预备知识

1.实验的预期效果三只并列排布的LED灯依次闪亮——先是绿灯亮10秒,熄灭;接着是黄灯持续闪烁三次,每次1秒;然后是红灯亮10秒,熄灭,再绿灯亮10秒……反复循环这一过程,这是生活中最为常见的十字路口一组红绿灯中的雏形。

2.实验器材树莓派(带电源线)主板一块、红黄绿LED灯各一只、六根母对母杜邦线,一台联网电脑(或直接给树莓派接上显示器、鼠标和键盘)。

3.树莓派的40Pin引脚树莓派主板一侧有两排引脚,共40Pin(物理引脚BOARD编码是从1依次到40)。在树莓派的命令行窗口(通过远程桌面连接)中输入“gpioreadall”命令,可显示出所有的引脚编号及功能对应关系(如图2所示)。

python

图2

通常情况下,Python语言编程库都是使用BCM编码(WiringPi编码一般应用于C++等编程平台),这种编码依据是BCM2835芯片的GPIO寄存器编号。如果按照功能来分类,除了8个GND(接地)端、3.3V和5V的电源正极各两个之外,最为主要的部分就是17个可编程的GPIO(GeneralPurposeInput/Output:“通用型输入输出接口”),其BCM编码分别是0-7、21-29两组(物理引脚位置并非连续分布),可以用来驱动传感器、舵机等各种外设。使用树莓派GPIO引脚与外设连接时必须要仔细,在确定好待用的BCM编码号后再与物理引脚一一对应。本次实验所使用的红、黄、绿三只LED灯的长引脚(正极)BCM编码分别设置为5、6和13,所对应的物理引脚BOARD编码是29、31和33,分别用母对母杜邦线连接好;短引脚(负极)同样使用杜邦线与三个GND连接,比如物理引脚BOARD编码为25、30和39(如图3所示)。

python

图3

三、在树莓派中使用Python编程实现对LED灯的控制

1.测试控制一只红色LED灯的亮与灭连接好实验设备后给树莓派通电开机,稍后在联网电脑的远程桌面连接中进入命令行模式(出现“pi@raspberrypi:~$”提示符),输入“python”后回车进入Python界面(命令提示符变为“》》》”);接着再输入“importRPi.GPIOasGPIO”命令,作用是以GPIO为名导入RPi.GPIO库,无错误提示的话就代表Python已经成功加载了RPi.GHIO库(出现错误提示就必须按照提示进行更新或安装);值得一提的是,RPi.GPIO本身是Python的一个库模块,树莓派官方系统默认已经安装,共作用就是允许用户从代码中控制各GPIO引脚。接着,输入“GPIO.setmode(GPIO.BCM)”命令,意思是“通知”Python准备使用树莓派的BCM编码模式来对各引脚进行控制。由于红色LED灯正极是接在BCM编码5号上,因此在使用Python编程控制时就必须通过数字“5”来控制(而不是其对应的物理引脚BOARD编码25)。输入命令“GPIO.setup(5,GPIO.OUT)”,意思是设置5号GPIO为输出端(GPIO.OUT);接着输入“GPIO.output(5,GPIO.HIGH)”命令,设置5号GPIO输出高电平(GPIO.HIGH)。此时回车执行该命令后,树莓派上的红色LED灯就会瞬间被“点亮”(如图4所示)。

python

图4

发光测试成功后,接着再发一条“GPIO.output(5,GPIO.LOW)”命令,设置5号GPIO输出低电平(GPIO.LOW);回车,红色LED灯熄灭,测试工作完成。2.编写完整的Python程序在联网电脑的Windows系统中使用PyCharm程序编辑器来编写TrafficLED.py(或者可以直接远程进入树莓派系统中调用“编程”-“ThonnyPythonIDE”来编写),程序的主体内容就是控制三个LED灯依次点亮和熄灭(如图5),以绿灯亮10秒为例,其命令语句为:GPIO.output(13,GPIO.HIGH)time.sleep(10.0)GPIO.output(13,GPIO.LOW)值得注意的地方:一是程序的最开始语句“#!/usr/bin/python3”的作用是指定由哪个Python解释器来执行脚本,因为有的操作系统同时安装了Python2和Python3(二者并不兼容);二是需要通过“importtime”命令来导入时间库,因为程序中使用了sleep语句来控制灯亮、灭的持续时间,其中的数值参数单位为秒;三是程序的主体需要一直循环,可使用语句“while1:”(条件永远为真);四是分别设置print语句用来显示提示当前LED灯的状态,比如“黄灯闪3s”。所有命令语句均输入完成后,将其保存为Python文件TrafficLED.py(如图5所示),并通过远程桌面复制粘贴到树莓派的用户目录中(/home/pi/)。

python

图53.调试运行Python程序,控制LED灯实现红绿灯效果在远程桌面窗口中双击从Windows中传递过来的TrafficLED.py程序文件,调用树莓派中已经安装的ThonnyPythonIDE来打开;接着点击上方的“Run”按钮,程序就开始运行:IDE窗口下方的Shell区域先是显示“绿灯亮10s”的提示,此时连接在树莓派上的绿色LED灯开始发光;10秒钟后,提示信息变为“黄灯闪3s”,绿色LED灯熄灭,黄色LED灯闪烁3秒;之后,提示信息变为“红灯亮10s”,绿色和黄色LED灯都为熄灭状态,红色LED灯发光(如图6所示);10秒之后,提示信息变为“本轮结束,进行下一轮”、“绿灯亮10s”,绿色LED灯又会再次亮起……

python

图6
责任编辑人:CC

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

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分