树莓派4B-WiringPi库的安装和使用 (C和Python版)

article/2025/10/28 4:46:38

本文适合:掌握一定的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。
参照官方文档,执行指令:

# 选择要保存的目录,笔者是用户根目录下的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

可以看到WiringPi版本是V2.52的。

注: 树莓派4B必须使用V2.52或以上版本的WiringPi库,否则gpio编程可能会出现问题。
比如:从软件仓库安装的WiringPi是V2.50版本的,在执行gpio readall指令时,会出现如下错误:
Oops - unable to determine board type... model: 17

如下图:

安装V2.52版本就可以成功执行了,如下图:

  • 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目录下保存):

git clone https://github.com/WiringPi/WiringPi.git

进入刚下在完成的WiringPi目录,打开INSTALL文件,查看安装方法。

输入以下命令,开始编译、安装:

    # 安装./build# 卸载./build uninstall

安装成功后如下图:

执行命令gpio -v,查看WiringPi版本,是V2.60的。

注: 后面的C语言相关编程示例都将以V2.60来演示。

示例

点亮你的LED

1) 示例代码:

 
  1.  
  2. #include <stdio.h>
  3. #include <wiringpi.h>
  4.  
  5. #define LED0 0 // 设置GPIO0为控制LED的引脚
  6.  
  7. int main()
  8. {
  9. printf("Hello world\n");
  10.  
  11. wiringPiSetup(); // 初始化gpio
  12. pinMode(LED0, OUTPUT); // 设置gpio0为输出模式
  13.  
  14. while (1) {
  15. // 设置GPIO0为高电平
  16. printf("Set GPIO0 : H\n");
  17. digitalWrite(LED0, HIGH);
  18. delay(1000);
  19.  
  20. // 设置GPIO0为低电平
  21. printf("Set GPIO0 : L\n");
  22. digitalWrite(LED0, LOW);
  23. delay(1000);
  24. }
  25.  
  26. return 0;
  27. }

保存文件名为:gpio.c

2) 编译代码

输入如下指令:

 
  1. gcc gpio.c -o gpio -lwiringPi
  • -lwiringPi 选项,链接WiringPi库。

3)运行程序

输入如下指令:

 
  1. ./gpio

树莓派和LED的接线:

树莓派GPIOLED
GPIO0负极
3.3V正极

注: 使用3.3V,一般直径5mm的LED灯可以不用串联电阻,具体还是要根据自己LED灯的额定电流而定,一般是10mA~30mA。有的LED灯的电流很小,需要串电阻,以免LED灯烧毁。

终端提示图:

效果图如下(为了简便,笔者的LED没有串电阻,为保险起见,最好串一个470R左右的电阻限流):


WiringPi库-Python版

库的获取

仓库地址:https://github.com/WiringPi/WiringPi-Python

WiringPi for Python版:

  • 实现类似Arduino接线的功能
  • 实现管理IO扩展的新功能

库的安装

有如下2种安装方式。

方法1:快速安装

根据WiringPi-Python官方文档,输入以下命令,即可安装Python版的WiringPi库。

 
  1. # Python2.x 版本
  2. pip install wiringpi
  3.  
  4. # Python3.x 版本
  5. pip3 install wiringpi

注: 若安装失败,可尝试下面的编译安装。

方法2:编译、安装

1)输入以下命令,获取源码。

 
  1. git clone --recursive https://github.com/WiringPi/WiringPi-Python.git

注: --recursive选项,可以自动拉取子模块,否则就需要手动下载。

2)编译、安装

进入刚下载的WiringPi-Python文件夹,打开README.rst文件,查看如何编译和安装。

输入以下命令,编译、安装:

 
  1. # Python2.x 版本
  2. sudo python setup.py install
  3.  
  4. # or
  5. # Python3.x 版本
  6. sudo python3 setup.py install

可能出现错误,如图:

缺少swig模块,按照提示,输入命令sudo apt install swig安装swig,完成后,然后再实行sudo python setup.py install编译、安装。

可能出现的错误,如图:

这是由于在git时没有加上--recursive选项,导致子模块C语言版的WiringPi源文件未下载,那就需要再下载C语言版的WiringPi库,下载地址见上面C语言版库的获取。
下载完成后,将C语言WiringPi目录下的所有文件剪切到Python版的WiringPi目录下,如下图:

然后再次执行sudo python setup.py install编译、安装。成功后如下图:

3)测试一下Python库
打开examples文件夹,执行python delay.py,运行示例程序,该示例会先显示hello World,等待1.5秒后,再显示hi again,如下图:

注: 若运行出错,提示wiringpi模块未找到,就重启一下树莓派。


示例

点亮你的LED

本节介绍使用Python版的库,操作树莓派GPIO口。

看考WiringPi-Python里的README文件,里面介绍了一些库的使用方法。
也可以参考examples目录下的例子。

1)点灯示例:

 
  1. #!/usr/bin/env python
  2. # coding=utf-8
  3.  
  4. import wiringpi
  5.  
  6. # 设置LED控制引脚为GPIO0
  7. LED0 = 0
  8.  
  9. OUTPUT = 1
  10. INPUT = 0
  11. HIGH = 1
  12. LOW = 0
  13.  
  14. # gpio初始化
  15. wiringpi.wiringPiSetup()
  16. # 设置gpio0 为输出模式
  17. wiringpi.pinMode(LED0, OUTPUT)
  18.  
  19. # 循环点亮和熄灭LED
  20. while 1:
  21. # 设置gpio0高电平
  22. print 'Set GPIO0 : H'
  23. wiringpi.digitalWrite(LED0, HIGH)
  24. wiringpi.delay(1500) # 延时 1.5 seconds
  25.  
  26. # 设置gpio0低电平
  27. print 'Set GPIO0 : L'
  28. wiringpi.digitalWrite(LED0, LOW)
  29. wiringpi.delay(1500) # 延时 1.5 seconds

2)运行程序

输入python gpio.py,即可运行程序,led会不停地闪烁,间隔1.5s。

树莓派和LED的接线:

树莓派GPIOLED
GPIO0负极
3.3V正极

注: 使用3.3V,一般直径5mm的LED灯可以不用串联电阻,具体还是要根据自己LED灯的额定电流而定,一般是10mA~30mA。有的LED灯的电流很小,需要串电阻,以免LED灯烧毁。

终端提示图:

效果图如下(为了简便,笔者的LED没有串电阻,建议读者最好串一个470R左右的电阻限流,避免LED烧毁):


本文主要是针对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官方文档
  • WiringPi第三方GitHub仓库

== end ==


http://chatgpt.dhexx.cn/article/yeXWvwvK.shtml

相关文章

(转)树莓派wiringPi库详解

https://www.cnblogs.com/lulipro/p/5992172.html <div id"post_detail">树莓派wiringPi库详解 wiringPi是一个很棒的树莓派IO控制库&#xff0c;使用C语言开发&#xff0c;提供了丰富的接口&#xff1a;GPIO控制&#xff0c;中断&#xff0c;多线程&#xf…

树莓派学习笔记——wiringPi GPIO使用详解

1.前言 最近认真学习了树莓派&#xff0c;从浅到深认真分析了wiringPi实现代码&#xff0c;借助树莓派学习linux收获颇丰。深入学习linux一段时间后发现它非常有魅力&#xff0c;一个简单的IO口输出操作尽有那么多的“玩法”。wiringPi是一个简单易用的函数库&#xff0c;通过w…

树莓派在下载Wiringpi时遇到的问题1.软件包 wiringpi 没有可安装候选2.失败:域名解析暂时失败。 wget: 无法解析主机地址 “project-downloads.drogon.ne

项目场景&#xff1a; 最近无聊,在玩实验室的树莓派,在装Wringpi时遇到了一些问题,记录一下 错误1 我用的是树莓派4B,在sudo apt-get install wiringpi时报了如下错误: 正在读取软件包列表… 完成 正在分析软件包的依赖关系树… 完成 正在读取状态信息… 完成 没有可用的软件…

树莓派学习笔记——wiringPi简介、安装和管脚说明

1.WiringPi简介 WiringPi是应用于树莓派平台的GPIO控制库函数&#xff0c;WiringPi遵守GUN Lv3。wiringPi使用C或者C开发并且可以被其他语言包转&#xff0c;例如python、ruby或者PHP等。WiringPi中的函数类似于Arduino的wiring系统&#xff0c;这使得熟悉arduino的用户使用wri…

WiringPi介绍及安装方法

WiringPi介绍及安装方法 1.WiringPi简介 WiringPi是应用于树莓派平台的GPIO控制库函数&#xff0c;WiringPi遵守GUN Lv3。wiringPi使用C或者C开发并且可以被其他语言包转&#xff0c;例如python、ruby或者PHP等。WiringPi中的函数类似于Arduino的wiring系统&#xff0c;这使得…

树莓派wiringPi库详解

达者为先 师者之意 树莓派wiringPi库详解 1 WiringPi安装2 wiringPi库编译和运行3 wiringPi库API大全3.1 硬件初始化函数3.2 通用GPIO控制函数3.3 时间控制函数3.4 中断3.5 多线程3.6 softPwm软件实现的PWM3.7 串口通信3.8 shift移位寄存器芯片API3.9 树莓派硬件平台特有的API…

第七课:树莓派WiringPi库

目录 一、WiringPi库介绍 二、WiringPi安装 方法一&#xff1a; 安装git工具&#xff08;已安装跳过&#xff09;&#xff08;前提已更换国内下载源&#xff09; ①&#xff1a;输入一下指令 ​②&#xff1a; 输入指令--在线获得 WiringPi 的源代码&#xff08;2019后不…

树莓派——wiringPi库详解

文章目录 查看树莓派引脚编号wiringPi库API大全硬件初始化函数通用GPIO控制函数时间控制函数串口通信串口通信配置测试代码串口通信实例 中断多线程其他 wiringPi&#xff08;特定平台&#xff0c;特定功能接口&#xff09;库是基于c语言开发的&#xff0c;提供了丰富的接口&am…

【树莓派】了解wiringPi库、控制继电器

目录 一、wiringPi库二、继电器1、继电器介绍及接线说明2、树莓派控制继电器 一、wiringPi库 wiringPi是一个很棒的树莓派IO控制库&#xff0c;使用C语言开发&#xff0c;提供了丰富的接口&#xff1a;GPIO控制&#xff0c;中断&#xff0c;多线程等。 在树莓派命令行输入gpio…

树莓派开发—— wiringPi 库的使用

一、wiringPi 的安装 参考文献&#xff1a; https://www.cnblogs.com/lulipro/p/5992172.html 进入 wiringPi的github (https://git.drogon.net/?pwiringPi;asummary) 下载安装包。点击页面的第一个链接的右边的snapshot,下载安装压缩包。 然后进入安装包所在的目录执行以下…

WiringPi安装及使用详解

这个文章先不要看&#xff0c;现在写的跟屎一样&#xff0c;我会断断续续的对本文章进行修改和优化&#xff0c;第一部分没问题&#xff0c;可以参考 WiringPi安装及使用详解 1、WiringPi的安装 2、Wiring常用命令详解 3、Python调用WiringPi库进行开发 1、安装WiringPi 登…

【wrodpress】wordpress发表文章后无法显示

搭建完wordpress&#xff0c;发表第一篇博客测试。文章发布后&#xff0c;首页已经能显示出文章的标题&#xff0c;但是点进去后却提示该页无法显示。 而且可以看到 因为我写的标题是文字&#xff0c;所以标题默认就是文字&#xff0c;而wordpress生成的链接中包含中文字符是…

如何在Hexo博客发布文章

1、markdown格式上传&#xff1a;Hexo默认使用的格式是markdown格式的文件&#xff0c;所以上传markdown文件可以自动转化为HTML格式的文章&#xff1b; 2、将.md文件复制到你hexo博客文件夹 中 source 下的 _posts 中&#xff0c;默认只有一个 hello-world.md&#xff1b; 3、…

微信公众号申请及文章发送详细流程介绍

文章目录 准备工作一、注册订阅号1.打开微信公众平台网址2.点击右上角立即注册&#xff0c;选择订阅号3.填写信息 二、登录微信公众号发表文章1.登录刚注册的公众号2.选择发表文章类型发表文章3.编辑好文章后可以选择阅览查看内容 三、管理微信公众号1.设置自己公众号内容2.管理…

使用wxjava实现发表内容、预览信息以及推送文章

大家好,我是雄雄。 文章目录 前言保存草稿的方法获取草稿箱列表根据media_id获取草稿箱信息给指定人发送预览文章推送文章(按照标签推送)前言 今天分享的内容有如下几个: 保存草稿根绝media_id会哦去草稿箱的信息发表内容,并不是发发布(已发表的内容不会推送给用户,不占…

CSDN 文章审核中的有趣现象

简 介&#xff1a; 对于今天CSDN记录实验博文在审核过程中遇到的“审核未通过”进行查询&#xff0c;通过“二分法” 逐步定位到影响审核通过的具体词语&#xff0c;经过修改之后&#xff0c;便完成了 CSDN 中的文章审核。莫名其妙的审核不通过&#xff0c;来自于输入文字中的 …

csdn发布不了文章的解决

插件的问题 问题 csdn发布不了文章&#xff0c;点击“发布后”&#xff0c;没有任何反应&#xff1b;编辑框也出现了莫名其妙的框图&#xff08;附图1&#xff09; 本以为是csdn在更新&#xff0c;经咨询客服4006600108&#xff08;可能是浏览器插件或者缓存的问题&#xff0…

在CSDN写文章是一种什么体验?

大家好&#xff0c;我是记得诚。 不知不觉&#xff0c;距离我第一篇博客&#xff0c;已快三年了&#xff0c;时间过得真快。 今天简单写一篇文章&#xff0c;记录自己在CSDN的成长进步。 开始 写博客是受杨秀章老师的启发&#xff0c;看到他充满烟火气的文字&#xff0c;给…

27.blog前端-发布文章

点击写文章&#xff0c;会跳转到该页面 点击右上角的发布&#xff0c;会弹出发布的对话框因此&#xff0c;我们要调用文章分类列表和文章标签列表的接口 以及如果是点击文字的编辑按钮进入该页面的话&#xff0c;还需要通过调用文章id获取文章详情的接口 还需要调用发布文章的…

Python爬取网上文章并发表到微信公众号

前言 话说懒惰是人类进步的原动力&#xff0c;古人诚不欺我。最近在折腾一个微信公众号&#xff0c;开始的时候在网上找一些资源然后进行二次创作然后发表到微信公众号&#xff0c;但是这就要自己先把里面的图片下载下来然后文字也复制过来然后再慢慢的上传到微信公众号&#…