#!/usr/bin/env python
# coding=utf-8
import rpi.gpio as gpio
import time
import os,sys
import signal
#定義關機鍵和關機狀態指示燈的gpio引腳
gpio.setmode(gpio.bcm)
pin_btn =
23pin_led_reboot =
7pin_led_halt =
8#初始化saks上相應按鍵和led的狀態,按鍵內部上拉、led不亮
gpio.setup(pin_btn, gpio.in, pull_up_down = gpio.pud_up)
gpio.setup(pin_led_reboot, gpio.out, initial = gpio.high)
gpio.setup(pin_led_halt, gpio.out, initial = gpio.high)
#初始化按下關機鍵的次數
press_times =
0#按下關機鍵後等待並倒數10次
count_down =
10led_on_reboot =
0led_on_halt =
0def
onpress
(channel)
:global press_times, count_down
print
('pressed'
) press_times +=
1if press_times >3:
press_times =
1#重啟模式
if press_times ==1:
gpio.output(pin_led_reboot,0)
gpio.output(pin_led_halt,1)
print
('system will restart in %s'
%(count_down)
)#關機模式
elif press_times ==2:
gpio.output(pin_led_reboot,1)
gpio.output(pin_led_halt,0)
print
('system will halt in %s'
%(count_down)
)#模式取消
elif press_times ==3:
gpio.output(pin_led_reboot,1)
gpio.output(pin_led_halt,1)
print
'cancel'
count_down =
10#設定按鍵檢測,檢測到按下時呼叫 onpress 函式
gpio.add_event_detect(pin_btn, gpio.falling, callback = onpress, bouncetime =
500)
try:
while
true
:#重啟模式
if press_times ==1:
if count_down ==0:
print
"start restart"
os.system(
"shutdown -r -t 5 now"
) sys.exit(
) led_on_reboot =
not led_on_reboot
#黃色 led 閃爍
gpio.output(pin_led_reboot, led_on_reboot)
#關機模式
if press_times ==2:
if count_down ==0:
print
"start shutdown"
os.system(
"shutdown -t 5 now"
) sys.exit(
) led_on_halt =
not led_on_halt
#紅色 led 閃爍
gpio.output(pin_led_halt, led_on_halt)
if press_times ==
1or press_times ==2:
count_down -=
1print
"%s second"
%(count_down)
time.sleep(1)
except keyboardinterrupt:
print
('user press ctrl+c, exit;'
)finally
: gpio.cleanup(
)
開機自動執行指令碼 :
vim /etc/rc.local
python /home/pi/powerbutton.py &
樹莓派 按鍵程式
樹莓派3b wiringpi庫的使用 button按鈕操作 五 樹莓派3b wiringpi庫的使用 點亮led 如何編譯的教程 樹莓派學習筆記 wiringpi簡介 安裝和管腳說明 檢視樹莓派gpio引腳編號及定義 gpio readall輸出如下,說明wiringpi庫已經安裝成功。原來的官方鏈...
樹莓派的按鍵中斷
一 實驗現象 程式實現在樹莓派上通過中斷的方式檢測按鍵是否按下,如果按鍵按下的話,會列印出按鍵按下的提示資訊 二 操作步驟 1,初始化wiringpi庫 2,設定按鍵引腳為輸入模式 3,設定引腳為上拉模式 即 當按鍵沒有被按下時,該輸入腳為高電平 4,註冊中斷程式,並且設定中斷的觸發方式 5,判斷中...
樹莓派 單個按鍵檢測
先奉上原始碼 import rpi.gpio as gpio gpio.setwarnings false gpio.setmode gpio.bcm gpio.setup 17,gpio.in,pull up down gpio.pud up 接上輕觸開關,乙個腳接地 gpio.setup 18,...