发布时间:2026/7/17 5:02:36
[具身智能-567]:RDK(X3/X5)button_led.py 代码完整详解
RDKX3/X5button_led.py代码完整详解适用平台地平线 RDK X3、RDK X5库Hobot.GPIO地平线自研 Python GPIO 库语法高度兼容 RPi.GPIO功能简述读取按键输入同步控制 LED 输出按键电平状态直接映射到 LED按键按下 LED 点亮、松开熄灭。一、硬件接线说明python运行led_pin 31 # BOARD物理引脚31 → LED阳极串220Ω限流电阻 but_pin 37 # BOARD物理引脚37 → 按键一端推荐接线方案LED 回路Pin31 → 220Ω电阻 → LED正极 → GND按键回路上拉推荐方案 A开发板内部上拉按键一端 Pin37另一端接 GND方案 B外部Pin37 外接 10k 上拉电阻到 3.3V按键另一端接 GND⚠️ BOARD 编码 开发板 40Pin 排针丝印物理编号不需要记忆芯片 GPIO 编号新手首选。二、逐段源码解析1. 文件头 导入模块python运行#!/usr/bin/env python3 ################################################################################ # Apache2.0开源协议声明 ################################################################################ import sys import signal import Hobot.GPIO as GPIO import time#!/usr/bin/env python3指定解释器可直接chmod x ./xxx.py直接运行Hobot.GPIO地平线 RDK 平台专用 GPIO 库RDK 系统预装无需手动 pip 安装2. CtrlC 信号捕获函数python运行def signal_handler(signal, frame): sys.exit(0)作用捕获SIGINT键盘 CtrlC 中断信号优雅退出程序。补充真正的资源释放放在finally块信号 handler 只负责退出循环。3. 全局引脚定义python运行led_pin 31 # BOARD 编码 31输出 but_pin 37 # BOARD 编码 37输入 GPIO.setwarnings(False)GPIO.setwarnings(False)关闭警告当引脚已经被其他进程占用时库默认打印警告调试稳定后可以关闭。4. 核心主函数 main ()python运行def main(): prev_value None # 引脚初始化 GPIO.setmode(GPIO.BOARD) # 使用【物理丝印编号模式】 GPIO.setup(led_pin, GPIO.OUT) # 31号设置为输出 GPIO.setup(but_pin, GPIO.IN) # 37号设置为输入 GPIO.output(led_pin, GPIO.LOW) # LED初始状态熄灭 print(Starting demo now! Press CTRLC to exit) try: while True: curr_value GPIO.input(but_pin) # 读取按键当前电平 # 判断电平是否发生跳变按键按下/松开 if curr_value ! prev_value: GPIO.output(led_pin, curr_value) # 按键电平直接输出给LED prev_value curr_value print(Outputting {} to Pin {}.format(curr_value, led_pin)) time.sleep(1) # 循环间隔1秒 finally: GPIO.cleanup() # 【重点】程序退出时释放所有GPIO资源关键逻辑拆解GPIO.setmode(GPIO.BOARD)引脚编号模式一共 4 种BOARD电路板编号模式40Pin 排针物理丝印号推荐此 demo 使用BCM模仿树莓派 BCM 编号SOC芯片内核原始 GPIO 号查阅芯片手册使用CVM连接器信号名称字符串电平跳变检测prev_value保存上一次按键状态只有按键电平发生变化才修改 LED 状态避免重复输出。time.sleep(1)轮询⚠️【缺陷提醒】这种是轮询查询方式最低 1 秒才能识别一次按键动作按键快速按放会丢失事件优化方案使用中断边沿检测GPIO.add_event_detect()后面补充优化代码try ... finally 结构无论程序正常结束、CtrlC 强制退出、异常崩溃finally块一定会执行GPIO.cleanup()把 GPIO 恢复为默认输入状态防止引脚持续输出电平造成硬件隐患。5. 程序入口python运行if __name__ __main__: signal.signal(signal.SIGINT, signal_handler) main()signal.signal(SIGINT, handler)注册 CtrlC 中断回调Python 标准写法防止代码被其他文件 import 时自动执行三、运行操作步骤RDK X5 实测赋予执行权限bash运行chmod x button_led.py必须使用 root 权限操作 GPIO硬件权限限制bash运行sudo python3 button_led.py操作按下按键 → LED 点亮松开按键 → LED 熄灭控制台打印电平变化日志四、原生代码优缺点✅ 优点逻辑极简新手入门容易理解输入输出映射关系 ❌ 缺点轮询延时 1s响应慢快速按键会丢失CPU 持续循环占用资源没有启用内部上下拉电阻浮空输入容易出现电平抖动。五、进阶优化版本中断方式推荐项目使用使用边沿中断不需要 while 轮询实时响应按键节省 CPUpython运行#!/usr/bin/env python3 import sys import signal import Hobot.GPIO as GPIO import time led_pin 31 but_pin 37 GPIO.setwarnings(False) def signal_handler(signal, frame): GPIO.cleanup() sys.exit(0) # 按键中断回调函数 def button_callback(channel): val GPIO.input(but_pin) GPIO.output(led_pin, val) print(fButton state changed: {val}, LED set to {val}) def main(): GPIO.setmode(GPIO.BOARD) GPIO.setup(led_pin, GPIO.OUT) # 启用内部上拉电阻防止浮空抖动 GPIO.setup(but_pin, GPIO.IN, pull_up_downGPIO.PUD_UP) GPIO.output(led_pin, GPIO.LOW) # 注册双边沿中断上升沿下降沿都触发 GPIO.add_event_detect(but_pin, GPIO.BOTH, callbackbutton_callback, bouncetime200) print(Waiting button trigger, CTRLC exit) while True: time.sleep(0.1) if __name__ __main__: signal.signal(signal.SIGINT, signal_handler) main()重点新增特性pull_up_downGPIO.PUD_UP开启芯片内部上拉电阻解决浮空杂波add_event_detect硬件边沿中断bouncetime200消抖防止机械按键抖动多次触发无需高频轮询空闲时 CPU 低负载。六、常见踩坑清单RDK 开发高频问题报错 Permission denied✅ 解决GPIO 操作必须加sudo运行按键没反应电平一直不变检查接线、上下拉配置、确认引脚没有被系统设备树复用串口 / SPI 等功能占用LED 不亮检查 LED 正负极、限流电阻确认输出引脚是 BOARD 编号引脚被占用警告✅ 临时关闭GPIO.setwarnings(False)长期方案确认没有其他程序占用同一引脚

相关新闻

C++20概念与范围库实战:提升代码表达力与安全性的现代编程范式
2026/7/17 5:02:36

C++20概念与范围库实战:提升代码表达力与安全性的现代编程范式

1. 项目概述:为什么“懒惰”程序员需要C20?如果你和我一样,是个在C世界里摸爬滚打多年的“老油条”,或者是个想写更少代码、办更多事的“懒人”,那么C20的到来,绝对值得你放下手头的活儿,好好研…

阅读更多
[具身智能-566]:RDK RDK X5 mipi_camera.py(FCOS 目标检测 Demo)完整解析
2026/7/17 5:02:36

[具身智能-566]:RDK RDK X5 mipi_camera.py(FCOS 目标检测 Demo)完整解析

RDK X5 mipi_camera.py(FCOS 目标检测 Demo)完整解析运行环境:RDK OS3.x(X5 平台);核心组件:hobot_vio(相机 / 显示) hobot_dnn(BPU 推理) libpostprocess.so(C 后处理) 业务流程:…

阅读更多
C++静态成员变量:从内存模型到实战应用全解析
2026/7/17 5:02:36

C++静态成员变量:从内存模型到实战应用全解析

1. 静态成员变量:从“独一份”到“全局管家”的蜕变在C的面向对象世界里,我们习惯了每个对象都拥有自己独立的一份数据成员。比如,你创建了10个Student对象,每个对象都有自己的name和score。但有没有一种场景,你需要一…

阅读更多
HarmonyOS7 多行文本输入页实战:TextArea 不只是会用,还要用得顺手
2026/7/17 6:02:37

HarmonyOS7 多行文本输入页实战:TextArea 不只是会用,还要用得顺手

文章目录评论输入最怕边界没处理addReview 负责把输入变成列表数据页面怎么搭起来这里有个小经验完整代码写在最后TextArea 看起来只是一个多行输入框,但真放进业务里,马上就会遇到几个细节:空内容能不能提交、最多允许多少字、聚焦时边框要不…

阅读更多
HarmonyOS7 图片滤镜工作台实战:Image 滤镜 不只是会用,还要用得顺手
2026/7/17 6:02:37

HarmonyOS7 图片滤镜工作台实战:Image 滤镜 不只是会用,还要用得顺手

文章目录滤镜本质上是状态组合预设要能覆盖自定义参数页面怎么搭起来这里有个小经验完整代码写在最后图片效果页最容易做成参数面板:一堆滑块、一张图片,然后就结束了。这个案例稍微好一点,它把预设滤镜、自定义调参和 ImageFit 填充模式放在…

阅读更多
C++事件驱动编程实战:eventpp库极速集成与核心机制解析
2026/7/17 6:02:37

C++事件驱动编程实战:eventpp库极速集成与核心机制解析

1. 为什么你需要一个C事件处理库?如果你写过C GUI程序、网络服务或者游戏,大概率遇到过这样的场景:用户点击了一个按钮,你需要通知多个模块更新状态;一个网络数据包到达,需要触发一系列的业务逻辑处理&…

阅读更多
C++哈希表冲突处理:开放定址法与链地址法实战对比
2026/7/17 6:02:37

C++哈希表冲突处理:开放定址法与链地址法实战对比

1. 项目概述:从“碰撞”到“共存”的哈希艺术在C的世界里,无论是实现一个高速缓存、构建一个自定义的unordered_map,还是设计一个游戏中的物品ID快速查询系统,哈希表都是我们绕不开的核心数据结构。它的理想很美好:通过…

阅读更多
AI时代创作者表达权的技术突围:ArtArch半结构化生成引擎解析
2026/7/17 6:02:37

AI时代创作者表达权的技术突围:ArtArch半结构化生成引擎解析

1. 项目概述:AI时代创作者表达权的技术突围在生成式AI席卷内容创作领域的当下,"一句话生成完整作品"的技术演示正在各大社交平台病毒式传播。ArtArch创始人黄严却选择了一条截然不同的技术路径——他们的AI工具不追求全自动生成,而…

阅读更多
[具身智能-567]:RDK(X3/X5)button_led.py 代码完整详解
2026/7/17 5:02:36

[具身智能-567]:RDK(X3/X5)button_led.py 代码完整详解

RDK(X3/X5)button_led.py 代码完整详解适用平台:地平线 RDK X3、RDK X5;库:Hobot.GPIO(地平线自研 Python GPIO 库,语法高度兼容 RPi.GPIO)功能简述:读取按键输入&#x…

阅读更多
智慧树刷课插件:5分钟实现自动化学习的智能助手
2026/7/16 21:32:43

智慧树刷课插件:5分钟实现自动化学习的智能助手

智慧树刷课插件:5分钟实现自动化学习的智能助手 【免费下载链接】zhihuishu 智慧树刷课插件,自动播放下一集、1.5倍速度、无声 项目地址: https://gitcode.com/gh_mirrors/zh/zhihuishu 智慧树刷课插件是一款专为智慧树在线教育平台设计的Chrome浏…

阅读更多
Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案
2026/7/16 15:03:34

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 你是否在GOG或Epic Games Store购买了心仪的游戏…

阅读更多
办公自动化实战:5个免费工具构建合同处理流水线
2026/7/16 22:47:50

办公自动化实战:5个免费工具构建合同处理流水线

1. 这不是“又一个工具包”,而是一套经过237次真实场景验证的效率组合拳“2026.04.28实用教程工具分享”这个标题乍看平平无奇,像极了你邮箱里被自动归入“促销/订阅”文件夹的那类通知——但如果你真把它当普通更新忽略,接下来半年里&#x…

阅读更多
2026全国外贸独立站搭建公司推荐排行,含零代码SAAS、AI编程、源码定制
2026/7/17 0:02:36

2026全国外贸独立站搭建公司推荐排行,含零代码SAAS、AI编程、源码定制

2026全国外贸独立站搭建公司推荐排行 外贸工厂、工贸企业建设官网,核心需求与普通展示型网站并不相同。除了页面整洁、多语言适配和海外访问体验,企业还要重点考虑数据能否导出、站点能否迁移、源码是否可控、后续费用是否透明,以及更换服务…

阅读更多
HarmonyOS 应用开发《掌上英语》第18篇:Grid 布局实战——从功能 5 宫格到练习 2×2 模式
2026/7/17 0:02:36

HarmonyOS 应用开发《掌上英语》第18篇:Grid 布局实战——从功能 5 宫格到练习 2×2 模式

Grid 布局实战——从功能 5 宫格到练习 22 模式引言 Grid 布局是 ArkTS 中最强大的布局容器之一,它通过行列模板系统实现灵活的多列多行布局。在本英语学习 App 中,Grid 布局贯穿了首页的多个核心模块:功能栏 5 宫格、练习模式 22 卡片、以及…

阅读更多
HarmonyOS 应用开发《掌上英语》第19篇:3D 翻转动画实现——ArkTS 动画系统全解析
2026/7/17 0:02:36

HarmonyOS 应用开发《掌上英语》第19篇:3D 翻转动画实现——ArkTS 动画系统全解析

3D 翻转动画实现——ArkTS 动画系统全解析引言 在移动应用中,卡片翻转动画是最受欢迎的交互动效之一,它能给用户带来直观的"物理世界"操作感。在我们的英语学习 App 的单词学习页面(CourseHomePage.ets)中,就…

阅读更多
基于Dify与DeepSeek构建私有知识库问答系统实战指南
2026/7/17 5:10:40

基于Dify与DeepSeek构建私有知识库问答系统实战指南

在业务中快速构建一个能理解私有文档、准确回答专业问题的智能助手,是很多开发团队面临的共同挑战。传统方案往往需要从零开始搭建复杂的 RAG(检索增强生成)系统,涉及文档解析、向量化、检索、大模型调用等多个环节,整…

阅读更多
FAE放射组学分析工具:医学影像特征探索的完整解决方案
2026/7/17 5:34:11

FAE放射组学分析工具:医学影像特征探索的完整解决方案

FAE放射组学分析工具:医学影像特征探索的完整解决方案 【免费下载链接】FAE FeAture Explorer 项目地址: https://gitcode.com/gh_mirrors/fae/FAE 你是否曾经面对海量医学影像数据感到无从下手?想要从CT、MRI等影像中提取有价值的定量特征&#…

阅读更多
DesktopNaotu:你的终极离线思维导图解决方案,告别网络依赖!
2026/7/14 16:39:14

DesktopNaotu:你的终极离线思维导图解决方案,告别网络依赖!

DesktopNaotu:你的终极离线思维导图解决方案,告别网络依赖! 【免费下载链接】DesktopNaotu 桌面版脑图 (百度脑图离线版,思维导图) 跨平台支持 Windows/Linux/Mac OS. (A cross-platform multilingual Mind Map Tool) 项目地址:…

阅读更多