#topicpath
----

#contents


**やってみる [#ud5d7729]

***物理的な接続 [#a2ae1876]

#ref(shutdown.png)

物理的には上記のように、GPI25 -> タストスイッチ  → GND って感じで繋ぎます。タクトスイッチに関してはツメの向きにご注意です。

#ref(001.png)

番号の順に電流が流れます


#ref(002.png)

↑ツメの向きにご注意。

***コード [#ee5d3912]

 import RPi.GPIO as GPIO
 import sys,time,signal,os
 import subprocess
 
 from myutils import contains,cleanup,sysout
 
 # 25からはじまりGNDへ落ちる回路を組む。
 # これは物理的な配置番号ではなく、GPIO の番号。
 sw_pin = 25
 
 def main(args):
     signal.signal(signal.SIGINT, cleanup)
     signal.signal(signal.SIGTERM, cleanup)
 
     GPIO.setmode(GPIO.BCM)
     GPIO.setup(sw_pin, GPIO.IN, pull_up_down=GPIO.PUD_UP)
 
     interval = 0.1  # ボタン押下中のチェックインターバル(秒)
     shutdown_second = 3 # Shutdownまでのボタン押下時間(秒)
     max_counter = shutdown_second / interval
     print(max_counter)
 
     try:
         counter = 0
         while True:
             #押した直後なのでゼロ
             state = GPIO.input(sw_pin)
             # 押しているときは0、それ以外で分岐。
             isClick = not(state)
             sysout("Switchの状態:{0}".format(isClick))
             sysout("Counter: [{0:3.1f}]".format(counter)) # 全体で3桁、小数点1桁
 
             if(isClick): #押してるときは
                 counter += 1
                 # 3秒おしぱなしだったら。
                 if(counter > max_counter):
                     counter = 0
                     shutdownMessage = 'shutdownします'
                     # speak( shutdownMessage )
                     sysout(shutdownMessage)
                     # return
                     subprocess.call('sudo shutdown -h now',shell=True)
                 else:
                     time.sleep(interval)
             else:
                 counter = 0
                 # 押下待ちののタイムアウト時間(2000ms)。設定しておかないとアプリが終了できない
                 GPIO.wait_for_edge(sw_pin, GPIO.FALLING, timeout=3000)
                 # GPIO.wait_for_edge(sw_pin, GPIO.FALLING)
 
     except Exception as e:
         raise
     finally:
         sysout("clean up")
         GPIO.cleanup()
 
 
 if __name__ == '__main__':
     # http://www.python-izm.com/contents/basis/command_line_arguments.shtml
     # sysout(args[0])
     # sysout(args[1]) でアクセス出来るが、args[0]はプログラム名。
     main(sys.argv)
 

**関連リンク [#jc14afff]
https://github.com/masatomix/raspi_apps/tree/1.0.2

-[[ツール・ラボ » 電子工作入門コース » RaspberryPi電子工作入門>https://tool-lab.com/make-course/raspberrypi/]] 必読
-[[電子工作のコツ/ユニバーサル基板に挑戦 | 村田製作所>https://www.murata.com/ja-jp/campaign/ads/japan/elekids/ele/craft/knack/universal]] 半田ごて久しぶり。。
-[[プルアップのナゾ>http://startelc.com/elc/elc4_Pullup.html]]
-[[FritzingでRaspberry Piを探す : 電子工作と3DCAD>http://robocad.blog.jp/archives/573772.html]]
-[[IoTを使ってトイレを監視! 電子工作でトイレが使用中かチェックする仕組みを作ってみた - ICS MEDIA>https://ics.media/entry/10746/3]] おもしろい
-[[NefryとMilkcocoaを連携させて、WebサイトにリアルタイムでPush通知してみる | 株式会社LIG>https://liginc.co.jp/282918]]





----
この記事は
#vote(おもしろかった,そうでもない)

#comment

#topicpath

SIZE(10){現在のアクセス:&counter;}

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS