作為一個硬件愛好者、嵌入式系統工程師、技術宅,樹莓派肯定是要玩一玩的,但是用的時間長了總會發現它有一些不完美的地方,比如:沒有電源鍵!
常用的關機方法有兩種(外接屏幕和鍵盤的就不說了):
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 爆的開關機按鍵方案吧!
-
I2C
+關注
關注
28文章
1490瀏覽量
124032 -
GPIO
+關注
關注
16文章
1213瀏覽量
52184 -
樹莓派
+關注
關注
117文章
1710瀏覽量
105725
發布評論請先 登錄
相關推薦
評論