树莓派已经出4了,树莓派之所以这么成功,除了超高性价比和完善的生态系统外,其开放的40Pin对外接口功不可没,这40Pin管脚中,除了12个电源类外,其余28个都是可编程的GPIO,其中部分GPIO可以复用为IIC,SPI,UART,PWM等等,可以用来驱动各种外设。
但是玩过树莓派的小伙伴们都知道树莓派GPIO接口的编号顺序有些混乱,尤其是对于新手的话简直是二脸懵逼。因此本篇文章波波将带小伙伴们全面了解下树莓派的GPIO.
在编程的时候,我们通常采用第三方类库来作为开发的基础API进行使用,常见的类库有以下几种:
1、wiringPi C,有Perl, PHP, Ruby, Node.JS和Golang的扩展,支持wiringPi Pin和BCM GPIO两种编号
2、RPi.GPIO Python,支持Board Pin和BCM GPIO两种编号
3、WiringPi-Go, Go语言,支持wiringPi Pin、BCM GPIO和Board Pin三种编号
看起来比较多,但是只要选择好自己需要的开发语言就可以了,比如选择Python语言,选择RPi.GPIO就好,其他语言选择wiringPi就好。这两个类库都是大家常用的,在github上可以很轻松的搜索到。
下面我们进行简单的实验,树莓派控制LED灯。接线方式如上图所示。
首先我们登陆树莓派,没有屏幕的小伙伴们可以用putty或者VNC登陆,这个就不多介绍了。波波是有屏幕的人,因此直接开整。
1、输入“gpio -v”看下我们树莓派内置的版本。
2、输入“gpio readall”查看我们接口编号的定义。
3、创建led.c文件来实现LED灯的控制。控制台输入“vi led.c”在黑窗口输入以下代码。
- #include <wiringPi.h>
- int main(void)
- {
- wiringPiSetup();
- pinMode (1, OUTPUT);
- for(;;)
- {
- digitalWrite(1, HIGH); delay (500);
- digitalWrite(1, LOW); delay (500);
- }
- }
代码很简单,不用做过多的解释,保存文件并退出vi后,编译并运行。可以看到外接的LED灯已经开始闪烁,C语言控制GPIO成功了。
除了用C语言控制之外,python,js,php等编程语言均可以,但是php控制硬件需要通过一次底层转换,稍显麻烦,下面分享一个python的代码,毕竟python最近几年很火。
- import RPi.GPIO as GPIO //引入函数库
- import time
- RPi.GPIO.setmode(GPIO.BOARD) //设置引脚编号规则
- RPi.GPIO.setup(12, RPi.GPIO.OUT) //将12号引脚设置成输出模式
- while True
- GPIO.output(channel, 1) //将引脚的状态设置为高电平,此时LED亮了
- time.sleep(1) //程序休眠1秒钟,让LED亮1秒
- GPIO.output(channel, 0) //将引脚状态设置为低电平,此时LED灭了
- time.sleep(1) //程序休眠1秒钟,让LED灭1秒
- GPIO.cleanup() //程序的最后别忘记清除所有资源
最后执行一下,看下LED灯是否闪烁。
在调试的过程中大家可能会遇到一个警告,警告的内容大体如下:
RuntimeWarning: This channel is already in use, continuing anyway. Use GPIO.setwarnings(False) to disable warnings.
出现这个警告并不影响程序的执行,主要是因为检测到12号管脚被占用了。我们也可以通过代码禁掉这个警告。
GPIO.setwarnings(False)
好了,看过这篇文章之后相信大家对GPIO有了一个初步的了解,其实电路的控制基本上都来自高低电平的变化。大家应在学习中学会触类旁通。