视频链接


从点灯开始

学一种语言是从hello,world开始的;
学一种硬件编程是从点灯开始的;

学编程语言,大家都从hello,world开始,是因为一个简单的hello,world其实是“五脏俱全”的,包括头文件,主函数,编译,运行,输出;
而控制一个cpu,从点一个灯(led)开始,也是这个道理,你的程序让一个灯亮起来了,说明cpu工作了,板子没问题了,你能够通过程序控制cpu的GPIO口了。
对一些玩过单片机或者arm的开发者来说,可能觉得点一个灯太easy,所以我考虑这篇博客是简单一笔带过,给一段代码,还是站在一个初学者的角度写得浅显易懂呢?最后,我觉得还是要认真写,一来如果简单转发一下别人的博客,不符合我博客的风格,另一个重要原因是:其实我很不喜欢那种蔑视入门知识的人,他们是忘了他们自己是如何走过来的,所以我还是站在一个从来没有接触过树莓派,也没有接触过单片机或者开发板的菜鸟角度来写吧!

一般用什么样的灯

我们一般用第一种灯,因为可以显示RGB(红绿蓝)三种颜色,而第二种灯只有单色(要么是白色,或者红色,蓝色,绿色等,下面图片是白色的)
rgb灯价格大概1RMB

怎么接线

这个RGB小模块,不需要接电源,因为Led只需要很小的电流就可以驱动,也就是通过一个树莓派上的IO口就可以驱动它,所以不需要接电源(也就是我们说的正),树莓派有很多个地线,这里的GND都是,GND是ground的缩写。Led模块上的R,G,B分别代表3个led,表示红,绿,蓝。我们一般用杜邦线来连线。

在这里插入图片描述

什么是IO,什么是GPIO

大家在学习硬件编程的时候,会在各种文章和书籍或者视频上看到**“IO口”,“GPIO”**术语,其实很好理解:
IO——是input,output的首字母,表示cpu上引脚具备的两种功能,即你是想把这个引脚作为输入来使用呢?还是作为输出来使用,那么什么是输入,什么是输出呢?
输入和输出是针对cpu来说的,举个例子吧:
比如我们使用的笔记本,哪些是输入设备,哪些是输出设备呢?
很显然,键盘,鼠标是输入设备,显示器是输出设备,说到这个,大家很快就能回答出来,为什么呢,因为你觉得输入就是我们给到比较本的,键盘是用来输入字母和文字的,鼠标是用来点击一些按钮和网页的,这些属于输入概念;显示是输出设备,因为是笔记本里面的cpu把图片送到显示器显示的。所以呢:
输入设备是我们给到cpu的,输出设备是cpu给到我们的,这里的输入和输出是相对cpu来讲的,输入就是输入给cpu,输出是cpu输出给我们。
GPIO——是General Pin Input/Output的缩写,中间那个P也有人译作Purpose——用途,也有人译作port——端口。什么是通用呢,就是这个引脚是作为普通使用的,说明还有特殊用途,这个特殊用途我们后面学到pwm或者串口,i2c,spi的时候再讲。

开始编程了

led的编程时最简单了,就像helloworld一样。
但,这里也可以把问题拆分一下,你可以先写程序控制一个灯,一个灯实现了,再控制三个灯。
我们要控制一个IO口,需要下面的几步:
1)包含导入GPIO模块
import RPi.GPIO as gpio #这是第一条语句,不然你不能调用控制IO口的函数
import time #导入时间模块,为了下面做延时用,不然看不到一闪一闪的效果
2) 设置编码模式
gpio.setmode(gpio.BCM)#设置引脚编码模式,c语言一般使用wiringPi编码模式,python一般使用BCM编码模式
#这些函数不知道什么意思的,可以参考第五课:树莓派Python编程手册

3)设置引脚功能
gpio.setup(16,gpio.OUT)#设置引脚16方向输出//设置BCM模式下的第16脚为输出功能
4) 循环控制
while 1:
gpio.output(16,gpio.HIGH)#设置16脚输出高电平
time.sleep(1)
gpio.output(16,gpio.LOW)#设置16脚输出低电平
time.sleep(1)
最终代码:

pi@xiajiashan:~/pi-python-blog$ cat led.py 
#coding:utf-8             #为了写中文注释
import RPi.GPIO as gpio   #第一步:导入RPi.GPIO模块
import time               #为了后面延时
R = 16                     #方便程序修改,
gpio.setwarnings(False)#屏蔽警告
gpio.setmode(gpio.BCM)#设置引脚模式
gpio.setup(R,gpio.OUT)#设置引脚16方向输出
while 1:
      gpio.output(R,gpio.HIGH)#设置16脚输出高电平
      time.sleep(1)
      gpio.output(R,gpio.LOW)#设置16脚输出低电平
      time.sleep(1)
pi@xiajiashan:~/pi-python-blog$ 

编译运行:

无需编译,直接运行就像这样:
在这里插入图片描述

三色灯RGB的控制

上面我们实现的是红色灯的控制,如果要实现三个灯的交替亮灭,该怎么办呢?
就是R亮------>R灭------>G亮-------->G灭-------->B亮-------->B灭------>循环
因为硬件原理(如何接线)我已经讲得很详细了(见上面),所以接下来就是编码问题,我就直接贴代码了:

pi@xiajiashan:~/pi-python-blog$ cat rgb.py 
#coding:utf-8
import time   #导入时间模块,用于延时
import RPi.GPIO  as gpio  #导入树莓派GPIO模块并取一个别名gpio
gpio.setmode(gpio.BCM)  #设置树莓派引脚为BCM编码模式
R   = 16  #设置红灯为16脚
G   = 20  #设置绿灯为20脚
B   = 21  #设置蓝灯为21脚
#设置R,G,B为输出
gpio.setup(R,gpio.OUT)
gpio.setup(G,gpio.OUT)
gpio.setup(B,gpio.OUT)
#初始化引脚为低电平,让三个引脚灭
gpio.output(R,gpio.LOW)  #设置R为低
gpio.output(G,gpio.LOW)  #设置G为低
gpio.output(B,gpio.LOW)  #设置B为低
time.sleep(1)
while(1):
        gpio.output(R,gpio.HIGH)  #让R亮
        time.sleep(1)
        gpio.output(R,gpio.LOW) #R灭
        time.sleep(1)
        gpio.output(G,gpio.HIGH)  #让R亮
        time.sleep(1)
        gpio.output(G,gpio.LOW) #R灭
        time.sleep(1)
        gpio.output(B,gpio.HIGH)  #让R亮
        time.sleep(1)
        gpio.output(B,gpio.LOW) #R灭
        time.sleep(1)
pi@xiajiashan:~/pi-python-blog$ 

七彩灯的控制

因为如何控制灯的硬件原理我已经讲了,七彩灯我这里只讲一下控制原理,详细的大家可以购买我的视频:
https://edu.csdn.net/course/play/28043/383516?spm=1002.2001.3001.4143

RGB三种颜色可以组合成8种颜色,R,G,B,RG-,RB-,-GB,RGB,—。---表示不亮了。
注意是组合,不是排列,排列abcd和abdc是不一样的,但是组合是一样的。

END

希望对您有帮助,如果有帮助就收藏吧

第一课:什么是树莓派
第二课:树莓派能做什么
第三课:购买您的第一个树莓派
第四课:如何安装树莓派系统
第五课:树莓派Python编程手册
第六课:树莓派Python Led实验