サーマルカメラ(サーモ AI デバイス TiD) Python スイッチ編

Raspberry Piのシャットダウンと、再起動が出来るスイッチを制御します。

***
1. [紹介編](https://qiita.com/MH-SS/items/c3d12abe871bfd62d1df)
2. [センサ編](https://qiita.com/MH-SS/items/61021e58b3a5a7f81b3d)
3. [センサケース編](https://qiita.com/MH-SS/items/ab142942c702eb6e545f)
4. [Raspberry Pi編](https://qiita.com/MH-SS/items/73f09db1ad1890c90987)
5. Python編  
    5.1 [Form編](https://qiita.com/MH-SS/items/035682853d18dc2074f2)  
    5.2 [オムロン 非接触温度センサ D6T-44L-06編](https://qiita.com/MH-SS/items/f9301bde143de482a17a)  
    5.3 [Pololu 測距センサ VL53L0X編](https://qiita.com/MH-SS/items/df3c33a6256a533d4eb5)  
    5.4 [BOSCH 温湿度・気圧センサ BME280](https://qiita.com/MH-SS/items/aff10e7b4d84c1b03714)  
    5.5 [シャットダウン・再起動スイッチ編](https://qiita.com/MH-SS/items/82db17524553e56d7605)  
    5.6 [OpenCV編](https://qiita.com/MH-SS/items/bcc9092bb9b6977014a1)  
    5.7 [高速化編](https://qiita.com/MH-SS/items/154dd994d73b4c93854f)  

***

# 再起動スイッチ配線
![reboot_sw_wiring.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569469/fb4bcdbf-ee6c-63a0-73b6-9aa301886c54.jpeg)
再起動スイッチ(a接点)をGPIO3とGNDに接続します。
Raspberry Piをシャットダウンし、電源が入っている状態で再起動スイッチを押すと、 Raspberry Piが再起動します。

# シャットダウンスイッチ配線
![shutdown_sw_wiring.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569469/bc836bf9-0183-5a93-1821-bbf356bed50c.jpeg)
シャットダウンスイッチ(a接点)をGPIO14とGNDに接続します

# pigpioの準備
最近のOSではraspi-configを用いて、「9 Advanced Options」から入り、「AB GPIO Server」を選択すれば、pigpioが利用できます。
有効にできない場合は、下記コマンドでインストールしてください。

```
sudo apt-get update
sudo apt-get install pigpio
```

pigpioをサービスで動かしておくと便利です。

* サービスの確認

```
sudo nano /lib/systemd/system/pigpiod.service
```

* サービスの有効化

```
sudo systemctl enable pigpiod
sudo systemctl start pigpiod
sudo systemctl status pigpiod
```

# シャットダウンプログラム
shutdown.pyをRaspberry Piのフォルダにコピーします。/home/pi直下で良いと思います。
<a href="https://mhss.server-on.net/a656d/index/tid3/development/python/switch/shutdown-script/shutdown.zip" target="_blank">shutdown.py (ZIPで圧縮済)</a>

```
#!/usr/bin/python
# coding:utf-8
"""
Raspberry Pi Shutdown script.
=============================
"""
import os
rp_mode = False
try:
    import pigpio
    rp_mode = True
except ModuleNotFoundError:
    rp_mode = False
import sys
import time


def main():
    if rp_mode == False:
        return

    gpionumber = 14
    shutdown_time = 3
    wait_time = 0.5

    args = sys.argv
    if len(args) > 1:
        shutdown_time = float(args[1])

    pi = pigpio.pi()
    pi.set_mode(gpionumber, pigpio.INPUT)

    while True:
        counter = 0

        while True:
            if pi.read(gpionumber) == 0:
                counter = counter + 1
                if counter >= (shutdown_time / wait_time):
                    os.system('sudo shutdown -h now')
                    #print('sudo shutdown -h now')
                    break
            time.sleep(wait_time)

if __name__ == '__main__':
    main()
```

# シャットダウンプログラムのサービス化
shutdownbuttond.serviceファイルを作成します。

```
sudo nano /usr/lib/systemd/system/shutdownbuttond.service
```

shutdownbuttond.serviceファイルの内容は下記です。
python3、shutdown.pyの場所は適宜変更してください。

```
[Unit]
Description=Shutdown Daemon

[Service]
ExecStart=/usr/bin/python3 /home/pi/pyhome/shutdownd.py
Restart=always
Type=simple

[Install]
WantedBy=multi-user.target
```

サービスに登録します。

```
sudo systemctl enable shutdownbuttond.service
sudo systemctl daemon-reload
```

サービスが登録されているか確認します。

```
sudo systemctl status shutdownbuttond.service
```

Activeと言う文字があれば、正常に起動しています。

```
* shutdownbuttond.service - Shutdown Daemon
   Loaded: loaded (/usr/lib/systemd/system/shutdownbuttond.service; enabled; ven
   Active: active (running) since Sun 2020-11-01 13:45:21 JST; 2h 10min ago
 Main PID: 354 (python3)
    Tasks: 2 (limit: 4915)
   CGroup: /system.slice/shutdownbuttond.service
           -- 354 /usr/bin/python3 /home/pi/shutdown.py

**月 ** 13:45:21 user systemd[1]: Started Shutdown Daemon.
```

再起動して、シャットダウンできるか確認します。

***
[YouTube: サーマルカメラ(サーモ AI デバイス TiD) Python編](https://www.youtube.com/watch?v=fgwBsISDtXo)
[web: サーモ AI デバイス TiD Python スイッチ編](https://mhss.server-on.net/?f401c=Index&ae504=tid3/development/python/switch) (URLが変更されました)