Linux系统通过libgpiod读写GPIO

news2024/9/20 3:21:07

本文介绍Linux系统通过libgpiod读写GPIO。

从Linux 4.8后,官方不再推荐使用sysfs操作GPIO,目前,libgpiod是操作GPIO的首选方法。本文以Raspberry Pi 4开发板为例简要介绍通过libgpiod读写GPIO。

1.libgpiod简介

libgpiod是用于Linux环境下与GPIO交互的C库和工具,它封装了ioctl调用和简单的API接口。与sysfs方式相比,libgpiod可以保证所有分配的资源,在关闭文件描述符后得到完全释放,并且拥有sysfs方式接口中不存在的功能(如时间轮询,一次设置/读取多个gpio值)。此外,libgpiod还包含一组命令行工具,允许用户使用脚本对gpio进行操作。

2.安装libgpiod

要使用libgpiod需先安装相应的命令行开发工具及库,命令如下:

sudo apt-get install gpiod libgpiod-dev -y

命令行工具主要提供如下命令:

1)gpiodetect

检测系统存在的gpiochips,名称,GPIO管脚数量,如树梅派的:

2)gpioinfo

查看gpio详细信息,在操作gpio时非常有用,如树梅派的:

3)gpioget

读取gpio值,如读取line 23,line 25这2个GPIO值,命令如下:

gpioget gpiochip0 23 25

4)gpioset

写gpio值,如设置line 24为1,line 25为0, 命令如下:

gpioset gpiochip0 24=1 25=0

5)gpiofind

根据名称查询line,如上图line 5的名称为“GPIO5”,命令如下:

gpiofind GPIO5

返回如下:

和上面的gpio信息一致。

6)gpiomon

监听GPIO上的时间,用于读取GPIO状态,如监听line 23,命令如下:

gpiomon gpiochip0 23

命令会阻塞在那里,当GPIO状态发生变化时会打印出来。

3.使用libgpiod编程

这里以C代码为例,参考代码如下:

#include <gpiod.h>
#include <stdio.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>

int main(void)
{
    const char *chipname = "gpiochip0";
    struct gpiod_chip *chip;
    struct gpiod_line *line;
    int ret;
    int value;

    chip = gpiod_chip_open_by_name(chipname);  //open chip

    if (chip == NULL) {
        printf("gpiod open failed\r\n");
    }

    line = gpiod_chip_get_line(chip, 23);  //get gpio line
    if (line == NULL) {
        printf("gpiod get line failed\r\n");
    }

    /*
    ret = gpiod_line_request_output(line, "Consumer", 0);  //set gpio output mode
    if (ret < 0) {
        printf("gpiod request output failed\r\n");
    }
    */

    /*
    ret = gpiod_line_set_value(line, 1);  //output 1
    if (ret < 0) {
        printf("gpiod set value failed\r\n");
    }
    */

    /*
    ret = gpiod_line_set_value(line, 0);  //output 0
    if (ret < 0) {
        printf("gpiod set value failed\r\n");
    }
    */
    
    ret = gpiod_line_request_input(line, "Consumer");  //set gpio input mode
    if (ret < 0) {
        printf("gpiod request input failed\r\n");
    }

    value = gpiod_line_get_value(line);  //read gpio
    printf("gpiod value:%d\r\n", value);

    gpiod_line_release(line);  //release gpio line

    gpiod_chip_close(chip);  //chose chip

    return 0;
}

编译的时候别忘里引入“-lgpiod”库,如使用gcc编译:

gcc -o gpio gpio.c -lgpiod

总结,本文介绍了Linux系统通过libgpiod读写GPIO。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2147728.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

虚拟机:3、(待更)WSL2安装Ubuntu系统+实现GPU直通

WSL2实现linux子系统GPU直通 安装WSL2和Ubuntu 见https://blog.csdn.net/bule_shake/article/details/135992375 问题&#xff1a;wsl --update进度卡住 如果命令wsl --update进度一直为0&#xff0c;可以先运行wsl --shutdown&#xff0c;然后再次升级。 微软商店打不开、…

[2025]基于微信小程序慢性呼吸系统疾病的健康管理(源码+文档+解答)

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

CTFshow——萌新隐写(未完待续)

萌新隐写2 首先暴力破解密码&#xff0c;初始密码设为19000000即可 我用的是ziperello 萌新隐写3 萌新隐写4 word打开 - > 打开设置 - > 隐藏文字 - >flag出现 萌新隐写5 中文转unicode 16进制转字符串 base32解码 萌新隐写6 暂时不会。。。。 隐写1 打开就看到头是…

基于微信小程序的健身房管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 基于微信小程序JavaSpringBootVueMySQL的健…

深度学习基础案例5--VGG16人脸识别(体验学习的痛苦与乐趣)

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 前言 这次目标本来要达到60%&#xff0c;但是却非常稳定的达到了40%&#xff0c;​&#x1f622;​​&#x1f622;​​&#x1f622;​​&#x1f622;​&am…

鹰眼降尘系统怎么样

鹰眼降尘系统是一种高效、智能且环保的粉尘治理解决方案&#xff0c;其表现优秀&#xff0c;朗观视觉小编认为&#xff0c;主要体现在以下几个方面&#xff1a; 智能化程度高&#xff1a;鹰眼降尘系统集成了先进的图像识别技术和机器学习算法&#xff0c;能够自动识别并跟踪粉尘…

2011年全国硕士研究生入学统一考试计算机科学与技术

1. 试卷背景&#xff1a; 试题&#xff1a;2011年全国硕士研究生入学统一考试计算机科学与技术学科联考中的计算机学科专业基础综合试题。难点&#xff1a;该问题的研究难点在于试题涵盖了计算机科学与技术的多个方面&#xff0c;包括数据结构、算法、计算机组成原理、操作系统…

Amber学习---小分子肽段的MD(第一天)

参考资料&#xff1a;1.科学网—AMBER基础教程B0&#xff1a;AMBER分子动力学模拟入门 - 李继存的博文 (sciencenet.cn) 2.Benjamin D. Madej & Ross Walker, An Introduction to Molecular Dynamics Simulations using AMBER 1 使用wsl&#xff08;windows的子系统linu…

VirtualBox 网络设置

VirtualBox 是一款非常流行的虚拟化软件&#xff0c;在计算机上创建虚拟环境运行不同操作系统和应用程序。网络设置在 VirtualBox 中至关重要&#xff0c;它决定了虚拟机能否连接到互联网或其他计算机&#xff0c;实现数据传输和共享。 在 VirtualBox 中创建虚拟机时&#xff…

Android15之源码分支qpr、dp、beta、r1含义(二百三十二)

简介&#xff1a; CSDN博客专家、《Android系统多媒体进阶实战》一书作者 新书发布&#xff1a;《Android系统多媒体进阶实战》&#x1f680; 优质专栏&#xff1a; Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a; 多媒体系统工程师系列【…

【算法题】64. 最小路径和-力扣(LeetCode)

【算法题】64. 最小路径和-力扣(LeetCode) 1.题目 下方是力扣官方题目的地址 64. 最小路径和 给定一个包含非负整数的 *m* x *n* 网格 grid &#xff0c;请找出一条从左上角到右下角的路径&#xff0c;使得路径上的数字总和为最小。 **说明&#xff1a;**每次只能向下或者…

提升Windows 7中谷歌浏览器隐私设置的方法

在数字化时代&#xff0c;保护个人隐私变得尤为重要。本文将详细介绍如何通过调整谷歌浏览器的隐私设置来提高您的隐私保护水平。&#xff08;本文由https://www.liulanqibuluo.com/站点的作者进行编写&#xff0c;转载时请进行标注。&#xff09;以下是具体的操作步骤&#xf…

有源滤波器UAF42

有源滤波器模块&#xff0c;在电路板上同时实现了低通&#xff0c;高通&#xff0c;带通 滤波器&#xff0c;可选其一进行输出&#xff0c;并可通过改变滑变阻值&#xff0c;轻松调节其滤波器中心频率&#xff0c;Q值&#xff0c;通带增益等&#xff0c; 也可方便实现Butterwo…

GUI编程16:图片按钮、单选框、多选框

视频链接&#xff1a;18、图片按钮、单选框、多选框_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1DJ411B75F?p18&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5 1.图片按钮代码示例 package com.yundait.lesson05;import javax.swing.*; import java.awt.*; impo…

硬件检测工具 | CPU-Z v2.11.0 官方中文绿色版

CPU-Z是一款广受欢迎的硬件检测工具&#xff0c;主要用于收集电脑处理器的详细信息。这款软件能够提供关于CPU的详细数据&#xff0c;包括处理器名称、编号、代号、进程和缓存等信息。 此外&#xff0c;CPU-Z还能实时监测每个内核的内部频率和内存频率&#xff0c;以及收集主板…

行人动作行为识别系统源码分享

行人动作行为识别检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer…

pytorch入门(2)——TensorBoard的使用

TensorBoard 是Google开发的一个机器学习可视化工具。其主要用于记录机器学习过程&#xff0c;例如&#xff1a; 记录损失变化、准确率变化等记录图片变化、语音变化、文本变化等&#xff0c;例如在做GAN时&#xff0c;可以过一段时间记录一张生成的图片绘制模型 TensorBoard…

【JAVA】数据脱敏技术(对称加密算法、非对称加密算法、哈希算法、消息认证码(MAC)算法、密钥交换算法)使用方法

文章目录 数据脱敏的定义和目的数据脱敏的技术分类对称加密算法非对称加密算法哈希算法消息认证码&#xff08;MAC&#xff09;算法密钥交换算法 数据脱敏的技术方案实现字符替换哈希算法&#xff08;例如:SHA-3 算法&#xff09;消息认证码&#xff08;MAC&#xff09;算法(CM…

【Vmware16安装教程】

&#x1f4d6;Vmware16安装教程 ✅1.下载✅2.安装 ✅1.下载 官网地址&#xff1a;https://www.vmware.com/ 百度云盘&#xff1a;Vmware16下载 123云盘&#xff1a;Vmware16下载 ✅2.安装 1.双击安装包VMware-workstation-full-16.1.0-LinuxProbe.Com.exe&#xff0c;点击…

对 JavaScript 原型的理解

笔者看了一些有关 JavaScript 原型的文章有感而发&#xff0c;就将所感所悟画了下来如果有理解错误和不足的地方&#xff0c;欢迎各位大佬指出&#xff0c;笔者感激不尽