本文來自 bxgj 的投稿,原發於 blog.csdn.net。
聲明
本文由 u013062709 原創,禁止二次修改發布。轉載及引用內容請注明出處,並標明本站網址。文中程序僅供學習使用,本人不承擔任何由使用文中代碼產生的法律責任。
作為一個硬件愛好者、嵌入式系統工程師、技術宅,樹莓派肯定是要玩一玩的,但是用的時間長了總會發現它有一些不完美的地方,比如:沒有電源鍵!
常用的關機方法有兩種(外接屏幕和鍵盤的就不說了):
1、遠程登錄然后敲命令(這是最合適的關機方法,但是太麻煩,如果沒有電腦在身邊就沒法關機了)
2、拔電源(簡單粗暴,但很容易導致文件損壞)
所以為了愉快的使用樹莓派,最好還是給它添加一個像電腦一樣的電源鍵,百度了一大圈發現國內(沒錯,我就是針對國內,來來回回就那么幾篇文章,還反反復復互相抄)只有一種添加電源鍵的方法,那就是寫個python腳本、或者其他腳本、或者編譯一個程序,反正原理都是一樣的,讓這個腳本(或程序)開機啟動,程序中一直檢測設置為電源鍵的GPIO,如果被觸發則關機。這個方法雖然能解決問題,但真的low爆了!!!而且只能關機,不能開機。
在這里跟大家分享一個非常優雅,能關機也能開機的方法:
打開並仔細閱讀 /boot/overlays/README
好了今天的分享到此結束,謝謝大家。
其實 /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,<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 中添加相關配置就能實現關機。
比如像這樣:
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 爆的開關機按鍵方案吧!
出處:https://shumeipai.nxez.com/2019/08/27/add-the-open-and-shutdown-keys-to-the-raspberry-pi.html