3 分钟搞定树莓派 GPIO:WiringPi 从安装到中断的实战指南
3 分钟搞定树莓派 GPIOWiringPi 从安装到中断的实战指南【免费下载链接】WiringPiThe arguably fastest GPIO Library for the Raspberry Pi项目地址: https://gitcode.com/gh_mirrors/wi/WiringPi你刚把线焊好想让树莓派的 GPIO17 点亮一颗 LED却发现 shell 里一行行敲/sys/class/gpio既慢又烦。wiringPi 库就是为这件事而生的 GPIO 控制库C 语言编写、直接读写 SoC 寄存器支持包括 Pi 5 在内的所有树莓派型号还自带gpio命令行工具。装完只需 3 分钟第一个任务就能让 LED 亮起来。 从让一个引脚输出高电平说起场景很常见LED 一端接 GPIO17、另一端经电阻接地上电之后缺的只是一句把这个引脚置高。如果你愿意写pinMode(17, OUTPUT); digitalWrite(17, HIGH);这么两行就收工那正是 wiringPi 的设计目标——用类似 Arduino 的语义把寄存器操作的脏活挡在库的后面。 wiringPi 是什么一行说清 最小示意它是什么一个直接访问硬件寄存器的 C 库绕过 sysfs延迟以微秒计被大量树莓派项目采用当前版本 3.18由社区GC2自 2024 年起接手维护。能干什么引脚电平读写、上下拉、中断、软件 PWM、伺服与软音、SPI/I2C/串口外加一堆现成外设驱动LCD、DS1302、MCP 系列扩展芯片等。最小可运行示意BCM 编号17 号脚接 LED#include wiringPi.h #include unistd.h int main(void) { wiringPiSetupGpio(); pinMode(17, OUTPUT); digitalWrite(17, HIGH); // LED 亮 delay(500); digitalWrite(17, LOW); // LED 灭 return 0; }编译时链接库即可gcc -o led led.c -lwiringPi⏱️ 最小闭环3 分钟装好并验证源码安装最短路径git clone https://gitcode.com/gh_mirrors/wi/WiringPi cd WiringPi sudo ./build想要 deb 包方便apt管理、可卸载则走./build debian把debian-template/下生成的.deb移到当前目录后sudo apt install ./wiringpi-3.x.deb即可。验证只有两条命令gpio -v # 打印版本 3.18 与你的 Pi 型号 gpio readall # 输出 40 引脚全表BCM/WPI/物理号、模式、电平gpio readall的输出就是查线、查占用的第一现场后面排错会反复用到。先定一件事引脚编号。三种编号方案初始化函数选哪个就用哪套混用是新手最常见的灯不亮根源初始化函数编号方案适用场景wiringPiSetupGpio()BCM推荐与 datasheet、gpio工具一致wiringPiSetup()WPI老教程常见编号与 BCM 不同wiringPiSetupPhys()物理脚位号照着板子丝印接线时用注意 3.x 已废弃wiringPiSetupSys()sysfs 方案新代码别用。 高频任务逐个击破任务一点灯输出上面最小示意就是完整答案把delay(500)放进while(1)就变成闪烁灯。任务二读按钮输入 上下拉按钮建议配合内部上拉按下时引脚被拉低pinMode(27, INPUT); pullUpDnControl(27, PUD_UP); // 使能内部上拉 while (1) { if (digitalRead(27) LOW) // 按钮按下在这里做事 delay(10); // 简单消抖 }不想轮询库提供边沿中断把回调函数挂到引脚上电平变化即触发——仓库里的 examples/isr.c 就是一个最小可跑的中断示例。任务三和扩展芯片说话SPI / I2CSPI例如接 AD 转换器、屏幕#include wiringPiSPI.h int fd wiringPiSPISetup(0, 9600); // 片选 CS09.6MHz uint8_t buf[2] { 0x41, 0x00 }; wiringPiSPIDataRW(fd, buf, 2); // buf 中同时是发送与接收数据I2C例如接 EEPROM、传感器#include wiringPiI2C.h int fd wiringPiI2CSetup(0x48); // 打开 I2C 地址 0x48 的设备 wiringPiI2CWrite(fd, 0x54); int v wiringPiI2CRead(fd);更省事的做法wiringPi/目录下为常见芯片写好了现成驱动MCP3002、MCP3004、PCF8574、ADS1115、DS18B20 等多数还能通过 pseudoPins 机制把扩展芯片的脚映射成普通 GPIO直接digitalRead/digitalWrite就能用。️ 能力全景一张表看完能干什么能力说明核心文件GPIO 读写 / 中断电平、上下拉、边沿触发回调wiringPi/wiringPi.c软件 PWM任意引脚的模拟 PWMwiringPi/softPwm.c软件伺服 / 软音舵机角度、蜂鸣器音高wiringPi/softServo.c、wiringPi/softTone.cSPI / I2C / 串口三种总线的用户态接口wiringPi/wiringPiSPI.c、wiringPi/wiringPiI2C.c、wiringPi/wiringSerial.c位移寄存器SR595 扩展出更多 GPIOwiringPi/sr595.c外设驱动16x2 LCD、128x64 屏、DS1302 时钟、piGlow、Scroll PhatdevLib/网络远程 GPIO守护进程 wiringpid 跨机读脚wiringPiD/命令行工具gpio读写引脚、看全表gpio/gpio.c硬件型号限制只有一条Pi 5 上 RP1 芯片文档未公开GCLK时钟输出暂不支持其余功能均可用。 踩坑速查现象 → 原因 → 解决现象原因解决编译报wiringPi.h: No such file or directory头文件未装或没找到确认源码已./build装到/usr/local/include或安装libwiringpi-dev编译报-lwiringPi: cannot find -lwiringPi库路径不在链接搜索路径加-L/usr/local/lib若目录不同检查echo $LIBRARY_PATH链接成功、一运行就error while loading shared libraries/usr/local/lib不在动态链接路径写一行/usr/local/lib进/etc/ld.so.conf后执行sudo ldconfig运行报wiringPiSetup: Unable to open /dev/mem: Permission denied直接访问寄存器需要 root用sudo ./你的程序运行灯不亮、脚没反应编号方案用错 / 脚被占用 / 接线错先gpio readall对照编号与电平再查接线确认初始化函数和引脚号属于同一套方案一切看似正常但行为诡异库内部出错没打出来加环境变量再跑WIRINGPI_DEBUG1 ./你的程序WIRINGPI_DEBUG1 gpio readall同理 下一步清单 资源导航动手清单按顺序做一遍就入门了把点灯改成闪烁调整周期加一颗按钮用任务二读输入并控制 LED跑一遍 examples/ 下的中断示例体会轮询与中断的差别用gpio readall给自己画一张当前接线表存档。资源导航完整 API 文档documentation/english/functions.md含各型号引脚编号对照表另有德语版 documentation/deutsch/functions.md头文件与全部函数原型wiringPi/wiringPi.h示例程序点灯、中断、LCD、DS1302 等cd examples make可编译examples/40 引脚参考图PDFpins/pins.pdf编译与卸载说明INSTALL现在就去 Pi 上敲下git clone和sudo ./build让第一颗 LED 亮起来吧。【免费下载链接】WiringPiThe arguably fastest GPIO Library for the Raspberry Pi项目地址: https://gitcode.com/gh_mirrors/wi/WiringPi创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考