先看效果图:

基础知识
配件准备
树莓派开发板 (以3B为例)

杜邦线(公母线)

面包板

LED灯

电阻(不是必须的)

GPIO介绍
GPIO就是今天的主角了,树莓派上有40根排针,这就是树莓派控制外部传感器的接口,称之为GPIO
40根引脚的编号可以根据其位置排序
现在只学习物理引脚的编号(左上角:1,右上角:2.......以此类推)
3.3v和5v接口就是分别输出3.3v和5v
GND就是接地
其中的GPIO可以输入也可以输出,设置为输出的话,可以控制输出高电压和低电压,高电压为3.3v,低电压为0v。可以通过程序来控制GPIO的输出。如果需要恒定的电压输出,则可以选择3.3v或者5v接口,如果需要控制输入以及输出,就可以选择GPIO接口了。
再开始编程之前,需要先懂得led的原理,学过物理的应该可以理解。
简单来说,就是给led正极输入一个正的电压,负极接地,就可以亮了。
今天我们选择6号口当作负极,11号口当作正极。
通过树莓派控制11号口向led输出一个3.3v电压,led就可以亮起来了。
硬件连接
在开始连接硬件之前,要给树莓派断电 要给树莓派断电 要给树莓派断电
重要的事情说三遍
否则可能就会烧毁树莓派的电路,你的200大洋就废了。
首先拿出你的面包板,led和杜邦线
然后将杜邦线母口链接到树莓派的6,11
口,再将其分别插入面包板,将led长脚插入11号口同一纵列,将短脚插入6号口同一纵列。
最后自行检查一下,没有问题就可以通电了。
程序开发
两种方式开发
一. 将树莓派链接显示器,使用树莓派自带的python开发工具。
- 优点:
可以直接运行程序,所见即所得。
- 缺点:
无法格式化代码,python表示非常尴尬~!
自带编辑器没有代码提示,真的很难用~!
二. SSH链接树莓派,在本地写好程序,上传到树莓派。
- 优点
多种IDE工具可供选择。
代码格式化和语法提示非常齐全。
- 缺点
无法本地调试。
在这里,我选择使用SSH方式,将本地写好的代码,通过rz
命令上传到树莓派。
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BOARD)
GPIO.setup(11, GPIO.OUT)
GPIO.output(11, True)
time.sleep(8)
GPIO.output(11, False)
GPIO.cleanup()
如果灯没有亮,请检查代码有没有问题,或者杜邦线有没有插好,实在不行换一个led试试。
代码解释:
##引入了了RPI.GPIO模块,简写成了GPIO。
##引入time模块
##声明使用GPIO物理编号模式,声明了11号口是物理编码中的11号口。
##声明11号口为输出模式
##6号口是接地,不会变化,不用声明。
##设置11号口输出高电压,led就亮了
##使程序暂停3秒钟,就是使led亮三秒
##设置11号口为低电压,led灯灭
##使所有GPIO口恢复为初始化。
总结
由于涉及到python,建议大家自学一下,几个基本的语句,例如if判断,while循环等,小编在后期文章会介绍。
大家可以用更多的led来试验,GND是可以公用的。
LED灯的其他玩法
- 闪烁11下,然后关闭
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BOARD)
GPIO.setup(11, GPIO.OUT)
i = 0
try:
while True:
if i > 10:
break
GPIO.output(11, True)
time.sleep(0.5)
GPIO.output(11, False)
time.sleep(0.5)
i += 1
finally:
GPIO.cleanup()
- 控制亮度
import RPi.GPIO as GPIO
led_pin = 11
GPIO.setmode(GPIO.BOARD)
GPIO.setup(led_pin, GPIO.OUT)
pwm_led = GPIO.PWM(led_pin, 500)
pwm_led.start(100)
try:
while True:
duty_s = input("请输入你要的亮度(0-100):")
duty = int(duty_s)
pwm_led.ChangeDutyCycle(duty)
finally:
GPIO.cleanup()