电子工程师技术服务社区
公告
登录
|
注册
首页
技术问答
厂商活动
正点原子
板卡试用
资源库
下载
文章
社区首页
文章
树莓派4B-WiringPi库的安装和使用 (C和Python版)
分 享
扫描二维码分享
树莓派4B-WiringPi库的安装和使用 (C和Python版)
树莓派4b
WiringPi
GPIO控制
wybliw
关注
发布时间: 2020-09-04
丨
阅读: 7711
[TOC] --- --- **文章难度:** ★★ 本文适合:掌握一定的linux常用基本命令,有C或Python编程基础的读者。 有很多入坑树莓派的新手会Python或者C语言,想玩转树莓派上的GPIO硬件资源,但是又不知道从何下手,本文就是一篇让新手入门树莓派GPIO硬件编程的文章。 通过安装WiringPi库,让树莓派的硬件编程变的和Arduino编程一样简单。 --- ## WiringPi库简介 **WiringPi官网:**http://wiringpi.com/ WiringPi是一个用C语言编写的、基于PIN的GPIO访问库,提供了GPIO、I2C、SPI、UART和PWM等库,对于树莓派的GPIO编程相当方便。目前可在基于BCM2835、BCM2836和BCM2837的树莓派中使用。其他详细介绍请参看wiringPi官网介绍。 --- **开发/使用环境:** * 硬件:树莓派4B,内存:1GB,SD卡:16GB; * 系统:树莓派官方 Raspberry Pi 32bit 系统。 以下操作若未特殊说明,则都在树莓派系统上进行。 --- ## WiringPi库-C语言版 ### 库的获取与安装 有2种方式 获取wiringPi库: #### 方法1:从官方获取deb包来安装 官方地址:http://wiringpi.com/wiringpi-updated-to-2-52-for-the-raspberry-pi-4b/ 目前(2020-09)官方WiringPi最新版本是V2.52。 参照官方文档,执行指令: ```bash # 选择要保存的目录,笔者是用户根目录下的Work cd ~/Work # 下载deb包 wget https://project-downloads.drogon.net/wiringpi-latest.deb # 安装deb包 sudo dpkg -i wiringpi-latest.deb ``` 安装成功后,输入命令:`gpio -v`,可以查看WiringPi的版本,如下图: ![gpio-v](https://cf02.ickimg.com/bbsimages/202009/9065d8ffc2b0669d3fef6b552ffcc351.png "gpio-v") 可以看到WiringPi版本是V2.52的。 **注:** 树莓派4B必须使用V2.52或以上版本的WiringPi库,否则gpio编程可能会出现问题。 比如:从软件仓库安装的WiringPi是V2.50版本的,在执行`gpio readall`指令时,会出现如下错误: `Oops - unable to determine board type... model: 17` 如下图: ![](https://cf02.ickimg.com/bbsimages/202009/6eb43794a32af46d8c169c29725e9be5.png) 安装V2.52版本就可以成功执行了,如下图: ![](https://cf02.ickimg.com/bbsimages/202009/74d8f22c06e94ec5cc83daf8d94875b6.png) * `BCM` BCM2835库中GPIO编号 * `wPi` WiringPi库中GPIO的编号 * `Name` GPIO名称、功能 * `Physical` 物理引脚编号 **注:** 后面的编程示例,将会用到该图中的GPIO引脚编号,我们使用的是WiringPi库,主要看`wPi`这一栏。 比如:你要操作树莓派的GPIO0口,在编程时,对应WiringPi的API调用中,引脚编号就要填入 0 。 #### 方法2:从GitHub获取WiringPi源码来安装 * 官方地址:https://git.drogon.net/ 官方的源码地址好像不可用,打开提示如下: > git.drogon.net is currently unavailable. * 非官方地址:https://github.com/WiringPi/WiringPi 看介绍,这个仓库已经成为上一个“官方”源代码发行版的镜像,会持续更新。目前(2020-09)版本是V2.60。 目前 https://github.com/WiringPi 仓库支持的版本有:C/C++、Python、PHP、Node、Ruby、Perl。 执行以下命令,获取源码(笔者在Work目录下保存): ```bash git clone https://github.com/WiringPi/WiringPi.git ``` 进入刚下在完成的`WiringPi`目录,打开`INSTALL`文件,查看安装方法。 输入以下命令,开始编译、安装: ```bash # 安装 ./build # 卸载 ./build uninstall ``` 安装成功后如下图: ![](https://cf02.ickimg.com/bbsimages/202009/d90968cbf2c3ce088b7157cca10ec70a.png) 执行命令`gpio -v`,查看WiringPi版本,是V2.60的。 **注:** 后面的C语言相关编程示例都将以V2.60来演示。 ### 示例 #### 点亮你的LED 1) 示例代码: ```c #include
#include
#define LED0 0 // 设置GPIO0为控制LED的引脚 int main() { printf("Hello world\n"); wiringPiSetup(); // 初始化gpio pinMode(LED0, OUTPUT); // 设置gpio0为输出模式 while (1) { // 设置GPIO0为高电平 printf("Set GPIO0 : H\n"); digitalWrite(LED0, HIGH); delay(1000); // 设置GPIO0为低电平 printf("Set GPIO0 : L\n"); digitalWrite(LED0, LOW); delay(1000); } return 0; } ``` 保存文件名为:gpio.c 2) 编译代码 输入如下指令: ```bash gcc gpio.c -o gpio -lwiringPi ``` * `-lwiringPi` 选项,链接WiringPi库。 3)运行程序 输入如下指令: ``` ./gpio ``` **树莓派和LED的接线:** | 树莓派GPIO | LED | | --------- | ------ | | GPIO0 | 负极 | | 3.3V | 正极 | **注:** 使用3.3V,一般直径5mm的LED灯可以不用串联电阻,具体还是要根据自己LED灯的额定电流而定,一般是10mA~30mA。有的LED灯的电流很小,需要串电阻,以免LED灯烧毁。 终端提示图: ![](https://cf02.ickimg.com/bbsimages/202009/281601c689428f5b62a0419e7169d3d9.png) 效果图如下(为了简便,笔者的LED没有串电阻,为保险起见,最好串一个470R左右的电阻限流): ![](https://cf02.ickimg.com/bbsimages/202009/65d7c88e02d7a2997fdca5687bd73725.jpg) --- ## WiringPi库-Python版 ### 库的获取 仓库地址:https://github.com/WiringPi/WiringPi-Python WiringPi for Python版: * 实现类似Arduino接线的功能 * 实现管理IO扩展的新功能 ### 库的安装 有如下2种安装方式。 #### 方法1:快速安装 根据WiringPi-Python官方文档,输入以下命令,即可安装Python版的WiringPi库。 ```bash # Python2.x 版本 pip install wiringpi # Python3.x 版本 pip3 install wiringpi ``` **注:** 若安装失败,可尝试下面的编译安装。 #### 方法2:编译、安装 1)输入以下命令,获取源码。 ```bash git clone --recursive https://github.com/WiringPi/WiringPi-Python.git ``` **注:** `--recursive`选项,可以自动拉取子模块,否则就需要手动下载。 2)编译、安装 进入刚下载的`WiringPi-Python`文件夹,打开`README.rst`文件,查看如何编译和安装。 输入以下命令,编译、安装: ```bash # Python2.x 版本 sudo python setup.py install # or # Python3.x 版本 sudo python3 setup.py install ``` > 可能出现错误,如图: ![](https://cf02.ickimg.com/bbsimages/202009/4fa93216fdaa7270bf095ff52ef7494c.png) 缺少swig模块,按照提示,输入命令`sudo apt install swig`安装swig,完成后,然后再实行`sudo python setup.py install`编译、安装。 > 可能出现的错误,如图: ![](https://cf02.ickimg.com/bbsimages/202009/f51117c6c702af78b8e401e654659e02.png) 这是由于在git时没有加上`--recursive`选项,导致子模块C语言版的WiringPi源文件未下载,那就需要再下载C语言版的WiringPi库,下载地址见上面C语言版库的获取。 下载完成后,将C语言WiringPi目录下的所有文件剪切到Python版的WiringPi目录下,如下图: ![](https://cf02.ickimg.com/bbsimages/202009/a9245e2fa6a6216873d732f36becfaf6.png) 然后再次执行`sudo python setup.py install`编译、安装。成功后如下图: ![](https://cf02.ickimg.com/bbsimages/202009/35696d1a67cbbeb8d2db3e0e65e3fd34.png) 3)测试一下Python库 打开examples文件夹,执行`python delay.py`,运行示例程序,该示例会先显示`hello World`,等待1.5秒后,再显示`hi again`,如下图: ![](https://cf02.ickimg.com/bbsimages/202009/248aef358f8850c126773a3463fb345a.png) **注:** 若运行出错,提示`wiringpi模块`未找到,就重启一下树莓派。 --- ### 示例 #### 点亮你的LED 本节介绍使用Python版的库,操作树莓派GPIO口。 看考WiringPi-Python里的README文件,里面介绍了一些库的使用方法。 也可以参考examples目录下的例子。 1)点灯示例: ```python #!/usr/bin/env python # coding=utf-8 import wiringpi # 设置LED控制引脚为GPIO0 LED0 = 0 OUTPUT = 1 INPUT = 0 HIGH = 1 LOW = 0 # gpio初始化 wiringpi.wiringPiSetup() # 设置gpio0 为输出模式 wiringpi.pinMode(LED0, OUTPUT) # 循环点亮和熄灭LED while 1: # 设置gpio0高电平 print 'Set GPIO0 : H' wiringpi.digitalWrite(LED0, HIGH) wiringpi.delay(1500) # 延时 1.5 seconds # 设置gpio0低电平 print 'Set GPIO0 : L' wiringpi.digitalWrite(LED0, LOW) wiringpi.delay(1500) # 延时 1.5 seconds ``` 2)运行程序 输入`python gpio.py`,即可运行程序,led会不停地闪烁,间隔1.5s。 树莓派和LED的接线: | 树莓派GPIO | LED | | --------- | --- | | GPIO0 | 负极 | | 3.3V | 正极 | **注:** 使用3.3V,一般直径5mm的LED灯可以不用串联电阻,具体还是要根据自己LED灯的额定电流而定,一般是10mA~30mA。有的LED灯的电流很小,需要串电阻,以免LED灯烧毁。 终端提示图: ![](https://cf02.ickimg.com/bbsimages/202009/3fbbb0662abd91e1cdac09206d968153.png) 效果图如下(为了简便,笔者的LED没有串电阻,建议读者最好串一个470R左右的电阻限流,避免LED烧毁): ![](https://cf02.ickimg.com/bbsimages/202009/65d7c88e02d7a2997fdca5687bd73725.jpg) --- 本文主要是针对WiringPi库,使用C和Python基础编程的介绍,WiringPi库自带也有一些示例,有能力的可自行研究。 --- ## 附录 ### WiringPi中文API文档、deb包等 * WiringPi中文API文档,针对C语言的,Python也可以参考一下。 * WiringPi离线版deb包,V2.52版 * WiringPi库和WiringPi-Python库源码包,V2.60版 百度云 链接:https://pan.baidu.com/s/1Dp6MUUyL29t8oLLfvhO3EA 提取码:dnqg ### 参考文献 * [WiringPi官方文档](http://wiringpi.com/) * [WiringPi第三方GitHub仓库](https://github.com/WiringPi) == end ==
原创作品,未经权利人授权禁止转载。详情见
转载须知
。
举报文章
点赞
(
0
)
wybliw
关注
评论
(0)
登录后可评论,请
登录
或
注册
相关文章推荐
MK-米客方德推出工业级存储卡
Beetle ESP32 C3 蓝牙数据收发
Beetle ESP32 C3 wifi联网获取实时天气信息
开箱测评Beetle ESP32-C3 (RISC-V芯片)模块
正点原子数控电源DP100测评
DP100试用评测-----开箱+初体验
Beetle ESP32 C3环境搭建
【花雕体验】16 使用Beetle ESP32 C3控制8X32位WS2812硬屏之二
X
你的打赏是对原创作者最大的认可
请选择打赏IC币的数量,一经提交无法退回 !
100IC币
500IC币
1000IC币
自定义
IC币
确定
X
提交成功 ! 谢谢您的支持
返回
我要举报该内容理由
×
广告及垃圾信息
抄袭或未经授权
其它举报理由
请输入您举报的理由(50字以内)
取消
提交