快捷搜索:  as  test

如何才能给树莓派添加开关机键

作为一个硬件喜欢者、嵌入式系统工程师、技巧宅,树莓派肯定是要玩一玩的,然则用的光阴长了总会发明它有一些不完美的地方,比如:没有电源键!

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

1、远程登录然后敲敕令(这是最相宜的关机措施,然则太麻烦,假如没有电脑在身边就没法关机了)

2、拔电源(简单粗暴,但很轻易导致文件毁坏)

所以为了开心的应用树莓派,最好照样给它添加一个像电脑一样的电源键,百度了一大年夜圈发明海内(没错,我便是针对海内,交往返回就那么几篇文章,还反反复复相互抄)只有一种添加电源键的措施,那便是写个python脚本、或者其他脚本、或者编译一个法度榜样,反正道理都是一样的,让这个脚本(或法度榜样)开机启动,法度榜样中不停检测设置为电源键的GPIO,假如被触发则关机。这个措施虽然能办理问题,但真的low爆了!!!而且只能关机,不能开机。

在这里跟大年夜家分享一个异常优雅,能关机也能开机的措施:

着实 /boot/overlays/README 里面已经说的很具体了,为了造福广大年夜人夷易近群众,我就收拾一下。

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

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,

=

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 中添加相关设置设置设备摆设摆设就能实现关机。

比如像这样:

1

2

# 应用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,今朝我没有找到自定义其他开机键的措施。

1

2

# 应用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 爆的开关机按键规划吧!

您可能还会对下面的文章感兴趣: