讲师中心 微信公众号
AI工具推荐 视频效率加速

C++怎么操作GPIO引脚_C++树莓派开发教程【硬件】

千涛姑娘_2174

千涛姑娘_2174

发布时间:2026-02-23 15:32:03

|

612人浏览过

|

来源于php中文网

原创

推荐使用 libgpiod 替代已弃用的 wiringPi:安装 libgpiod-dev,通过 /dev/gpiochip0 操作 GPIO,需加入 gpio 用户组并调用 gpiod_line_request_output 等接口,注意 BCM 编号与 line index 区分。

c++怎么操作gpio引脚_c++树莓派开发教程【硬件】

用 wiringPi 库直接控制 GPIO,但别再装它了

树莓派官方已弃用 wiringPi,2024 年起新系统(如 Raspberry Pi OS Bookworm)默认不预装,且其 gpio 命令在非 root 下会报 Permission denied 或 Unable to determine hardware version。现在更稳妥的方式是走 Linux 标准的 sysfs 接口(/sys/class/gpio)或更现代的 libgpiod。

推荐用 libgpiod:它支持 edge-triggered 中断、批量操作、无需 root(靠 udev 规则),且和内核主线同步更新。

  • 安装:sudo apt install libgpiod-dev,头文件在 <gpiod.h>
  • 编译时加 -lgpiod,例如:g++ -o blink blink.cpp -lgpiod
  • 设备路径固定为 /dev/gpiochip0(树莓派通常只有一个 chip),别硬编码芯片编号

gpiod_chip_open() 失败常见原因

调用 gpiod_chip_open("/dev/gpiochip0") 返回 nullptr,大概率不是代码写错,而是权限或设备节点问题。

  • 检查设备是否存在:ls /dev/gpiochip* —— 若无输出,说明内核没启用 GPIO 字符设备驱动(CONFIG_GPIO_CDEV=y)
  • 普通用户需加入 gpio 用户组:sudo usermod -aG gpio $USER,然后重新登录
  • 某些旧镜像默认禁用 cdev,需在 /boot/config.txt 加一行:dtoverlay=gpio-noirq(仅调试用)或换用标准 overlay
  • 别用 sudo 绕过权限——这掩盖真实问题,且中断回调在 root 下无法触发用户空间信号

设置输出引脚并翻转电平的最小可靠写法

用 libgpiod 控制一个 LED 引脚(比如 BCM 18),关键不是“怎么亮”,而是“怎么避免时序错乱或资源泄漏”。

C++ Code Review Master
C++ Code Review Master

组合式C++代码评审方案,融合静态分析、AI推理、多轮迭代评审和C++专项检查,适用于PR审查、增量代码审查、全项目评审和代码质量评分,触发词包括review cpp、cpp代码评审、C++review、代码审查。

下载

立即学习“C++免费学习笔记(深入)”;

#include <gpiod.h>
#include <unistd.h>

int main() {
    struct gpiod_chip *chip = gpiod_chip_open("/dev/gpiochip0");
    struct gpiod_line *line = gpiod_chip_get_line(chip, 18); // BCM 编号,非物理针脚号
    gpiod_line_request_output(line, "blink", GPIOD_LINE_ACTIVE_STATE_HIGH);

    for (int i = 0; i < 5; ++i) {
        gpiod_line_set_value(line, 1);
        usleep(500000);
        gpiod_line_set_value(line, 0);
        usleep(500000);
    }

    gpiod_line_release(line);
    gpiod_chip_close(chip);
}
  • 必须调用 gpiod_line_request_output(),否则 set_value 会静默失败
  • GPIOD_LINE_ACTIVE_STATE_HIGH 表示逻辑高 = 物理高电平;若接的是共阴 LED,这个值就对;若接继电器模块(常低有效),得用 GPIOD_LINE_ACTIVE_STATE_LOW
  • 别用 sleep()——精度差,用 usleep() 或 nanosleep()
  • 务必调用 gpiod_line_release(),否则下次运行可能报 Device or resource busy

读取按钮输入时为什么总读到抖动值

硬件消抖没做,纯靠软件延时判断,会导致多次触发或漏触发。libgpiod 本身不处理抖动,得自己加策略。

  • 优先用内核级 debounce:查 gpiod_line_is_used() 是否被占用,然后尝试 gpiod_line_set_config() 配置 debounce_period_us(需内核 ≥ 5.5 且驱动支持)
  • 简单应用可用“两次采样”法:读到变化后,等待 20ms 再读一次,两次一致才确认有效
  • 避免轮询:改用 gpiod_line_request_input_flags() + gpiod_line_event_wait() 等待边沿事件,省 CPU 且响应及时
  • 注意:树莓派 GPIO 没内置上拉/下拉的软件配置能力,必须外接电阻或用 gpio 命令初始化(如 raspi-gpio set 18 pu),libgpiod 不提供该功能

最易被忽略的一点:BCM 编号和物理针脚号混用。树莓派文档里标的是物理针脚(如 Pin 12 = BCM 18),但 libgpiod 的 line index 是按芯片内部顺序排的,不是 BCM 号——得用 gpiod_chip_get_line_by_name() 或查 gpioinfo 输出确认实际映射。

热门AI工具

更多
DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

AionClaw
AionClaw Hot

AionClaw是一款面向办公、创作和编程任务的AI桌面智能体。

PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

相关专题

更多
edge是什么浏览器
edge是什么浏览器

Edge是一款由Microsoft开发的网页浏览器,是Windows 10操作系统中默认的浏览器,其目标是提供更快、更安全、更现代化的浏览器体验。本专题为大家提供edge浏览器相关的文章、下载、课程内容,供大家免费下载体验。

2882

2023.08.21

IE浏览器自动跳转EDGE如何恢复
IE浏览器自动跳转EDGE如何恢复

ie浏览器自动跳转edge的解决办法:1、更改默认浏览器设置;2、阻止edge浏览器的自动跳转;3、更改超链接的默认打开方式;4、禁用“快速网页查看器”;5、卸载edge浏览器;6、检查第三方插件或应用程序等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2474

2024.03.05

如何解决Edge打开但没有标题的问题
如何解决Edge打开但没有标题的问题

若 Microsoft Edge 浏览器打开后无标题(窗口空白或标题栏缺失),可尝试以下方法解决: 重启 Edge:关闭所有窗口,重新启动浏览器。 重置窗口布局:右击任务栏 Edge 图标 → 选择「最大化」或「还原」。 禁用扩展:进入 edge://extensions 临时关闭插件测试。 重置浏览器设置:前往 edge://settings/reset 恢复默认配置。 更新或重装 Edge:检查最新版本,或通过控制面板修复

2912

2025.04.24

resource是什么文件
resource是什么文件

Resource文件是一种特殊类型的文件,它通常用于存储应用程序或操作系统中的各种资源信息。它们在应用程序开发中起着关键作用,并在跨平台开发和国际化方面提供支持。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

320

2023.12.20

硬盘接口类型介绍
硬盘接口类型介绍

硬盘接口类型有IDE、SATA、SCSI、Fibre Channel、USB、eSATA、mSATA、PCIe等等。详细介绍:1、IDE接口是一种并行接口,主要用于连接硬盘和光驱等设备,它主要有两种类型:ATA和ATAPI,IDE接口已经逐渐被SATA接口;2、SATA接口是一种串行接口,相较于IDE接口,它具有更高的传输速度、更低的功耗和更小的体积;3、SCSI接口等等。

3108

2023.10.19

PHP接口编写教程
PHP接口编写教程

本专题整合了PHP接口编写教程,阅读专题下面的文章了解更多详细内容。

4669

2025.10.17

php8.4实现接口限流的教程
php8.4实现接口限流的教程

PHP8.4本身不内置限流功能,需借助Redis(令牌桶)或Swoole(漏桶)实现;文件锁因I/O瓶颈、无跨机共享、秒级精度等缺陷不适用高并发场景。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

3729

2025.12.29

java接口相关教程
java接口相关教程

本专题整合了java接口相关内容,阅读专题下面的文章了解更多详细内容。

426

2026.01.19

Kratos框架HTTP与gRPC服务开发教程
Kratos框架HTTP与gRPC服务开发教程

本专题围绕Kratos框架双协议服务开发,涵盖HTTP路由与处理器编写、参数获取、gRPC服务实现与客户端调用、metadata上下文传递、encoding编解码注册、统一响应封装、超时控制与流式响应实现方法。

0

2026.10.10

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C++ Core Guidelines
C++ Core Guidelines

共0课时 | 0人学习

C++ Reference
C++ Reference

共0课时 | 0人学习

C++ 官方标准说明
C++ 官方标准说明

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn