二、QT和驱动模块实现智能家居-----5、通过QT控制LED
在QT界面,我们要实现点击“LED”按钮就可以控制板子上的LED。LED接线图如下:

在Linux 系统里,我们可以使用2种方法去操作上面的LED:
① 使用GPIO SYSFS系统:这需要一定的硬件知识,需要设置引脚的方向、数值。
② 使用驱动程序:无需硬件知识,使用open/read/write接口调用驱动即可。
1、GPIO SYSFS 系统
一个芯片内部,有多个 GPIO 控制器,每个 GPIO 控制器有多个引脚。在 /sys/bus/gpio/devices 目录下,列出了所有的 GPIO 控制器,如下表示有 6 个 GPIO 控制器:
# ls /sys/bus/gpio/devices
gpiochip0 gpiochip1 gpiochip2 gpiochip3 gpiochip4 gpiochip5
怎么查看每个GPIO 控制器的详细信息?/sys/class/gpio/gpiochipXXX 下,有这些信息:
ls /sys/class/gpio/gpiochip* -d1 //列出GPIOx的信息/sys/class/gpio/gpiochip0
/sys/class/gpio/gpiochip128
/sys/class/gpio/gpiochip32
/sys/class/gpio/gpiochip504
/sys/class/gpio/gpiochip64
/sys/class/gpio/gpiochip96
ls /sys/class/gpio/gpiochip0 -1 //列出GPIO0的信息
base // 这个GPIO控制器的GPIO编号基值
device
label // 名字
ngpio // 引脚个数
power
subsystem
uevent
cat /sys/class/gpio/gpiochip0/label //GPIO0的标签209c000.gpio
查看GPIO使用情况,执行如下命令即可:
cat /sys/kernel/debug/gpio
gpiochip0: GPIOs 0-31, parent: platform/209c000.gpio, 209c000.gpio: gpio-5 ( |goodix_ts_int ) in hi IRQ gpio-19 ( |cd ) in hi IRQ gpio-20 ( |spi_imx ) out hi gpiochip1: GPIOs 32-63, parent: platform/20a0000.gpio, 20a0000.gpio: gpiochip2: GPIOs 64-95, parent: platform/20a4000.gpio, 20a4000.gpio: gpio-68 ( |lcdif_rst ) out hi gpiochip3: GPIOs 96-127, parent: platform/20a8000.gpio, 20a8000.gpio: gpio-110 ( |User2 Button ) in hi IRQ gpio-120 ( |spi_imx ) in lo gpio-122 ( |spi_imx ) in lo gpiochip4: GPIOs 128-159, parent: platform/20ac000.gpio, 20ac000.gpio: gpio-129 ( |User1 Button ) in hi IRQ gpio-130 ( |goodix_ts_rst ) out hi gpio-133 ( |sysfs ) out hi gpio-134 ( |phy-reset ) out hi gpio-135 ( |spi32766.0 ) out hi gpio-136 ( |? ) out lo gpio-137 ( |phy-reset ) out hi gpio-138 ( |spi4 ) out hi gpio-139 ( |spi4 ) out lo
2、通过SYSFS使用GPIO
1.)确定GPIO编号
查看每个/sys/class/gpio/gpiochipXXX目录下的label,确定是你要用的GPIO控制器,也称为GPIO Bank。 根据它名字gpiochipXXX,就可以知道基值是XXX。 基值加上引脚offset,就是这个引脚的编号。
注:对于GPIOx_y,一般有一个公式:编号=(x-1)*32+y。x从1开始。 在IMX6ULL的原理图里,LED使用的引脚是GPIO5_3,它的编号为:(5-1)*32+3=131。
2) 导出/设置方向/读写值
举例:IMX6ULL使用的GPIO5_3引脚编号是131,可以如下操作:
echo 131 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio131/direction
echo 1 > /sys/class/gpio/gpio131/value
echo 131 > /sys/class/gpio/unexport
如果GPIO5_3是按键,可以如下读取它的值:
echo 131 > /sys/class/gpio/export
echo in > /sys/class/gpio/gpio131/direction
cat /sys/class/gpio/gpio131/value
echo 131 > /sys/class/gpio/unexport
3)编写应用程序
打开QT在原文件Sources内新建一个led.cpp
①按键初始化程序
void LED_Init(void)
{static int fd;fd = open("/sys/class/gpio/export", WRONLY);if(fd < 0)
{qDebug() << "open /sys/class/gpio/export error";return;
}write(fd, "131\n", 4);close(fd);fd = open("/sys/class/gpio/export", WRONLY);if(fd < 0)
{qDebug() << "open /sys/class/gpio/gpio131/direction error";return;
}write(fd, "out\n", 4);close(fd);
}
②:按键控制程序
void LED_Control(int on)
{static fd = -1;if(fd == -1)
{fd = open("/sys/class/gpio/gpio131/value", O_RDWR);return;
}if(fd < 0)
{qDebug() << "open /sys/class/gpio/gpio131/valuen error";return;
}if(on)
{write(fd, "0\n", 2);
}
else
{write(fd, "1\n", 2);
}
}
然后在Header文件下编写led.h文件
最后主函数调用初始化程序,主窗函数调用控制函数。
相关文章:
二、QT和驱动模块实现智能家居-----5、通过QT控制LED
在QT界面,我们要实现点击“LED”按钮就可以控制板子上的LED。LED接线图如下: 在Linux 系统里,我们可以使用2种方法去操作上面的LED: ① 使用GPIO SYSFS系统:这需要一定的硬件知识,需要设置引脚的方向、数值…...
基于Android平台的SOME/IP测试模块 EPT-ETS
在汽车产业智能化、网联化的时代浪潮中,汽车电子系统正经历着前所未有的变革。SOME/IP(Scalable service-Oriented MiddlewarE over IP)协议作为汽车电子通信领域的关键技术,其稳定性、可靠性与高效性对于整车性能的提升起着至关重…...
QT实现计算器
1:在注册登录的练习里面, 追加一个QListWidget 项目列表 要求:点击注册之后,将账号显示到 listWidget上面去 以及,在listWidget中双击某个账号的时候,将该账号删除 Widget.h #ifndef WIDGET_H #define…...
Go红队开发—语法补充
文章目录 错误控制使用自定义错误类型错误包装errors.Is 和 errors.Aspanic捕获、recover 、defer错误控制练习 接口结构体实现接口基本类型实现接口切片实现接口 接口练习Embed嵌入文件 之前有师傅问这个系列好像跟红队没啥关系,前几期确实没啥关系,因为…...
二、Redis 安装与基本配置:全平台安装指南 服务器配置详解
Redis 安装与基本配置:全平台安装指南 & 服务器配置详解 Redis 作为高性能的内存数据库,其安装和配置是使用 Redis 的第一步。本篇文章将全面介绍 Redis 的安装方式,覆盖 Windows、Linux、Docker 环境,并详细讲解 Redis 的基础配置,包括 持久化、日志、端口设置等。此…...
halcon学习笔记1
环境的搭建就不说了,主要是作者在入职后的实际学习与实践。 打开应用程序 这里作者的个人理解是1号区域主要是可以观察到读取的图像以及后续对图像进行何种操作,2的算子类似于Opencv中的API,可以在上面进行参数的调整,例如read_I…...
解决Docker拉取镜像超时错误,docker: Error response from daemon:
当使用docker pull或docker run时遇到net/http: request canceled while waiting for connection的报错,说明Docker客户端在访问Docker Hub时出现网络连接问题。可以不用挂加速器也能解决,linux不好用clash。以下是经过验证的方法(感谢轩辕镜…...
Masscan下载Linux安装
masscan 是一款高速的端口扫描工具,能够在极短的时间内扫描大量IP地址和端口。以下是关于如何在Linux系统上下载并安装 masscan 的详细步骤。 ### 通过包管理器安装 对于一些Linux发行版,你可以直接使用系统的包管理器来安装 masscan。例如,…...
js的简单介绍
一.javascript(是什么) 是一种运行在客户端(浏览器)的编程语言,实现人机交互效果 作用 网页特效(监听客户的一些行为让网页做出对应的反馈)表单验证(针对表格数据的合法性进行判断)数据交互(获取后台的数据…...
神经网络 - 激活函数(Swish函数、GELU函数)
一、Swish 函数 Swish 函数是一种较新的激活函数,由 Ramachandran 等人在 2017 年提出,其数学表达式通常为 其中 σ(x) 是 Sigmoid 函数(Logistic 函数)。 如何理解 Swish 函数 自门控特性 Swish 函数可以看作是对输入 x 进行“…...
关于后端使用Boolean或boolean时前端收到的参数的区别
当后端使用的是Boolean时,调用的方法是setIsLoginUser,前端收到的参数的参数名是isLoginUser 而当后端使用的是boolean时,调用的方法是setLoginUser,前端收到的参数的参数名是loginUser 封装类和基本数据类型在使用时需要注意这…...
笔记:代码随想录算法训练营第35天: 01背包问题 二维、 01背包问题 一维 、LeetCode416. 分割等和子集
学习资料:代码随想录 这一块儿学得挺痛苦 注:文中含大模型生成内容 动态规划:01背包理论基础 卡码网第46题 思路:五部曲 定义:dp[i][j]为第i个物品背包容量为j,能装下的最大价值 递推公式࿱…...
安装 Windows Docker Desktop - WSL问题
一、关联文章: 1、Docker Desktop 安装使用教程 2、家庭版 Windows 安装 Docker 没有 Hyper-V 问题 3、打开 Windows Docker Desktop 出现 Docker Engine Stopped 问题 二、问题解析 打开 Docker Desktop 出现问题,如下: Docker Desktop - WSL update failed An error o…...
Spring MVC 返回数据
目录 1、什么是 SpringMVC2、返回数据2.1、返回 JSON 对象2.2、请求转发2.3、请求重定向2.4、自定义返回的内容 1、什么是 SpringMVC 1、Tomcat 和 Servlet 分别是什么?有什么关系? Servlet 是 java 官方定义的 web 开发的标准规范;Tomcat 是…...
QT-信号与槽
1.在注册登录的练习里面,追加一个QListWidget项目列表 要求:点击注册之后,将账号显示到列表窗口小部件上面去 以及,在列表窗口小部件中双击某个账号的时候,将该账号删除 头文件 #ifndef WIDGET_H #define WIDGET_H #include <…...
版图自动化连接算法开发 00001 ------ 直接连接两个给定的坐标点
版图自动化连接算法开发 00001 ------ 直接连接两个给定的坐标点 引言正文定义坐标点的类绘图显示代码直接连接两个坐标点引言 由于人工智能的加速普及,每次手动绘制版图都会觉得特别繁琐,作者本人在想可否搞一个自动化连接器件端口的算法,后期可以根据一些设定的限制进行避…...
迷你世界脚本方块接口:Block
方块接口:Block 彼得兔 更新时间: 2024-08-27 11:04:56 具体函数名及描述如下: 序号 函数名 函数描述 1 isSolidBlock(...) 是否是固体方块 2 isLiquidBlock(...) 是否是液体方块 3 isAirBlock(...) 是否是气体方块 4 getBl…...
打造高清3D虚拟世界|零基础学习Unity HDRP高清渲染管线(第一天)
打造高清3D虚拟世界|零基础学习Unity HDRP高清渲染管线(第一天) 前言最后 前言 说真的,用Unity工作这几年,经历的项目大大小小,对于场景的渲染算是有一定的经验,但涉及到HDRP高清渲染管线的了解࿰…...
Docker项目部署-部署前端
nginx.conf文件内容如下。 worker_processes 1;events {worker_connections 1024; }http {include mime.types;default_type application/json;sendfile on;keepalive_timeout 65;server {listen 18080;# 指定前端项目所在的位置location / {root /usr/…...
【向量数据库Weaviate】与ChromaDB的差异、优劣
以下是 Weaviate 和 ChromaDB 的详细对比,涵盖设计目标、核心功能、性能、适用场景及优劣势分析: 1. 核心定位与设计目标 维度WeaviateChromaDB类型向量数据库 图数据库(支持混合搜索)轻量级纯向量数据库(专注嵌入存…...
19c补丁后oracle属主变化,导致不能识别磁盘组
补丁后服务器重启,数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后,存在与用户组权限相关的问题。具体表现为,Oracle 实例的运行用户(oracle)和集…...
PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建
制造业采购供应链管理是企业运营的核心环节,供应链协同管理在供应链上下游企业之间建立紧密的合作关系,通过信息共享、资源整合、业务协同等方式,实现供应链的全面管理和优化,提高供应链的效率和透明度,降低供应链的成…...
华为OD机试-食堂供餐-二分法
import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...
Caliper 配置文件解析:config.yaml
Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...
C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)
名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...
tomcat入门
1 tomcat 是什么 apache开发的web服务器可以为java web程序提供运行环境tomcat是一款高效,稳定,易于使用的web服务器tomcathttp服务器Servlet服务器 2 tomcat 目录介绍 -bin #存放tomcat的脚本 -conf #存放tomcat的配置文件 ---catalina.policy #to…...
LangFlow技术架构分析
🔧 LangFlow 的可视化技术栈 前端节点编辑器 底层框架:基于 (一个现代化的 React 节点绘图库) 功能: 拖拽式构建 LangGraph 状态机 实时连线定义节点依赖关系 可视化调试循环和分支逻辑 与 LangGraph 的深…...
UE5 音效系统
一.音效管理 音乐一般都是WAV,创建一个背景音乐类SoudClass,一个音效类SoundClass。所有的音乐都分为这两个类。再创建一个总音乐类,将上述两个作为它的子类。 接着我们创建一个音乐混合类SoundMix,将上述三个类翻入其中,通过它管理每个音乐…...
从零手写Java版本的LSM Tree (一):LSM Tree 概述
🔥 推荐一个高质量的Java LSM Tree开源项目! https://github.com/brianxiadong/java-lsm-tree java-lsm-tree 是一个从零实现的Log-Structured Merge Tree,专为高并发写入场景设计。 核心亮点: ⚡ 极致性能:写入速度超…...
自定义线程池1.2
自定义线程池 1.2 1. 简介 上次我们实现了 1.1 版本,将线程池中的线程数量交给使用者决定,并且将线程的创建延迟到任务提交的时候,在本文中我们将对这个版本进行如下的优化: 在新建线程时交给线程一个任务。让线程在某种情况下…...
