作為一個硬件愛好者、嵌入式系統(tǒng)工程師、技術(shù)宅,樹莓派肯定是要玩一玩的,但是用的時間長了總會發(fā)現(xiàn)它有一些不完美的地方,比如:沒有電源鍵!
常用的關(guān)機(jī)方法有兩種(外接屏幕和鍵盤的就不說了):
1、遠(yuǎn)程登錄然后敲命令(這是最合適的關(guān)機(jī)方法,但是太麻煩,如果沒有電腦在身邊就沒法關(guān)機(jī)了)
2、拔電源(簡單粗暴,但很容易導(dǎo)致文件損壞)
所以為了愉快的使用樹莓派,最好還是給它添加一個像電腦一樣的電源鍵,百度了一大圈發(fā)現(xiàn)國內(nèi)(沒錯,我就是針對國內(nèi),來來回回就那么幾篇文章,還反反復(fù)復(fù)互相抄)只有一種添加電源鍵的方法,那就是寫個python腳本、或者其他腳本、或者編譯一個程序,反正原理都是一樣的,讓這個腳本(或程序)開機(jī)啟動,程序中一直檢測設(shè)置為電源鍵的GPIO,如果被觸發(fā)則關(guān)機(jī)。這個方法雖然能解決問題,但真的low爆了?。?!而且只能關(guān)機(jī),不能開機(jī)。
在這里跟大家分享一個非常優(yōu)雅,能關(guān)機(jī)也能開機(jī)的方法:
其實 /boot/overlays/README 里面已經(jīng)說的很詳細(xì)了,為了造福廣大人民群眾,我就整理一下。
不少人看見英文就頭疼,而且這個文件有上千行,很少有人會仔細(xì)閱讀,這里我就只把電源相關(guān)的內(nèi)容摘錄出來(不同版本系統(tǒng)文件的內(nèi)容略有不同):
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. |
這里已經(jīng)說得很明白了,只要在 /boot/config.txt 中添加相關(guān)配置就能實現(xiàn)關(guān)機(jī)。
比如像這樣:
1 2 |
# 使用GPIO3(這里的GPIO指3BCM GPIO編號,也就是SCL1)作為電源鍵,下降沿為按下,上升沿為彈起,內(nèi)部上拉 dtoverlay=gpio-shutdown |
保存并重啟,之后你只需要在GPIO3和GND之間接個按鍵就能實現(xiàn)關(guān)機(jī),是不是很簡單?
開始劃重點??!考試要考的??!記住了??!
不需要添加任何配置,正常關(guān)機(jī)后不切斷樹莓派電源,將GPIO3拉到低電平就能開機(jī)!沒錯,這樣就實現(xiàn)了開機(jī)鍵!如果不需要GPIO3做開機(jī)鍵,請自行閱讀 /boot/overlays/README 中 gpio-poweroff 相關(guān)內(nèi)容
前面提到的配置默認(rèn)使用GPIO3,也就是SCL1作為電源鍵,占用了I2C接口,雖然可以用其他GPIO軟件模擬I2C,但顯然很不方便,最好如下改成其他GPIO,注意這樣改了以后這個GPIO口只能做關(guān)機(jī)鍵使用,開機(jī)鍵還是GPIO3,目前我沒有找到自定義其他開機(jī)鍵的方法。
1 2 |
# 使用gpio_pin=17,即GPIO_0(物理引腳PIN_11)做關(guān)機(jī)鍵 dtoverlay=gpio-shutdown,gpio_pin=17,active_low=1,gpio_pull=up |
GPIO3與SCL1沖突,具體表現(xiàn)為,當(dāng)啟用I2C以后,GPIO3做SCL1使用,因此只能使用GPIO3開機(jī),不能關(guān)機(jī)。所以如果想只用一個按鍵作為開、關(guān)機(jī)鍵,必須放棄硬件I2C,用其他引腳軟件模擬I2C;如果一定要即有開、關(guān)機(jī)鍵又同時使用硬件I2C,那么就用GPIO3做開機(jī)鍵,另外配置一個按鍵做關(guān)機(jī)鍵。
以上內(nèi)容我只在樹莓派3B+(系統(tǒng)版本: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 中還有很多非常有用的配置,有興趣的同學(xué)自己去研究。
最后希望大家趕緊行動起來?。仐壞切?low 爆的開關(guān)機(jī)按鍵方案吧!
-
I2C
+關(guān)注
關(guān)注
28文章
1487瀏覽量
123771 -
GPIO
+關(guān)注
關(guān)注
16文章
1204瀏覽量
52104 -
樹莓派
+關(guān)注
關(guān)注
116文章
1707瀏覽量
105648
發(fā)布評論請先 登錄
相關(guān)推薦
評論