二、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类型向量数据库 图数据库(支持混合搜索)轻量级纯向量数据库(专注嵌入存…...
变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析
一、变量声明设计:let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性,这种设计体现了语言的核心哲学。以下是深度解析: 1.1 设计理念剖析 安全优先原则:默认不可变强制开发者明确声明意图 let x 5; …...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...
脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)
一、数据处理与分析实战 (一)实时滤波与参数调整 基础滤波操作 60Hz 工频滤波:勾选界面右侧 “60Hz” 复选框,可有效抑制电网干扰(适用于北美地区,欧洲用户可调整为 50Hz)。 平滑处理&…...

智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql
智慧工地管理云平台系统,智慧工地全套源码,java版智慧工地源码,支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求,提供“平台网络终端”的整体解决方案,提供劳务管理、视频管理、智能监测、绿色施工、安全管…...
连锁超市冷库节能解决方案:如何实现超市降本增效
在连锁超市冷库运营中,高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术,实现年省电费15%-60%,且不改动原有装备、安装快捷、…...

【单片机期末】单片机系统设计
主要内容:系统状态机,系统时基,系统需求分析,系统构建,系统状态流图 一、题目要求 二、绘制系统状态流图 题目:根据上述描述绘制系统状态流图,注明状态转移条件及方向。 三、利用定时器产生时…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序
一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...

ardupilot 开发环境eclipse 中import 缺少C++
目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...

(转)什么是DockerCompose?它有什么作用?
一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器。 Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...