Rasberry Pi 3B + Blynkで実現、スマホからラズベリーパイを遠隔操作してシャットダウンする無料で簡単な方法

ラズパイってスマートフォンから操作できるの!?

簡単に思いつくのはhttpサーバーを立ててアクセスする方法です。
しかし、ローカルネットワークならまだしも、インターネットにさらすのはセキュリティ的にちょっと。。。

ということでネットで調べてみところ、素敵なサービスを発見!

Blynkというサービスを使って無料で簡単にスマホからラズベリーパイを操作できるということがわかりました。

そこで、第1弾として、ディスプレイやキーボード、タッチパネルが無い環境や、自宅のネットワークに接続できないときに、ラズパイ本体をシャットダウンできるようにしてみたいと思います!

準備するモノ

・スマートフォン 今回はiPhone6S を使いました。
・Blynkアプリ AppStoreからインストールします。

もの凄く参考にさせていただいたサイト

ここにまとめてくださっている情報に感謝!

Blynkアカウントの作成

スマートフォンにインストールした「Blynk」を起動して、Create New Account を実行します。メールとパスワードを設定します。

最新のライブラリーをインストールする

インストール(gitを使用する)

ラズパイの適当なフォルダにフォルダを作ってgit cloneします。

mkdir blynk
cd blynk
git clone https://github.com/blynkkk/blynk-library.git

blynkのlinuxフォルダに移動してmakeします。

cd blynk-library/linux
make clean all target=raspberry

どこからでも呼び出せるようにリンクを作成します。

cd /usr/local/bin/
sudo ln -s ~/src/blynk/blynk-library/linux/blynk .

※Blynk社のサイトからダウンロードしたライブラリに含まれている
README.mdのインストール方法を参考にしました。

インストール(ダウンロードする)

Blynk社のサイトから、最新のライブラリをダウンロードしてラズパイにインストールします。gitでインストールした場合はここのインストールは不要です。

下の方にスクロールしていくとzipファイルが置いてあるのでこれをラズパイに落とします。

まず、適当なフォルダを作って、

mkdir Blynk
cd Blynk

zipファイルをゲット

wget https://github.com/blynkkk/blynk-library/releases/download/v0.4.8/Blynk_Release_v0.4.8.zip

展開

unzip Blynk_Release_v0.4.8.zip

中に入ります

cd blynk-library/linux
make clean all target=raspberry

README.mdに一通りインストール方法が書いてあります。

プログラムの改造

バーチャルポートに対応したスクリプトを作成するだけで簡単に使えるようになります!(もの凄く便利、感謝!)

blynk-library/linux/main.cpp を参考サイトの通りに書き換えます。

 

 

Blynkアプリでプロジェクトを作成

アプリを起動して、プロジェクトを作成します。
名前はわかりやすいものに設定しました。

Project Name: RPi3-Shutdown
Chose Device: Raspberry Pi 3 B
Connection Type: WiFi

全て設定して「Create Project」を選択すると登録したメールアドレスにプロジェクト用のトークンが送られてきます。

ウィジェットの追加と設定

以下の5つのウィジェットを追加して、それぞれPINバーチャルポートを割り当てます。

V0 … CPU温度(グラフ)
V2 … ロードアベレージ(グラフ)
V10 … 安全装置(スライダー)
V11 … 再起動(ボタン)
V12 … シャットダウン(ボタン)

画面の何も無いところをタップするとウィジェットを選ぶことができます。設置したウィジェットをタップすると詳細設定画面が表示されますので、表示名やPIN、更新頻度(ここでは2秒おき)を設定します。

ウィジェットには分かりやすいように名前を付けておきましょう。

 

バーチャルポート用のスクリプト作成

V0, V2, V10, V11, V12 用にそれぞれ実行されるスクリプトを作ります。
参考サイトに従って5つのシェルスクリプトを用意します。

cd blynk/

CPU温度取得用
BLYNK_READ_V0.sh

#!/bin/sh
data=`cat /sys/class/thermal/thermal_zone0/temp | awk '{printf($1/1000)}'`
printf "%3.1f" $data

ロードアベレージ取得用
BLYNK_READ_V2.sh

#!/bin/sh
cat /proc/loadavg | awk '{print $1*100}'

スライダーの値保存用
BLYNK_WRITE_V10.sh

#!/bin/sh
SLIDER_FILE=/tmp/V10
echo $1 > $SLIDER_FILE

再起動用
BLYNK_WRITE_V11.sh

#!/bin/sh
SLIDER_FILE=/tmp/V10
if [ "$1" = "1" ] ; then
  if [ -e $SLIDER_FILE ] ; then
    num=`cat $SLIDER_FILE`
    if [ $num -eq 255 ] ; then
      rm $SLIDER_FILE
      shutdown -r now
    fi
  fi
fi

シャットダウン用
BLYNK_WRITE_V12.sh

#!/bin/sh
SLIDER_FILE=/tmp/V10
if [ "$1" = "1" ] ; then
  if [ -e $SLIDER_FILE ] ; then
    num=`cat $SLIDER_FILE`
    if [ $num -eq 255 ] ; then
      rm $SLIDER_FILE
      shutdown -h now
    fi
  fi
fi

ラズパイでエージェントプログラムを起動

blynkを起動します。メールで送られてきたtokenを入れてください。

sudo blynk --token=送られてきたトークン

※shutdown はsudo で実行しないといけないので、blynkを起動するときに、sudoで起動します。

以下のように「Ready」が出たら準備完了!


___ __ __
/ _ )/ /_ _____ / /__
/ _ / / // / _ \/ '_/
/____/_/\_, /_//_/_/\_\
/___/ v0.4.8 on Linux

[5001] Connecting to blynk-cloud.com:8442
[5280] Ready (ping: 88ms).

Blynkアプリでプロジェクトを実行

三角ボタンを押してプロジェクトを実行します。
上手くいけば、CPU温度、ロードアベレージが表示されます。

スライダー(安全装置)を最大(255)に設定して、再起動 or シャットダウン ボタンを押します(タップしただけでは反応しないようになっているのでちょっと長めに押します)。

無事ラズパイが再起動/シャットダウンしたら完了です!

※再起動したら blynk は停止してしまうので、適当に起動するように設定しておきましょう。systemdに登録して自動起動する方法を最後の方に記載しています。

ラズパイでのBlynk実行用のシェルを作る

プロジェクトごとにトークンが生成されるので、分かり易いようにシェルスクリプトにまとめておくと便利です。

sudo vim start-blynk-shutdown.sh
#!/bin/sh
sudo blynk --token=XXXXXXXXXX

XXXX…にはプロジェクトで作成したトークンを設定します。

実行するときは次のようにします。

sh start-blynk-shutdown.sh

エージェントプログラムをsystemdに登録

サービスを自動的に起動するために、systemdに登録します。

適当なフォルダ(ここでは、/home/pi/services/ とします)に、blynkapp.serviceという設定ファイルを作ります。

中身はこんな感じで。

[Unit]
Description=BlynkApp Shutdown
After=syslog.target

[Service]
Type=simple
ExecStart=/home/pi/scripts/start-blynk-shutdown.sh
TimeoutStopSec=5
StandardOutput=null

[Install]
WantedBy = multi-user.target

start-blynk-shutdown.shには実行権をつけておいてください。

chmod +x start-blynk-shutdown.sh

作った設定ファイルを/etc/systemd/system/にコピーして登録します。

sudo cp blynkapp.service /etc/systemd/system/

サービスを起動して状態を確認してみましょう。
サービスの起動:

sudo systemctl start blynkapp

サービスの停止:

sudo systemctl stop blynkapp

ステータスの確認:

sudo systemctl status blynkapp
●blynkapp.service - BlynkApp AlarmClock
Loaded: loaded (/etc/systemd/system/blynkapp.service; disabled)
Active: inactive (dead)
…

サービスの起動・停止が確認できたら、自動起動を設定します。

sudo systemctl enable blynkapp
Created symlink from /etc/systemd/system/multi-user.target.wants/blynkapp.service to /etc/systemd/system/blynkapp.service.

サービスの自動起動をやめたい場合は以下のコマンドを実行します。

sudo systemctl disable blynkapp

参考: Raspberry Piでプログラムを自動起動する5種類の方法を比較・解説

まとめ

今回は、スマホからラズベリーパイを遠隔操作するために、Blynkというサービスを使う方法を紹介しました。

Blynkのウィジェットには他にもたくさんの種類があるので、色々と作って紹介したいと思います。