これはGPIOでの初めての経験なので、ロジックを理解することが重要でした。 ほとんどすべてのGPIOピン(いくつか予約済み)は、「出力」(別名OUTまたは論理1)または「入力」(INまたは論理0)のいずれかの状態に設定できます。 出力電圧は3.3Vです。 端末から直接、および任意のプログラミング言語の両方でGPIOポートを操作できます。 これについては、 ここで詳しく説明します 。
ボタンには、一番上の行の右端の2つのピンを使用することにしました。 コネクタ#38(GPIO20)は「出力」に設定され、コネクタ#40(GPIO21)は「入力」に設定されます。 さらに、1秒間に1回繰り返されるサイクルはコネクタ#40を「リッスン」し、信号が到着するとすぐに、使用されているポートが「クリーン」になり、コンソールコマンドが起動してシャットダウンします。 上記のように、チームは他のものでも構いません。 興味のために、私はこのタスクをPythonとbashスクリプトの2つの方法で達成しました。 以下は両方のオプションのコードです。
shutdown.py
import RPi.GPIO as GPIO from time import sleep import os GPIO.setmode(GPIO.BOARD) GPIO.setwarnings(False) # Turn off warnings output GPIO.setup(38, GPIO.OUT) # Set pin #38 (GPIO20) to output GPIO.setup(40, GPIO.IN) # Set pin #40 (GPIO21) to input while True: buttonIn = GPIO.input(40) if buttonIn == True: print 'System shuts down' GPIO.cleanup() os.system("sudo shutdown -h now") break sleep(1)
shutdown.sh
#! /bin/bash # Set up GPIO20 and set to output echo "20" > /sys/class/gpio/export echo "out" > /sys/class/gpio/gpio20/direction echo "1" > /sys/class/gpio/gpio20/value # Set up GPIO21 and set to input echo "21" > /sys/class/gpio/export echo "in" > /sys/class/gpio/gpio21/direction while ( true ) do # check if the pin is connected to GND and, if so, halt the system if [ $(</sys/class/gpio/gpio21/value) == 1 ] then echo "20" > /sys/class/gpio/unexport echo "21" > /sys/class/gpio/unexport shutdown -h now "System halted by a GPIO action" fi sleep 1 done
繰り返しますが、両方のスクリプトは同じことをします。ボタンが機能するには、いずれか(いずれか)が必要です。 それらはダウンロードすることもできます:
Pythonスクリプトの場合、注意点が1つあります。RPi.GPIOクラスが機能するために必要です。RPi.GPIOクラスは個別にダウンロードしてインストールする必要があります。 これは次のように行われます。
wget http://pypi.python.org/packages/source/R/RPi.GPIO/RPi.GPIO-0.5.11.tar.gz tar zxf RPi.GPIO-0.5.11.tar.gz cd RPi.GPIO-0.5.11 sudo python setup.py install
実際、最後にやらなければならないことは、自動ロードするスクリプトを追加することです。 これを行う方法はいくつかありますが、 cronを選択しました。 これを行うには、 sudo crontab -eコマンドを実行し、開くファイルに次のいずれかの行を追加します。
@reboot python /home/pi/lentyay/poweroff.py & @reboot sudo /home/pi/lentyay/shutdown.sh &
それだけです 私からは、このようなボタンを使用することは非常に便利だと思います。