给树莓派添加开关机键

news/2024/6/3 19:18:26 标签: 树莓派, 开关机, 按键

树莓派添加开、关机键

声明

本文由u013062709原创,禁止二次修改发布。转载及引用内容请注明出处,并标明本站网址。文中程序仅供学习使用,本人不承担任何由使用文中代码产生的法律责任。


作为一个硬件爱好者、嵌入式系统工程师、技术宅,树莓派肯定是要玩一玩的,但是用的时间长了总会发现它有一些不完美的地方,比如:没有电源键!

常用的关机方法有两种(外接屏幕和键盘的就不说了):

  • 远程登录然后敲命令(这是最合适的关机方法,但是太麻烦,如果没有电脑在身边就没法关机了)
  • 拔电源(简单粗暴,但很容易导致文件损坏)

所以为了愉快的使用树莓派,最好还是给它添加一个像电脑一样的电源键,百度了一大圈发现国内(没错,我就是针对国内,来来回回就那么几篇文章,还反反复复互相抄)只有一种添加电源键的方法,那就是写个python脚本、或者其他脚本、或者编译一个程序,反正原理都是一样的,让这个脚本(或程序)开机启动,程序中一直检测设置为电源键的GPIO,如果被触发则关机。这个方法虽然能解决问题,但真的low爆了!!!而且只能关机,不能开机。

在这里跟大家分享一个非常优雅,能关机也能开机的方法:
打开并仔细阅读 /boot/overlays/README
好了今天的分享到此结束,谢谢大家。


其实 /boot/overlays/README 里面已经说的很详细了,为了造福广大人民群众,我就整理一下。

不少人看见英文就头疼,而且这个文件有上千行,很少有人会仔细阅读,这里我就只把电源相关的内容摘录出来(不同版本系统文件的内容略有不同):

Name:   gpio-shutdown
Info:   Initiates a shutdown when GPIO pin changes. The given GPIO pin
        is configured as an input key that generates KEY_POWER events.
        This event is handled by systemd-logind by initiating a
        shutdown. Systemd versions older than 225 need an udev rule
        enable listening to the input device:

                ACTION!="REMOVE", SUBSYSTEM=="input", KERNEL=="event*", \
                        SUBSYSTEMS=="platform", DRIVERS=="gpio-keys", \
                        ATTRS{keys}=="116", TAG+="power-switch"

        This overlay only handles shutdown. After shutdown, the system
        can be powered up again by driving GPIO3 low. The default
        configuration uses GPIO3 with a pullup, so if you connect a
        button between GPIO3 and GND (pin 5 and 6 on the 40-pin header),
        you get a shutdown and power-up button.
Load:   dtoverlay=gpio-shutdown,<param>=<val>
Params: gpio_pin                GPIO pin to trigger on (default 3)

        active_low              When this is 1 (active low), a falling
                                edge generates a key down event and a
                                rising edge generates a key up event.
                                When this is 0 (active high), this is
                                reversed. The default is 1 (active low).

        gpio_pull               Desired pull-up/down state (off, down, up)
                                Default is "up".

                                Note that the default pin (GPIO3) has an
                                external pullup.

这里已经说得很明白了,只要在 /boot/config.txt 中添加相关配置就能实现关机。

比如像这样:

# 使用GPIO3(这里的GPIO指3BCM GPIO编号,也就是SCL1)作为电源键,下降沿为按下,上升沿为弹起,内部上拉
dtoverlay=gpio-shutdown

保存并重启,之后你只需要在GPIO3和GND之间接个按键就能实现关机,是不是很简单?

开始划重点!!考试要考的!!记住了!!

  • 不需要添加任何配置,正常关机后不切断树莓派电源,将GPIO3拉到低电平就能开机!没错,这样就实现了开机键!如果不需要GPIO3做开机键,请自行阅读 /boot/overlays/README 中 gpio-poweroff 相关内容
  • 前面提到的配置默认使用GPIO3,也就是SCL1作为电源键,占用了I2C接口,虽然可以用其他GPIO软件模拟I2C,但显然很不放方便,最好如下改成其他GPIO,注意这样改了以后这个GPIO口只能做关机键使用,开机键还是GPIO3,目前我没有找到自定义其他开机键的方法。
# 使用gpio_pin=17,即GPIO_0(物理引脚PIN_11)做关机键
dtoverlay=gpio-shutdown,gpio_pin=17,active_low=1,gpio_pull=up
  • GPIO3与SCL1冲突,具体表现为,当启用I2C以后,GPIO3做SCL1使用,因此只能使用GPIO3开机,不能关机。所以如果想只用一个按键作为开、关机键,必须放弃硬件I2C,用其他引脚软件模拟I2C;如果一定要即有开、关机键又同时使用硬件I2C,那么就用GPIO3做开机键,另外配置一个按键做关机键。
  • 以上内容我只在树莓派3B+(系统版本:Raspbian Buster with desktop, Image with desktop based on Debian Buster, Version:July 2019, Release date:2019-07-10, Kernel version:4.19)上做过验证,其他版本不保证可用

/boot/overlays/README 中还有很多非常有用的配置,有兴趣的同学自己去研究。

最后希望大家赶紧行动起来!!抛弃那些low爆的开关机按键方案吧!


http://www.niftyadmin.cn/n/1244609.html

相关文章

keil Software pack离线下载方法

keil Software pack离线下载方法 以前 pack 不能在线安装、或者使用Pack Installer在线安装速度太慢可以访问 https://www.keil.com/dd2/pack/ 找到自己需要的安装包&#xff0c;离线下载再安装。 不知为什么最近&#xff08;大概是2020年以后&#xff09;这个网页变成这个样…

faac的使用与内存优化

版本 初次发布文章时的版本为faac-1.29.9.2 本文所提及的优化方法已经在gitee创建相应工程&#xff0c;此工程中使用的版本为faac-1.30&#xff0c;链接如下 gitee.com/dma/faac-memory-optimization 使用方法 详细使用方法参见例程 frontend\main.c 简易demo如下 // 常用…

在windows中使用tortoise git提交的脚本、makefile等在linux下没有可执行权限的解决办法

跨平台开发肯定会遇到的情形&#xff1a; 在windows中使用tortoise git提交的脚本、makefile等在linux下没有可执行权限 解决方法&#xff0c;一图胜千言 命令行解决办法&#xff0c;共两种&#xff0c;看实际情况任选一&#xff1a; 添加 git update-index --chmodx path/…

手机串口终端

手机串口终端 做嵌入式开发的小伙伴永远离不开串口。想想一下&#xff0c;假设你需要进行现场调试&#xff0c;但是身边没有电脑&#xff0c;或者其他特殊环境不方便用电脑&#xff0c;或者就是单纯的懒得用电脑&#xff0c;该怎么办&#xff1f;这就是我碰到的场景&#xff0…

海思3516系列芯片SPI速率慢问题深入研究与优化(基于PL022 SPI 控制器)

海思3516系列芯片SPI速率慢问题深入分析与优化&#xff08;基于PL022 SPI 控制器&#xff09; 我在某个海思主控的项目中需要使用SPI接口来驱动一块液晶屏&#xff0c;液晶屏主控为 st7789&#xff0c;分辨率 240x240&#xff0c;图像格式 RGB565。 查阅海思相关手册可知&…

foreach的使用

import java.util.Random;public class Foreach {/*** param args*/public static void main(String[] args) {// TODO Auto-generated method stubRandom rand new Random(90);int[] f new int[10];System.out.println("for 访问数组");for(int i0;i<10;i){f[i…

单片机按键扫描实现短按_长按_重复_组合键功能详解

在单片机项目中&#xff0c;按键操作通常是产品与用户交互必不可少功能&#xff0c;按键又有短按、长按、重复、组合键等操作&#xff0c;本文介绍了一种按键扫描的实现方法&#xff0c;能够实现短按、长按、重复以为组合键的功能。 短按&#xff1a;即按下按键马上松开&#…

MP2451电路调试笔记

MP2451电路调试笔记 EN脚内部有一个8V的稳压管&#xff0c;因此电路中R5可不要&#xff0c;R2取124K接到VIN脚。C7取100nF &#xff0c;C8要根据不同输出电压选取&#xff0c;3.3V输出时取值33pFC7、C8取值不对&#xff0c;纹波会很大