树莓派GPIO接口编程

树莓派 GPIO
Angel_YY
发布时间: 2019-04-15
阅读: 7367
树莓派之所以这么成功,除了超高性价比和完善的生态系统外,其开放的40Pin对外接口功不可没,这40Pin管脚中,除了12个电源类外,其余28个都是可编程的GPIO,其中部分GPIO可以复用为IIC,SPI,UART,PWM等等,可以用来驱动各种外设。但是这些GPIO的编号有些混乱,不同的API对于GPIO的编号不一样,而不同的API对于开发语言的支持也不同。其中比较主流的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就好。
编写程序之前,先来连接硬件。
0000.png
如图连接树莓派管脚和led灯,注意led的长管脚为正极,连接GPIO,短管脚连接GND。
首先我们来看看使用C语言如何控制GPIO。
0001.png
使用Putty远程登录到树莓派后,执行命令:gpio -v,可以看到默认情况下树莓派是已经安装了wirpingPi了。
0002.png
我们可以使用命令行gpio readall查看树莓派的管脚定义。
vi led.c
使用vi工具创建一个led.c。

输入如下代码:


#include <wiringPi.h>
int main(void)
{
    wiringPiSetup();
    pinMode (1, OUTPUT);
    for(;;)
    {
        digitalWrite(1, HIGH); delay (500);
        digitalWrite(1, LOW); delay (500);
    }
}
代码很简单,不用做过多的解释,这里需要注意的是,数字1是wPi管脚编号,通过查表可以知道,这个是板子上的物理编号12号。我们已经在这个GPIO上接了一个LED灯,接下来就可以控制这个灯了。
0003.png
保存文件并退出vi后,编译并运行。
gcc -Wall -o led led.c -lwiringPi
sudo ./led
0004.gif
可以看到外接的LED灯已经开始闪烁,C语言控制GPIO成功了。
本人虽然从事C语言开发多年,但是Python最近是在是太火了,藉此机会正好学习一下Python语言开发,所以接下来所有代码均由Python实现。
0005.png
执行pyton命令后可以看到树莓派也已经默认安装好了python开发环境了,版本是2.7.13。此时我们看到提示符变成了三个大于号,说明已经进入pyton的交互环境了,退出可以使用quit()。
vi led.py
创建并编辑一个python文件。输入代码如下:
00078.png


保存为led.py,然后运行这个Python程序。
sudu python led.py
此时外接的LED灯开始闪烁,说明Python控制LED灯成功。
有时候在执行上面的命令时,会遇到警告:
0006.png
led.py:7: RuntimeWarning: This channel is already in use, continuing anyway.  Use GPIO.setwarnings(False) to disable warnings.
  GPIO.setup(12, GPIO.OUT)
这个原因是我上次使用C语言控制了12号引脚的GPIO,系统认为被使用了,会有警告,但是程序还是会正常执行的。如果想去掉这个警告,一是重启系统,二是换一个GPIO去控制就好了。

总结:通过代码编写,发现整个Python代码还是很简洁的,适合于那些没有C语言基础的朋友学习,Python 不仅上手简单,而且其解释语言的特性使得程序不用编译,对代码做了任何修改之后就能直接运行,极大方便了调试。当然对于有多年C语言开发习惯的人,想学习一下Python也是不错的选择。


原创作品,未经权利人授权禁止转载。详情见转载须知 举报文章

点赞 (0)
Angel_YY 擅长:BMS电池管理系统,用户行为分析系统
评论(0)

登录后可评论,请 登录注册

相关文章推荐
X
你的打赏是对原创作者最大的认可
请选择打赏IC币的数量,一经提交无法退回 !
100IC币
500IC币
1000IC币
自定义
IC币
确定
X
提交成功 ! 谢谢您的支持
返回

我要举报该内容理由

×
请输入您举报的理由(50字以内)