一篇文章教你学会树莓派GPIO编程

树莓派已经出4了,树莓派之所以这么成功,除了超高性价比和完善的生态系统外,其开放的40Pin对外接口功不可没,这40Pin管脚中,除了12个电源类外,其余28个都是可编程的GPIO,其中部分GPIO可以复用为IIC,SPI,UART,PWM等等,可以用来驱动各种外设。

但是玩过树莓派的小伙伴们都知道树莓派GPIO接口的编号顺序有些混乱,尤其是对于新手的话简直是二脸懵逼。因此本篇文章波波将带小伙伴们全面了解下树莓派的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”看下我们树莓派内置的版本。

树莓派点亮LED灯

2、输入“gpio readall”查看我们接口编号的定义。

树莓派点亮LED灯

3、创建led.c文件来实现LED灯的控制。控制台输入“vi led.c”在黑窗口输入以下代码。

  1. #include <wiringPi.h>
  2. int main(void)
  3. {
  4.     wiringPiSetup();
  5.     pinMode (1, OUTPUT);
  6.     for(;;)
  7.     {
  8.         digitalWrite(1, HIGH); delay (500);
  9.         digitalWrite(1, LOW); delay (500);
  10.     }
  11. }

代码很简单,不用做过多的解释,保存文件并退出vi后,编译并运行。可以看到外接的LED灯已经开始闪烁,C语言控制GPIO成功了。

除了用C语言控制之外,python,js,php等编程语言均可以,但是php控制硬件需要通过一次底层转换,稍显麻烦,下面分享一个python的代码,毕竟python最近几年很火。

  1. import RPi.GPIO as GPIO  //引入函数库
  2. import time
  3. RPi.GPIO.setmode(GPIO.BOARD)  //设置引脚编号规则
  4. RPi.GPIO.setup(12, RPi.GPIO.OUT)    //将12号引脚设置成输出模式
  5. while True
  6.     GPIO.output(channel, 1)   //将引脚的状态设置为高电平,此时LED亮了
  7.     time.sleep(1)   //程序休眠1秒钟,让LED亮1秒
  8.     GPIO.output(channel, 0)   //将引脚状态设置为低电平,此时LED灭了
  9.     time.sleep(1)   //程序休眠1秒钟,让LED灭1秒
  10. GPIO.cleanup()    //程序的最后别忘记清除所有资源

最后执行一下,看下LED灯是否闪烁。

树莓派点亮LED灯

在调试的过程中大家可能会遇到一个警告,警告的内容大体如下:

RuntimeWarning: This channel is already in use, continuing anyway. Use GPIO.setwarnings(False) to disable warnings.

出现这个警告并不影响程序的执行,主要是因为检测到12号管脚被占用了。我们也可以通过代码禁掉这个警告。

GPIO.setwarnings(False)

好了,看过这篇文章之后相信大家对GPIO有了一个初步的了解,其实电路的控制基本上都来自高低电平的变化。大家应在学习中学会触类旁通。

 

波波

发表评论

您必须 登录 才能发表留言!