当前位置: 首页 > news >正文

树莓派3B点灯(1)-- 四种方法

先做个简单一丢丢的吧。。。正好最近工作也要用这个。这次直接给够四种方法,给好给满。分别是Python点,用户空间配置GPIO点,设备树配置内核Leds驱动点,自己写驱动点。

用的板子是树莓派3B,GPIO 26口,蓝光LED,串联了一个1000欧电阻限流。LED长脚是正极,电阻要串在正极上。

1 Python点

先用Python试了下,很简单就亮了。

代码如下:

import RPi.GPIO as GPIO
import time# 设置 GPIO 引脚编号模式 (BCM 模式)
GPIO.setmode(GPIO.BCM)# 设置 GPIO 26 为输出引脚
led_pin = 26
GPIO.setup(led_pin, GPIO.OUT)# LED 闪烁的循环
try:while True:GPIO.output(led_pin, GPIO.HIGH)  # 点亮 LEDtime.sleep(1)                    # 延迟 1 秒GPIO.output(led_pin, GPIO.LOW)   # 熄灭 LEDtime.sleep(1)                    # 延迟 1 秒
except KeyboardInterrupt:pass
finally:GPIO.cleanup()  # 清理 GPIO 状态

当然,今天的关键不是PY。而且内核。

==================================================

2 用命令点

换第二种方法,经常看别人驱动大神的方法。先看了GPT,给的答案如下:

# 导出GPIO26
echo 26 | sudo tee /sys/class/gpio/export# 设置为输出
echo out | sudo tee /sys/class/gpio/gpio26/direction# 打开LED
echo 1 | sudo tee /sys/class/gpio/gpio26/value# 关闭LED
echo 0 | sudo tee /sys/class/gpio/gpio26/value

但是实际上这样不行,一直报write error: Invalid argument,真的要郁闷了。后面到处找,才在一篇文章中找到答案。解决 sh:write error:Invalid argument_sh: write error: invalid argument-CSDN博客

说是GPIO号不匹配,在本机查了,如下:

pi@raspberrypi:/sys/class/gpio$ cat /sys/kernel/debug/gpio
gpiochip0: GPIOs 512-565, parent: platform/3f200000.gpio, pinctrl-bcm2835:gpio-512 (ID_SDA              )gpio-513 (ID_SCL              )gpio-514 (GPIO2               )gpio-515 (GPIO3               )gpio-516 (GPIO4               )gpio-517 (GPIO5               )gpio-518 (GPIO6               )gpio-519 (GPIO7               |spi0 CS1            ) out hi ACTIVE LOWgpio-520 (GPIO8               |spi0 CS0            ) out hi ACTIVE LOWgpio-521 (GPIO9               )gpio-522 (GPIO10              )gpio-523 (GPIO11              )gpio-524 (GPIO12              )gpio-525 (GPIO13              )gpio-526 (GPIO14              )gpio-527 (GPIO15              )gpio-528 (GPIO16              )gpio-529 (GPIO17              )gpio-530 (GPIO18              )gpio-531 (GPIO19              )gpio-532 (GPIO20              )gpio-533 (GPIO21              )gpio-534 (GPIO22              )gpio-535 (GPIO23              )gpio-536 (GPIO24              )gpio-537 (GPIO25              )gpio-538 (GPIO26              )gpio-539 (GPIO27              )gpio-540 (NC                  )gpio-541 (LAN_RUN_BOOT        )gpio-542 (CTS0                )gpio-543 (RTS0                )gpio-544 (TXD0                )gpio-545 (RXD0                )gpio-546 (SD1_CLK             )gpio-547 (SD1_CMD             )gpio-548 (SD1_DATA0           )gpio-549 (SD1_DATA1           )gpio-550 (SD1_DATA2           )gpio-551 (SD1_DATA3           )gpio-552 (PWM0_OUT            )gpio-553 (PWM1_OUT            )gpio-554 (ETH_CLK             )gpio-555 (WIFI_CLK            )gpio-556 (SDA0                )gpio-557 (SCL0                )gpio-558 (SMPS_SCL            )gpio-559 (SMPS_SDA            )gpio-560 (SD_CLK_R            )gpio-561 (SD_CMD_R            )gpio-562 (SD_DATA0_R          )gpio-563 (SD_DATA1_R          )gpio-564 (SD_DATA2_R          )gpio-565 (SD_DATA3_R          )gpiochip1: GPIOs 566-567, parent: platform/soc:firmware:virtgpio, brcmvirt-gpio, can sleep:gpio-566 (                    |ACT                 ) out higpiochip2: GPIOs 568-575, parent: platform/soc:firmware:expgpio, raspberrypi-exp-gpio, can sleep:

原来GPIO26对应的是gpio-538,换成538之后,可以顺利通过命令行点灯了。

# 导出GPIO26
echo 538 | sudo tee /sys/class/gpio/export# 设置为输出
echo out | sudo tee /sys/class/gpio/gpio538/direction# 打开LED
echo 1 | sudo tee /sys/class/gpio/gpio538/value# 关闭LED
echo 0 | sudo tee /sys/class/gpio/gpio538/value

关于GPIO编号不同的问题,查了一下,在树莓派上,GPIO引脚通常有两种编号方式:物理引脚编号和BCM(Broadcom)引脚编号。一般来说高层次编程(如Python的RPi.GPIO库):通常使用BCM引脚编号或物理引脚编号。在这种情况下,你会使用26(BCM编号)或物理引脚编号。低层次编程(如直接操作设备树或内核配置):可能会使用内部编号(如538)。

=================================================

3 修改设备树点

最后还是打算用DTS来点,主要还是对环境不很熟悉,所以折腾了很久。最开始还是去看GPT。给的答案大体是对的,但是驱动死活加载不起来,也不知道怎么调试。

test_led.dts GPT版

/dts-v1/;
/plugin/;/ {compatible = "brcm,bcm2835";fragment@0 {target = <&gpio>;__overlay__ {led_gpio26 {compatible = "gpio-leds";gpios = <&gpio 26 0>; // GPIO26, active highdefault-state = "off";label = "my_led";};};};
};

回头看看这个设备树,有几个问题,1是设备,(TODO)

后面发现树莓派其实开发效率还是不错,因为设备树的编译工具可以直接在设备上装,这样就可以直接在设备上修改,不用来回拷贝。改完之后直接在板子上编译设备树,然后做成自启动。

sudo dtc -I dts test_led.dts -o test_led.dtbosudo cp test_led.dtbo /boot/overlays/
sudo nano /boot/firmware/config.txt
在后面增加
dtoverlay=test_led

这样其实也算略麻烦了,因为拷贝之后还要重启设备才能看到结果。更快速的是编译完直接用dtoverlay加载,就可以立马看到设备树是否能加载,开发效率直接拉满。但是这个时候就算加载成功,GPIO口还是没有输出。也就是说只能验证设备树的写法是不是对了,后面还是要自启动来验证。

sudo dtc -I dts test_led.dts -o test_led.dtbo
sudo dtoverlay test_led.dtbo
sudo dtoverlay -l
ls /proc/device-tree

弄清楚怎么把设备树搞上去之后,就到处找怎么配置设备树,翻了好久,没多少靠谱的。最后还是在树莓派官方论坛找到的:https://forums.raspberrypi.com/viewtopic.php?t=346863&hilit=led

 test_led.dts(可用版)

/dts-v1/;
/plugin/;/ {compatible = "brcm,bcm2837";fragment@0 {target = <&leds>;__overlay__ {my_led: myled {label = "pwrbtnled";gpios = <&gpio 26 0>;linux,default-trigger = "heartbeat";};};};
};

照着贴文上的设备树,用了这个确实就可以了(要在启动的时候加载,动态加载可以加载但是不生效)。

对于这部分实现的分析,可以参考这篇:树莓派3B点灯(2)-CSDN博客

4 自建驱动点

TODO

最后,致敬一下伟大的蓝光LED。

蓝色发光二极管,即蓝光LED,是能发出蓝光的发光二极管,其发明获誉为“爱迪生之后的第二次照明革命”。蓝光LED的发明,使得人类凑齐能发出三原色光的LED,得以用LED凑出足够亮的白光。白光LED灯的发明,大幅提高了人类的照明效率。

2014年,日本名古屋大学和名城大学教授赤崎勇、名古屋大学教授天野浩和美国加利福尼亚大学教授中村修二因“发明高亮度蓝色发光二极管,带来了节能明亮的白色光源”共同获得当年的诺贝尔物理学奖。

相关文章:

树莓派3B点灯(1)-- 四种方法

先做个简单一丢丢的吧。。。正好最近工作也要用这个。这次直接给够四种方法&#xff0c;给好给满。分别是Python点&#xff0c;用户空间配置GPIO点&#xff0c;设备树配置内核Leds驱动点&#xff0c;自己写驱动点。 用的板子是树莓派3B&#xff0c;GPIO 26口&#xff0c;蓝光L…...

Android解析XML格式数据

文章目录 Android解析XML格式数据搭建Web服务器Pull解析方式SAX解析方式 Android解析XML格式数据 通常情况下&#xff0c;每个需要访问网络的应用程序都会有一个自己的服务器&#xff0c;我们可以向服务器提交数据&#xff0c;也可以从服务器上获取数据。不过这个时候就出现了…...

数学建模笔记—— 灰色关联分析[GRA]

数学建模笔记—— 灰色关联分析[GRA] 灰色关联分析(GRA)1. 相关概念1.1 灰色系统1.2 什么是关联分析&#xff1f;1.3 灰色关联分析 2. 关联分析步骤3. 典型例题3.1 关联分析例题3.2 灰色关联综合评价 4. python代码实现4.1 关联分析4.2 灰色关联综合评价 灰色关联分析(GRA) 1.…...

ICM20948 DMP代码详解(13)

接前一篇文章&#xff1a;ICM20948 DMP代码详解&#xff08;12&#xff09; 上一回完成了对inv_icm20948_set_chip_to_body_axis_quaternion函数第2步即inv_rotation_to_quaternion函数的解析。回到inv_icm20948_set_chip_to_body_axis_quaternion中来&#xff0c;继续往下进行…...

【论软件需求获取方法及其应用】

摘要 2023 年 3 月&#xff0c;我所在的公司承接了某油企智慧加油站平台的建设工作。该项目旨在帮助加油站提升运营效率、降低运营成本和提高销售额。我在该项目中担任系统架构设计师&#xff0c;负责整个项目的架构设计工作。 本文以该项目为例&#xff0c;详细论述软件需求获…...

使用ESP8266和OLED屏幕实现一个小型电脑性能监控

前言 最近大扫除&#xff0c;发现自己还有几个ESP8266MCU和一个0.96寸的oled小屏幕。又想起最近一直想要买一个屏幕作为性能监控&#xff0c;随机开始自己diy。 硬件&#xff1a; ESP8266 MUColed小屏幕杜邦线可以传输数据的数据线 环境 Windows系统Qt6Arduino Arduino 库…...

Nexpose v6.6.266 for Linux Windows - 漏洞扫描

Nexpose v6.6.266 for Linux & Windows - 漏洞扫描 Rapid7 Vulnerability Management, release Aug 21, 2024 请访问原文链接&#xff1a;https://sysin.org/blog/nexpose-6/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.o…...

ess6新特性

1、let、const 块级作用域声明变量和常量 2、箭头函数 不能构建函数 不能new 没.prototype属性 没有this指向 this指向是根据上下文的 往上层查找 没有arguments(参数) 3、模板字符串 ${} 字符串中嵌入表达式 4、解构赋值 5、Promise 处理异步操作的标准机制 6、for of 遍历…...

C语言蓝桥杯:语言基础

竞赛常用库函数 最值查询 min_element和max_element在vector(迭代器的使用) nth_element函数的使用 例题lanqiao OJ 497成绩分析 第一种用min_element和max_element函数的写法 第二种用min和max的写法 二分查找 二分查找只能对数组操作 binary_search函数&#xff0c;用于查找…...

axure之变量

一、设置我们的第一个变量 1、点击axure上方设置一个全局变量a 3 2、加入按钮、文本框元件点击按钮文档框展示变量值。 交互选择【单击时】【设置文本】再点击函数。 点击插入变量和函数直接选择刚刚定义的全局变量&#xff0c;也可以直接手动写入函数(注意写入格式。) 这…...

vue缓存用法

Store 临时缓存 特点&#xff1a;需要定义&#xff0c;有初始值、响应式、全局使用、刷新重置 Pinia官方文档 https://pinia.vuejs.org 创建 store 缓存 示例代码 import {defineStore} from pinia import {store} from //storeexport const useMyStore defineStore({// 定义…...

栈入门,括号匹配问题

利用栈这道题应该很轻松可以解决&#xff0c;下面给出常用的代码&#xff1a; public static boolean isValid(String s) {// 创建一个栈来保存左括号Stack<Character> stack new Stack<>();// 遍历字符串中的每个字符for (char c : s.toCharArray()) {// 如果是…...

Vue入门学习笔记-表单

可以使用v-model 指令在表单控件元素上创建双向数据绑定。 引言&#xff1a; Vue采用了MVVM&#xff08;Model-View-ViewModel&#xff09;架构模式&#xff0c;通过指令可以快速实现数据和视图的双向绑定 修改视图层时&#xff0c;模型层也会改变&#xff1b;修改模型层&#…...

TCP通信三次握手、四次挥手

目录 前言 一、三次握手 TCP三次握手的详细过程 二、四次挥手 四次挥手的详细过程 前言 前面我说到了&#xff0c;UDP通信的实现&#xff0c;但我们经常说UDP通信不可靠&#xff0c;是因为他只会接收和发送&#xff0c;并不会去验证对方收到没有&#xff0c;那么我们说TCP通…...

【实施文档】软件项目实施方案(Doc原件2024实际项目)

软件实施方案 二、 项目介绍 三、 项目实施 四、 项目实施计划 五、 人员培训 六、 项目验收 七、 售后服务 八、 项目保障措施软件开发管理全套资料包清单&#xff1a; 工作安排任务书&#xff0c;可行性分析报告&#xff0c;立项申请审批表&#xff0c;产品需求规格说明书&am…...

BeanFactory vs. ApplicationContext

在Spring框架中&#xff0c;BeanFactory和ApplicationContext都是用于管理Spring容器中的bean的接口&#xff0c;但它们在功能和应用场景上有所不同。下面是它们的主要区别&#xff1a; 1. 基础功能 vs. 扩展功能 BeanFactory: 是Spring框架的最基础的IoC容器&#xff0c;提供…...

JDBC客户端连接Starrocks 2.5

<?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 http://ma…...

004——双向链表和循环链表

目录 双向链表 双向链表的初始化&#xff08;与单链表类似&#xff09; 增&#xff1a; Ⅰ&#xff09;头插法 Ⅱ&#xff09;尾插法 Ⅲ&#xff09;中间插入 删 改 查 整体代码示例&#xff1a; 循环链表 循环单链表 ​编辑 循环双链表 双向链表 不同于单链表&…...

framebuffer帧缓存

framebuffer:帧缓冲&#xff0c;帧缓存 Linux内核为显示提供的一套应用程序接口。&#xff08;驱动内核支持&#xff09; framebuffer本质上是一块显示缓存&#xff0c;往显示缓存中写入特定格式的数据就意味着向屏幕输出内容。framebuffer驱动程序控制LCD显示设备&#xff0…...

24_竞赛中的高效并查集

菜鸟&#xff1a;老鸟&#xff0c;我最近在做一个与社交网络相关的项目&#xff0c;需要频繁地检查两个用户是否属于同一个群组。但我发现每次检查都很耗时&#xff0c;性能很差。你有什么建议吗&#xff1f; 老鸟&#xff1a;你可以试试使用并查集&#xff08;Union-Find&…...

国防科技大学计算机基础课程笔记02信息编码

1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制&#xff0c;因此这个了16进制的数据既可以翻译成为这个机器码&#xff0c;也可以翻译成为这个国标码&#xff0c;所以这个时候很容易会出现这个歧义的情况&#xff1b; 因此&#xff0c;我们的这个国…...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)

0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述&#xff0c;后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作&#xff0c;其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...

土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等

&#x1f50d; 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术&#xff0c;可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势&#xff0c;还能有效评价重大生态工程…...

UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)

UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中&#xff0c;UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化&#xf…...

(转)什么是DockerCompose?它有什么作用?

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

音视频——I2S 协议详解

I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议&#xff0c;专门用于在数字音频设备之间传输数字音频数据。它由飞利浦&#xff08;Philips&#xff09;公司开发&#xff0c;以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...

RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill

视觉语言模型&#xff08;Vision-Language Models, VLMs&#xff09;&#xff0c;为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展&#xff0c;机器人仍难以胜任复杂的长时程任务&#xff08;如家具装配&#xff09;&#xff0c;主要受限于人…...

搭建DNS域名解析服务器(正向解析资源文件)

正向解析资源文件 1&#xff09;准备工作 服务端及客户端都关闭安全软件 [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0 2&#xff09;服务端安装软件&#xff1a;bind 1.配置yum源 [rootlocalhost ~]# cat /etc/yum.repos.d/base.repo [Base…...

腾讯云V3签名

想要接入腾讯云的Api&#xff0c;必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口&#xff0c;但总是卡在签名这一步&#xff0c;最后放弃选择SDK&#xff0c;这次终于自己代码实现。 可能腾讯云翻新了接口文档&#xff0c;现在阅读起来&#xff0c;清晰了很多&…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现企业微信功能

1. 开发环境准备 ​​安装DevEco Studio 3.1​​&#xff1a; 从华为开发者官网下载最新版DevEco Studio安装HarmonyOS 5.0 SDK ​​项目配置​​&#xff1a; // module.json5 {"module": {"requestPermissions": [{"name": "ohos.permis…...