給樹莓派新增乙個開 關機按鍵(原創)

2021-10-19 14:45:24 字數 4159 閱讀 3717

樹莓派 開關鍵 開關機按鍵 修改開關鍵 gpio17開關鍵

一直以來,樹莓派關機1)要麼直接拔掉電源,2)要麼登陸後執行shutdown命令關機。

這兩種方式:

第一種簡單粗暴,但是直接關機對樹莓派的sd傷害非常大,搞幾次之後就會損壞sd卡。

第二種方式比較安全,但是很麻煩,如果樹莓派沒有接到顯示器上時,需要ssh登陸樹莓派,再執行關機命令。

今天我們給樹莓派新增乙個硬體的開關機按鍵,使樹莓派開機、關機變得非常簡單。

給樹莓派新增開關機按鍵有兩種方式。

第一種是在樹莓派的gpio口上接乙個按鍵,然後在樹莓派上寫乙個程式,這個程式不斷的檢測按鍵有沒有按下,如果按鍵按下,則執行「sudo shutdown -h now」。 這種方式容易理解,但相比等會要講的第二種方式來說,稍顯麻煩。

第二種方式更為簡單優雅,只需要新增一行**即可實現。在/boot/config.txt 檔案末尾新增這樣一行**:

dtoverlay=gpio-shutdown
儲存,然後重啟樹莓派,在樹莓派的gpio3(bcm3)和gnd引腳之間接乙個按鍵。這時按下按鍵樹莓派就關機了,再按一下按鍵,樹莓派開機。是不是非常的方便,樹莓派引腳圖如下。

在樹莓派的/boot/overlays/檔案下,包含了大量的裝置樹,使得樹莓派的核心支援大量的硬體配置,前提是你要開啟才行。 開啟的方式也比較簡單,只需要在/boot/config.txt檔案中新增或者刪除相應的命令即可。樹莓派的/boot/config.txt檔案相當於電腦的bios。 這裡只看/boot/overlays/readme中和本文開關鍵相關的內容,完整的內容可以在以下兩個頁面中檢視。

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

=="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 (

default3)

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.

即新增**後,樹莓派的gpio3會不斷的檢測電平狀態,如果檢測到gpio3變為低電平(gpio3連線到gnd時),樹莓派就會關機,關機後再次將gpio3變為低電平,則樹莓派會開機。 這樣在樹莓派的gpio3和gpnd之間連線乙個按鍵,就能夠實現樹莓派的開關機功能。 還可以按照以下格式進行自定義配置:

dtoverlay=gpio-shutdown,

=

其中的 parm 和 val 的值可以選擇的配置有:

gpio_pin                開啟觸發功能的gpio引腳(預設3)

active_low 當它為1(低電平有效)時,下降邊緣生成按下事

件,並且上公升沿會產生按鍵上公升事件。

當它是0(高電平有效)時,

這時和1的狀態相反。預設值為1(低電平有效)。

gpio_pull 所需的上拉/下拉狀態(關閉,下拉,上拉)

預設為「上拉」。

請注意,預設引腳(gpio3)具有乙個

外部上拉。

大功告成!

如果你使用的和預設配置的一樣是gpio3引腳,那麼確實大功告成了,我們可以看到gpio3引腳也可以復用於i2c的scl功能,如果你不需要使用到硬體i2c,那麼你可以就此收工了。但如果你需要使用硬體i2c,需要使用其他引腳代替開關鍵,例如使用gpio17引腳,相信你會修改為如下:

# 使用gpio17(即序號為11的)做關機鍵

dtoverlay=gpio-shutdown,gpio_pin=

17,active_low=

1,gpio_pull=up

但是通過測試你會發現,只能通過gpio17實現關機,卻無法通過gpio17開機,但是你還是可以通過gpio3開機…啊,為什麼會這樣子…。

那麼有沒有兩全其美的方法呢:我的gpio3需要用作硬體i2c,就想通過gpio17來開、關機呢?

答案必須要有:

使用兩個按鍵,沒毛病,但總是不夠完美

新增部分電路,但需要有點動手能力,像我這追求完美的人,必須不能容忍使用兩個按鍵 或者 gpio17只能關機不能開機的問題,下面就來慢慢講解。

此方案還是基於gpio17用於關機鍵,使用gpio3作為開機鍵,但只需要乙個開關按鍵。

大概原理圖:

當按鍵按下時,標記2(即gpio17)變為低電平,實現關機功能;

當再次按下按鍵,標記2(即gpio17)變為低電平,左邊三極體導通致使右邊三極體導通,使標記1(即gpio3)變為低電平,實現開機功能。

正常時候,按鍵未按下時,不影響gpio3的使用,還可正常作為i2c功能或者其它功能使用。

配合以下配置,實測ok,開關機功能正常,且硬體i2c功能正常使用。

# 使用gpio17(即序號為11的)做關機鍵

dtoverlay=gpio-shutdown,gpio_pin=

17,active_low=

1,gpio_pull=up

下面的實際測試的**,上面的按鍵pcb原來走的就是gpio17:

樹莓派 製作乙個觸控開關控制燈

2019 2 21 通過乙個簡單的觸控開關控制燈的製作,學習樹莓派中用python寫控制指令碼控制io口 樹莓派3b io口展板 bcm 觸控感測器 led燈 觸控感測器 拓展板led sigg18 vcc5v gndgnd負極 g20正極 表示沒有連線關係 import rpi.gpio as g...

樹莓派 樹莓派使用入門 如何購買乙個樹莓派

在我們的 樹莓派使用入門 系列文章的第二篇中,我們將介紹獲取樹莓派的最佳途徑。anderson silva 在本系列指南的第一篇文章中,我們提供了乙個關於 你應該購買哪個版本的樹莓派 的一些建議。哪個版本才是你想要的,你應該有了主意了,現在,我們來看一下如何獲得它。第二,檢視亞馬遜或在你的國家裡允許...

乙個菜鳥初學樹莓派 2

首先來介紹所用的超聲波測距模組。我們所用的是hc sr04超聲波測距模組,其上端一共有四個引腳 vcc引腳接5v電源,gnd引腳接地,trig引腳觸發控制訊號輸入,echo引腳為迴響訊號輸出 其工作時,若提供乙個 10us 以上脈衝觸發訊號,該模組內部將發出 8 個 40khz 週期電平並檢測回波。...