Linux 两种GPIO控制方式

news2025/1/10 20:20:02

1、采用sysfs的方式控制,这是内核标准的sysfs接口

如:

echo 25 > /sys/class/gpio/export

echo "out" > /sys/class/gpio/gpio25/direction

echo 1 > /sys/class/gpio/gpio25/value

2、采用libgpiod 控制内核生成的节点来控制/dev/gpiochip0或着是通过(yocto生成的可执行应用程序进行控制)

命令控制:

gpiodetect  gpiofind    gpioget     gpioinfo    gpiomon     gpioset

如控制一个led的亮和灭:

./gpioset 0 44=1 //点亮led

./gpioset 0 44=0 //熄灭led

对应的命令说明:

    gpiodetect    列出所有的gpio (如:gpiodetect)
    gpioinfo        列出某个gpio控制器的情况(如:gpioinfo 0)
    gpioset         设置gpio (如:./gpioset 0 44=1)
    gpioget         读取gpio (如:gpioget 0 44)
    gpiomon       监控gpio的状态(如:gpiomon 0 44
event: FALLING EDGE offset: 44 timestamp: [1689149426.089597926])

代码控制:


#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <gpiod.h> //include file
 
void main(void) {
    struct gpiod_chip *chip;
    struct gpiod_line *line;
    int req, value;
 

    chip = gpiod_chip_open("/dev/gpiochip0");
    //or chip = gpiod_chip_open_by_name("gpiochip0");
    if (!chip) {
        printf("Fail to open gpiochip0!\n");
        return ;
    }
 
    line = gpiod_chip_get_line(chip, 11);
    if (!line) {
        printf("Fail to get gpio line!\n");
        goto err;
    }
 
    req = gpiod_line_request_input(line, "gpio_state");
    if (req) { 
        printf("Fail to config input!\n");
        goto err;
    }
    value = gpiod_line_get_value(line);
    printf("GPIO value is: %d\n", value);
 
    if(gpiod_line_is_requested(line)) {
        printf("release gpio request!,and go on\n");
        gpiod_line_release(line);
    }
 
    /* config as output and set a description */
    req = gpiod_line_request_output(line, "gpio-bline", GPIOD_LINE_ACTIVE_STATE_HIGH);
    if (req)  { 
        printf("Fail to config output!\n");
        goto err;
    }
 
    while (1)
    {
       /* GPIO Toggle */
        value = !value;
        gpiod_line_set_value(line, value);
        /* print LED status */
        if(value)
            printf("LED turns ON\n");
        else
            printf("LED turns OFF\n");
   
        sleep(1);
    }
 
err:
    gpiod_chip_close(chip);
    return;

}

说明:

如下是内核官方从sysfs控制gpio到libgpiod控制gpio的说明:

kernel/git/torvalds/linux.git - Linux kernel source tree

 


 

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

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

相关文章

Qt:强大API、简化框架、多语言支持,构建全面应用程序“

强大的API&#xff1a;Qt提供了丰富的API&#xff0c;包括250多个C类&#xff0c;基于模板的集合、序列化、文件操作、IO设备、目录管理、日期/时间等功能。还包括正则表达式处理和支持2D/3D图形渲染&#xff0c;以及OpenGL和XML支持。此外&#xff0c;Qt还允许导入第三方图形设…

Spring Boot 框架中的配置文件

一、配置文件作用 整个项目中所有重要的数据都是在配置文件中配置的&#xff0c;比如&#xff1a; 数据库的连接信息&#xff08;包含用户名和密码的设置&#xff09;&#xff1b; 项目的启动端口&#xff1b; 第三方系统的调用秘钥等信息&#xff1b; 用于发现和定位问题的普…

小红书如何引流推广,小红书app评论图片脚本实操教学分享

大家好&#xff0c;我是小刘互联网思维。最近小红书越来越火&#xff0c;所以很多人或者小团队也都盯上了这个新兴市场。有人选择手动引流&#xff0c;就一定有人想软件引流&#xff0c;有些朋友就私信问我这个软件引流要怎么操作&#xff0c;接下来我就为大家简单讲解小红书脚…

多线程下的OOM问题

多线程下的OOM问题 前言问题排查日志查看代码查看集群查看问题解决 多线程OOM时候的回收测试代码启动参数设置控制台打印 前言 最近的一台服务器出现了OOM的情况&#xff0c;出于好奇就进行了一些探查&#xff0c;这里做一些简单的记录 问题排查 日志查看 登陆服务器查看当…

24考研数据结构-线性表3

目录 2.4 线性表的链式表示2.4.0 引入的原因2.4.1 单链表的定义 2.4.2 单链表的两种实现形式2.4.2.1 不带头结点的单链表2.4.2.2 带头结点的单链表2.4.2.3知识回顾与重要考点2.4.3.1 带头结点的单链表按位序插入节点2.4.3.2 单链表的插入节点的时间复杂度2.4.3.3 不带头结点的单…

Ceph网络模型

Ceph网络模型 Ceph 生产环境中一般分为两个网段公有网络: 用于用户的数据通信集群网络: 用于集群内部的管理通信

mac m1 触控栏TouchBar功能栏异常

电脑可能在高温下运行时间过长&#xff0c;导致TouchBar之前正常显示的调整屏幕亮度与调整声音等功能的按钮均丢失&#xff0c;然后看了一眼键盘设置&#xff0c;设置也是正常的&#xff0c;已勾选显示功能栏 下面请看 如何在MacBook Pro&#xff08;macOS Monterey&#xff0…

2023年深圳杯数学建模赛题浅析

由于今明两日由于一些不可避免的事情&#xff0c;这里仅仅先给大家简单写一个赛题浅析&#xff0c;详细过程步骤思路以及讲解视频预计后天发布 A题 影响城市居民身体健康的因素分析 A题以慢性病为命题背景&#xff0c;给出数据以及题目初步来看来看为一个数据处理数据分析的综…

elasticsearch查询操作(DSL语句方式)

说明&#xff1a;本文介绍在kibana&#xff0c;es的可视化界面上对文档的查询操作&#xff1b; 添加数据 先使用API&#xff0c;创建索引库&#xff0c;并且把数据从MySQL中查出来&#xff0c;传到ES上&#xff0c;参考&#xff08;http://t.csdn.cn/NaTHg&#xff09; 索引库…

Ceph部署方法介绍

Ceph部署方法介绍 Installing Ceph — Ceph Documentation Ceph环境规划 admin是一个部署节点

Centos7 扩容(LVM 和非 LVM)

一、磁盘扩容方式 CentOS 系统的磁盘扩容可以分为两种方式&#xff1a;LVM 管理和非 LVM 管理。 LVM 管理的分区和传统分区方式是可以共存的。在同一个系统中&#xff0c;你可以同时使用 LVM 管理的分区和传统分区。 例如&#xff0c;在 CentOS 系统中&#xff0c;你可以选择将…

《重构的时机和方法》书籍推荐

《重构的时机和方法》是一本由克里斯蒂安克劳森(Christian Clausen)所著&#xff08;郭涛翻译&#xff09;的软件工程经典之作。本书全面介绍了重构的概念、原则和方法&#xff0c;为软件开发者提供了一系列宝贵的指导和实践经验。在这篇书评文章中&#xff0c;我将从内容、实用…

Linux环境安装Tomcat

在tomcat官网(下载路径)下载好tomcat压缩包 上传服务器压缩到/usr/tomcat目录下 tar -zxvf xxx.tar.gz 配置tomcat环境变量 export CATALINA_HOME/usr/tomcat/apache-tomcat-8.5.56 export CATALINE_BASE/usr/tomcat/apache-tomcat-8.5.56 export PATH$PATH:$CATALINA_BASE/bi…

阿克曼转向模型介绍

阿克曼转向模型介绍 目录 阿克曼转向模型介绍是什么&#xff1f;基本原理应用与改进 是什么&#xff1f; 阿克曼转向是一种现代汽车的转向方式&#xff0c;在汽车转弯的时候&#xff0c;内外轮转过的角度不一样&#xff0c;内侧轮胎转弯半径小于外侧轮胎。 它描述了汽车转向系…

Spring中如何用注解方式存取JavaBean?有几种注入方式?

博主简介&#xff1a;想进大厂的打工人博主主页&#xff1a;xyk:所属专栏: JavaEE进阶 本篇文章将讲解如何在spring中使用注解的方式来存取Bean对象&#xff0c;spring提供了多种注入对象的方式&#xff0c;常见的注入方式包括 构造函数注入&#xff0c;Setter 方法注入和属性…

TypeError: can‘t convert np.ndarray of type numpy.object_.

在处理数据集的时候出现报错&#xff1a; TypeError: can’t convert np.ndarray of type numpy.object_. The only supported types are: float64, float32, float16, complex64, complex128, int64, int32, int16, int8, uint8, and bool. train_labels torch.tensor(train…

手机怎么压缩pdf?这种压缩方法简单易用

手机怎么压缩pdf&#xff1f;PDF文件是我们生活和工作中常用的一种文档格式&#xff0c;但是有时候PDF文件的大小会很大&#xff0c;不方便发送和存储。那么&#xff0c;如何在手机上压缩PDF文件呢&#xff1f;下面就给大家介绍一种简单好用的压缩方法。 今天要给大家介绍的这款…

甘特图的发展史

目录 背景: 过程: 总结&#xff1a; 背景: 1910年代初为了管理工程项目的进度而创造了甘特图。 1917年&#xff0c;美国工程师亨利甘特(Henry Laurence Gantt)首次提出了甘特图的概念。他是一位工程师和管理学家&#xff0c;设计了一种图表&#xff0c;用于显示进度成产仅度…

毕业生求职招聘网站的设计与实现JAVA(SpringBoot+VUE+Mysql)

由SpringBootVUEMysql实现的网站的设计 功能模块 设计思路&#xff1a;主要分为管理员、毕业生、招聘企业三大身份模块 首先是登录界面 注册界面 其次就是公共页面 公共页面又分为首页、空中宣讲会、招聘岗位、求职信息、论坛信息、试卷列表、招聘资讯、个人中心和后台管理、…

【原创】内网穿透案例

案列一&#xff08;Frp内网渗透&#xff09; 大概图列网上随便找的&#xff0c;路线是这个样子 这里选用ctfshow的一道命令执行题 由Frp实现内网访问及扫描 1.传入一句话&#xff0c;上线蚁剑http://b85fdf24-b98e-4810-9e76-a038a8987630.challenge.ctf.show:8080/?cecho…