-
-
[原创]初玩树莓派B 4 GPIO操作点亮LED灯
-
发表于:
2016-9-17 11:30
20637
-
[原创]初玩树莓派B 4 GPIO操作点亮LED灯
初玩树莓派 B 4 GPIO操作点亮LED灯
bbs.pediy.com
相信学ardunio或者其他单片机的第一个工作绝对是点亮一个LED灯,就跟C语言的hello world是一个意思,那么这次我们也要尝试用树莓派的GPIO点亮一个LED等。
1了解树莓派B的GPIO
首先了解GPIO
GPIO(英语:General-purpose input/output),通用型之输入输出的简称,功能类似8051的P0—P3,其接脚可以供使用者由程控自由使用,PIN脚依现实考量可作为通用输入(GPI)或通用输出(GPO)或通用输入与输出(GPIO),如当clk generator, chip select等。
既然一个引脚可以用于输入、输出或其他特殊功能,那么一定有寄存器用来选择这些功能。对于输入,一定可以通过读取某个寄存器来确定引脚电位的高低;对于输出,一定可以通过写入某个寄存器来让这个引脚输出高电位或者低电位;对于其他特殊功能,则有另外的寄存器来控制它们。
来自 维基百科的GPIO解释
初学来说了解GPIO可以理解成由芯片引出的一些外部针脚,至少有两个功能(输入和输出)。输出怎么解释?比如我们外接了一个LED灯,需要CPU控制某个针脚变成高电平为LED提供+电源,这就是输出。输入怎么解释?比如我们外接了一个红外人体感应器。需要CPU从某个针脚检测状态,如果感应到人体,那么某个针脚会变成高电平,这就是输入了。
GPIO的复用指的是某些引脚除了用作普通的输入输出,还有非普通IO的功能性作用。比如用做JATG调试,串口的TX,RX等,但是一个针脚每次只能作为一个功能使用,复用不是说一个针脚同一时间既可以做输入又可以做输出。
也就是说每次使用GPIO之前 需要对要使用的针脚设置对应的模式,才有对应的作用,重启以后又恢复到初始的MODE状态。每个PIN设置为不同的模式有不同的作用。有些针脚是固定的。比如 3.3V 5.5V和GND都是固定的作用,不能作为可以操作的GPIO使用。
首先来看看树莓派B的GPIO 我的PI B是26针脚的。
树莓派的PIN有很多的编号方式:实质其实没有太多区别,只是不同的编号方式对应的PIN有不同的号码。
假设我们使用的是P1编号的15号PIN(Header一栏中15号) 名字叫GPIO3(名字也可能叫法不同),如果用BCM的标号方式就是22号。如果是WiringPi来操作的话就是3号。使用不同编号方式,PIN的号码可能是不相同的。只要对照了准确的表操作就没有任何问题。
实际图中板子上标号就是P1的编号方式。在python的gpio中就是BOARD模式。
后续如果不特别指明。就默认是P1标号方式。从上到下从左到右(我贴的图请你你顺时针转90度再数 QAQ) 编号1-26.
通过执行 #gpio readall可以准确得到你的主板的GPIO信息
我们先看一看初始的每个PIN模式是什么。这里先看结果。后续会有使用python的读取的源码。
这里可以看到 PIN8 和PIN10默认就是串口模式。前面一节调试串口的时候我们并没有设置模式。也可以正常工作就是因为板子启动后,默认 8 10 就是串口模式。其中还有
1,2,4,6,9,14,17,20,25号是电源,3.3V 5.5V或者GND。其他的默认是GPIO.IN全部是输入模式
我们点亮LED灯肯定要设置某个针脚为OUT模式。
2直接点亮一个LED灯
对照表中可以看到PIN1是3.3V电源正极。PIN6是0V也就是GND 负极。是不是接上一个LED自动就亮了呢?真聪明啊。就是这么接的,但是为了安全起见,还是接一个300左右的电阻吧。
3.3/300=0.011A=11ma .这样比较安全。 高中物理这里就不再多说了
需要的材料
1面包板 (方便插线,不用手动接线)
面包板
中间的插孔竖向是相通的,两两不互通。
边缘的插孔横向是相通的,两两不互通。
2 公对母杜邦线2条
公母很好分。
公的是插别人的。母的是被插的。(自觉面壁两分钟)
当然杜邦线还有 公-公 母-母的。因为便宜。买的时候多买一些没关系。
3 LED灯一个(参考电压3.0-3.2V)电流5-20 ma
注意LED的正负。如何区分?
第一种:引脚较长的是正,引脚较短为负,图中可以看出负极较短。
第二种:看灯头里面分为两部分,较大的一部分连着负极。较小的一部分连着正极
4 300欧姆左右的电阻一个
这个没啥好说的。
接线
PIN1 (3.3V正极)--------电阻------LED正极--------LED负极---------PIN6(GND负极)
LED灯就会亮起来了
3编程来控制LED
常用来操作树莓派GPIO的库有两个:
一个是python的 rpi.gpio (https://pypi.python.org/pypi/RPi.GPIO)
一个是C语言的wiringpi (http://wiringpi.com/)
A: 使用RPI.GPIO
默认安装的完整版本的IMG是自带RPI.GPIO库和python环境的。不用我们安装
如果需要安装的话
#sudo apt-get update
安装python
#sudo apt-get install python
安装pip 用pip安装 rpig.pio
#sudo pip install rpi.gpio
这次我们需要修改上面的布线方案。因为我们要编程操作一个PIN了,是不能操作电源针脚。我们选择PIN3
连接方式其余的不变。将原来接PIN1的线接PIN3就好了。这里就不上图了
PIN3正极--------电阻------LED正极--------LED负极---------PIN6负极
python的语法就不说了。这个简单易学。请自学
编辑一个文本文件。写入
#导入操作GPIO的库
import RPi.GPIO as GPIO
#导入time库,我们需要用到sleep
import time
#设置引脚的编码模式为P1.等同于这里的BOARD
GPIO.setmode(GPIO.BOARD)
#设置PIN3的操作模式为输出
GPIO.setup(3,GPIO.OUT)
#循环执行
while True:
#给PIN3一个高电平,此时LED亮了
GPIO.output(3,GPIO.HIGH)
#休眠一秒
time.sleep(1)
#再给PIN3一个低电平。此时LED灭了
GPIO.output(3,GPIO.LOW)
time.sleep(1)
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!