聲明
本文由 u013062709 原創,轉載於 公衆號:趣無盡 微信號:quwjcompython
做爲一個硬件愛好者、嵌入式系統工程師、技術宅,樹莓派確定是要玩一玩的,可是用的時間長了總會發現它有一些不完美的地方,好比:沒有電源鍵!微信
經常使用的關機方法有兩種(外接屏幕和鍵盤的就不說了):
一、遠程登陸而後敲命令(這是最合適的關機方法,可是太麻煩,若是沒有電腦在身邊就無法關機了)
二、拔電源(簡單粗暴,但很容易致使文件損壞)this
因此爲了愉快的使用樹莓派,最好仍是給它添加一個像電腦同樣的電源鍵,百度了一大圈發現國內(沒錯,我就是針對國內,來來回回就那麼幾篇文章,還反反覆覆互相抄)只有一種添加電源鍵的方法,那就是寫個python腳本、或者其餘腳本、或者編譯一個程序,反正原理都是同樣的,讓這個腳本(或程序)開機啓動,程序中一直檢測設置爲電源鍵的GPIO,若是被觸發則關機。這個方法雖然能解決問題,但真的low爆了!!!並且只能關機,不能開機。code
在這裏跟你們分享一個很是優雅,能關機也能開機的方法:
打開並仔細閱讀 /boot/overlays/README
好了今天的分享到此結束,謝謝你們。orm
其實 /boot/overlays/README 裏面已經說的很詳細了,爲了造福廣大人民羣衆,我就整理一下。接口
很多人看見英文就頭疼,並且這個文件有上千行,不多有人會仔細閱讀,這裏我就只把電源相關的內容摘錄出來(不一樣版本系統文件的內容略有不一樣):get
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 中添加相關配置就能實現關機。input
好比像這樣:it
# 使用GPIO3(這裏的GPIO指3BCM GPIO編號,也就是SCL1)做爲電源鍵,降低沿爲按下,上升沿爲彈起,內部上拉
dtoverlay=gpio-shutdown
保存並重啓,以後你只須要在GPIO3和GND之間接個按鍵就能實現關機,是否是很簡單?io
開始劃重點!!考試要考的!!記住了!!
不須要添加任何配置,正常關機後不切斷樹莓派電源,將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 爆的開關機按鍵方案吧!