Help us understand the problem. What is going on with this article?

ラズパイ用電源管理/死活監視モジュール「slee-Pi3」の基本機能の使い方

本記事ではラズベリーパイ用電源管理/死活監視モジュール「slee-Pi」シリーズの最新機種「slee-Pi3」の基本的な使い方を紹介します。
組み立てやセットアップの方法は以下記事を参照ください

ラズベリーパイ用電源管理/死活監視モジュール「slee-Pi3」のセットアップ

slee-Pi3は待機(スリープ)時の消費電流が極めて低い

slee-Pi3のメリットの1つに、スリープ状態時であれば消費電流が10μAで運用できるという点があります。スリープ状態時とは、ラズパイは電源OFFでslee-Pi3は待機準備中の状態です。起動するには、「タイマー動作・外部入力・slee-Pi3付属の物理スイッチ」の多種の方法でslee-Pi3からラズパイの電源をONすることができます。タイマー動作で、処理が必要な時だけ起動し、処理後シャットダウンを繰り返す(間欠動作)によって、消費電力の大幅な削減も可能となります。

タイマー動作

機能説明:好きな時間にラズパイを起動させることができます。
使いどころ:定時実行の運用時(1日1回のログ集計)に、待機時間が長いほど低消費電力の優れた効果が期待できます。

slee-Pi3は、リアルタイムクロック(RTC)を搭載していますので、slee-Pi3から任意のタイミングで電源停止状態のラズパイを起動することができます。

それでは、スリープ状態時から5分後に自動起動する方法を紹介します。

sudo sleepi3alarm set "+5min"
sudo shutdown -h now

また、時刻からでも自動起動の設定できます。

sudo sleepi3alarm set "2020/11/08 10:00:00"
sudo shutdown -h now

sleepi3alarm   : RTC のアラームを操作するスクリプト
set        : パラメータを設定
shutdown -h now : raspbian(linux)をシャットダウンさせるコマンド

sleepi3ctlのその他コマンド一覧は以下URLを参照ください。
https://github.com/mechatrax/sleepi3-utils#usrsbinsleepi3ctl

時刻の文字のフォーマットは以下URLを参照ください。
https://www.gnu.org/software/coreutils/manual/html_node/Date-input-formats.html

電源電圧値(2系統)のモニタリング

機能説明:slee-Pi3に入力された電源電圧を計測することができます。
使いどころ:入力電圧値の異常チェック

slee-Pi3から電源電圧値の2系統のどちらも取得できるようになりました。
※slee-Pi3以前は2系統のうち高い方のみ可能

2系統の入力電圧差を明確にするためCN1に12V(アダプタ)、CN2は9V(角電池)の電源を接続します。

IMG_3842.JPG

まずはCNを指定して入力電圧値を確認します。

sleepi3ctl get voltage 1
sleepi3ctl get voltage 2
sleepi3ctl get voltage
出力結果
11952 #CN1
9173  #CN2
11952 #CN1,CN2のうち電圧が高い方

sleepi3ctl : slee-Pi3を操作するための実行ファイル
get   : パラメータを取得

上記確認で電圧がそれぞれ取得できることがわかりました。
更に電圧値を一定条件でモニタリングすることも可能です。

今回の検証では、以下設定の方法を紹介します。
・CN1の電圧が100[mV]を超える場合、CN1.logに電圧値を書き込む
・CN2の電圧が100[mV]を超える場合、CN2.logに電圧値を書き込む

まずは、設定ファイルを修正します。

sudo vi /etc/sleepi3-monitor/monitor.yml
/etc/sleepi3-monitor/monitor.yml
#監視の間隔
common:
  interval: 1

#外部入力の設定
extin:
  history_size: 1
  commands:    
    - exec: /etc/sleepi3-monitor/extin.d/
      condition: over
      threshold: 0
      oneshot: false

#物理スイッチの設定
pushsw:
  history_size: 1
  commands:    
    - exec: /etc/sleepi3-monitor/pushsw.d/
      condition: over
      threshold: 0
      oneshot: false

#電圧の設定
voltage:
  history_size: 10
  commands:
    #CN1,CN2の電圧値が高い方の設定
    - exec: /etc/sleepi3-monitor/voltage.d/ 
      condition: none
      threshold: 0
      oneshot: true
    #CN1の設定
    - exec: /etc/sleepi3-monitor/voltage-1.d/ 
      channel: 1
      condition: over
      threshold: 100
      oneshot: false
    #CN2の設定
    - exec: /etc/sleepi3-monitor/voltage-2.d/
      channel: 2
      condition: over
      threshold: 100
      oneshot: false

interval  : 秒単位の監視間隔
history_size : 履歴に保持する値の数
exec    : 条件を満たした場合に実行されるコマンド
       ディレクトリ指定の場合はディレクトリ内のファイルを実行
condition : コマンドを実行する条件(閾値以下を監視⇒「under」, 閾値以上を監視⇒[over])
threshold : 電圧[mV]の閾値
oneshot  : 条件が満たされた際の「exec」の実行コマンドの繰り返し(一度のみ実行⇒「true」、繰り返し実行⇒「false」)

※「/etc/sleepi3-monitor/voltage.d/」の設定は動作しないように「condition: none」と設定しています。

CN1のデータを保存する実行ファイルを作成します。

sudo vi /etc/sleepi3-monitor/voltage-1.d/CN1.sh
/etc/sleepi3-monitor/voltage-1.d/CN1.sh
#!/bin/bash
source /usr/lib/sleepi3-monitor/parse_env.sh
echo ${VOLTAGE1[0]} >> /home/pi/CN1.log

ファイルに実行権限を与えます。

sudo chmod +x /etc/sleepi3-monitor/voltage-1.d/CN1.sh

同様に、CN2のデータを保存する実行ファイルを作成します。

sudo vi /etc/sleepi3-monitor/voltage-2.d/CN2.sh
/etc/sleepi3-monitor/voltage-2.d/CN2.sh
#!/bin/bash
source /usr/lib/sleepi3-monitor/parse_env.sh
echo ${VOLTAGE2[0]} >> /home/pi/CN2.log

ファイルに実行権限を与えます。

sudo chmod +x /etc/sleepi3-monitor/voltage-2.d/CN2.sh

最後に設定ファイルを反映させるためにプログラムを再起動します。

sudo systemctl restart sleepi3-monitor

CN1,CN2にそれぞれ電圧の入力があった場合に「/home/pi/CN1.log」、「/home/pi/CN2.log」のファイルには1秒間隔(interval)でデータが追記されます。

また実用的な方法として、メカトラックス株式会社のサンプルプログラムに
3秒以上電圧低下を検知した場合にシャットダウンするスクリプト」もありますのでこちらも参照ください。
URL: https://github.com/mechatrax/sleepi3-monitor/blob/master/examples/99-shutdown_by_continuous_voltage_drop.sh

電源電圧の監視と処理

機能説明:電源電圧を監視し、ラズパイの起動やシャットダウンができます。
使いどころ:簡易UPSとしての機能を構築できます。

電源電圧が閾値を下回った際にシャットダウンする方法を紹介します。

voltage項目内の「threshold」を10000[mv]に設定します。

voltage:
  history_size: 10
  commands:
    - exec: /etc/sleepi3-monitor/voltage.d/
      condition: under
      threshold: 10000
      oneshot: true

次にシャットダウンするコマンドのファイルを「/etc/sleepi3-monitor/voltage.d/」内に作成します。

sudo vi /etc/sleepi3-monitor/voltage.d/shutdown.sh
sudo systemctl restart sleepi3-monitor
/etc/sleepi3-monitor/voltage.d/shutdown.sh
sudo shutdown -h now

ファイルに実行権限を与えます。

sudo chmod +x /etc/sleepi3-monitor/voltage.d/shutdown.sh

設定ファイルを反映させるためにプログラムを再起動します。

sudo systemctl restart sleepi3-monitor

尚、slee-Pi3は2系統の電源を接続できますが、別系統の電源(補助電源)が無い場合は、電源異常自体が原因で上記のような正常な処理ができないのでご注意ください。

死活監視(ウォッチドッグ)

機能説明:ラズパイのハートビートの信号が途絶えると、OSをシャットダウンや再起動することができます。
使いどころ:システム異常時に自動的に復旧するプログラムを構築できます。

ウォッチドッグとは、システムが正常に動作しているかどうかを監視することです。slee-Pi3の死活監視(ウォッチドッグ)によりシステムエラー発生時に自動でラズパイを再起動できます。

sleepi3ctl get restart
sleepi3ctl get watchdog-timeout
出力
1 #1はシステムが無応答と判定された場合に再起動
60 #システムの応答を検知するタイムアウト値が60秒

カーネルパニックを意図的に発生させます。

cat /proc/sys/kernel/panic
sudo bash
root@raspberrypi:/home/pi# cat /proc/sys/kernel/panic
root@raspberrypi:/home/pi# echo c > /proc/sysrq-trigger

上記コマンドでラズパイはカーネルパニックとなり、60秒後に再起動します。

外部入力によるラズパイ起動

機能説明:外部信号を入力してラズパイを起動させることができます。
使いどころ:別デバイスからラズパイを起動など処理の連携が可能となります。

今回は、人感センサが反応した際にラズパイを起動する方法を紹介します。

用例としては、『「出退勤管理システム」、「防犯カメラ」、「空調システム」等との連携』が考えられます。

必要なもの

回路作成

圧着する部品の準備します。
IMG_3827.JPG

コネクタケーブルの完成形です。
IMG_3828.JPG

回路の完成図です。
IMG_3829.JPG

slee-Pi3の設定

外部入力は常時有効のため、特に設定する内容はありません。

人感センサが動体を検知するとslee-Pi3はスリープ状態から起動状態となります。

動画はこちら ⇒ https://youtu.be/-M1w7g4-g2A

外部出力で他の機器を起動

機能説明:slee-Pi3から外部信号を出力することができます。
使いどころ:GPIOを使うことなく、ラズパイと別デバイスの連携が可能となります。

slee-Pi3の外部出力の電気的な仕様は、別途こちらを参照ください。

今回は、slee-Pi3の起動に合わせてLEDの点灯させる方法を紹介します。

用例として、一般的なGPIOを使ったLチカでは無く、slee-Pi3の外部出力を使って『ラズパイの起動状態の表示灯』等を実現してみます。

必要なもの

回路作成

前章と同じコネクタケーブルを使用します。

回路の完成図です。
IMG_3837.JPG

slee-Pi3の設定

外部出力を有効化するコマンドを入力します。

sleepi3ctl set extout 1

この設定だけでOKです。

ラズパイのON/OFFに合わせてslee-Pi3の外部出力もON/OFFします。

動画はこちら ⇒ https://youtu.be/Ray8hzy7Yz8

もちろん起動状態で、下記を実行すれば通常のLチカっぽいことも可能です。

while true;
do
  sleepi3ctl set extout 1;
  sleep 1;
  sleepi3ctl set extout 0;
  sleep 1;
done

まとめ

 slee-Pi3は、「間欠動作」・「電圧モニタリング」・「死活管理」の基本的な動作は
 数行~数十行のプログラミングで実現できます

vascodagama
何か面白いものが作れないかと日々考えています。 ラズベリーパイのプロジェクトに対する部品をまとめたサイトを作りました。 https://gallery.tecpi.xyz/ スキル RaspberryPi/3D Printer/Python/IoT/ReactNative/React/PLC
https://blog.tecpi.xyz/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away