樹莓派 開關鍵 開關機按鍵 修改開關鍵 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 週期電平並檢測回波。...