ラズベリーパイを使ってスマートロックを自作しようとしてブログ記事に起こしながらトライしている。
前回まででサーボを動かすまではできたが、今回はいよいよリモートで動かすわくわくする話だ。
リモートで動かすにはいくつも方法はあると思うが俺はblynkというサービスを利用することにした。
ほかにも試したものはいろいろありすぎて数え切れないほどあるが、ラズベリーパイ&サーボ&リモート操作というキーワードでblynkというサービスを利用する方法をまとめてくれていたサイト記事があったのでそれを読みながら自分の言葉で書いただけだ。
実際には必ずしもこの記事を読まずともリンクを貼らせていただいている参考サイトを見ても十分わかると思う。ただ他人のサイトだといつ閉鎖されるか知れないし、自分のサイトなら閉鎖するリスクは少ないから自分の言葉でここに記録しておく。
ということでblynkサービスを利用したラズベリーパイへの命令についての記事である。
【関連】
▼1.構想について
▼2.ラズベリーパイ初期設定について
▼3.ラズベリーパイからサーボを動かすやりかたについて
スマホ画面でblynkアプリ使って仮想スイッチ作成
概要
画面に仮想のスイッチパネルを造り、それらに機能を割当てることによりスイッチをタップしたときに物理的動作が発動されるわけでこれぞIoTといったことがかんたんにできてしまう。
この記事に関してはほとんど以下▼のサイトを参考にしたので飛んでくれてもよい。
Blynkを使ってRaspberryi Piをスマホから操作する
blynkとは
クラウドサービスのひとつで、アプリ上でさまざまな操作をビジュアル状に表現したオブジェクトから操作をしてその操作内容を別のサービスに転送することができる。
IFTTTの直接操作版みたいなものと理解している。
アプリダウンロード
このアプリはバージョンが大きく変わり、現在通常のアプリストアからはダウンドーロできないので検索して探してほしい。
iPhoneでもアンドロイドでもアプリをインストールしておく。
アカウント作成はいらなそう
以下の公式サイトでアカウントをつくろうと思えば作れる。作るだけならとりあえずタダだ。
Blynk IoT platform: for businesses and developers
ただこの記事を書こうとしていつもの自分のメルアドでサインインしようとしたらできなかった。どうやらアカウントを作っていないまま利用していたっぽい。アカウント作らなくても利用できるって不思議。
あと部品をたくさん使わないように気をつければ金はかからない。あまりアイテムを増やしすぎると課金されるという今どきのゲームっぽいビジネスモデルだ。
プロジェクト作成して画面上に部品配置
左:アプリを開くと最初はこういう画面なのでNewProjectで新しくプロジェクトを作ろう
右:名前、デバイスを選ぶ(ラズベリーパイ以外も選べる)、接続方式はWi-Fi以外も選べるがWi-Fiで操作したいのでWi-Fiを選ぶ
でクリエイトをタップして開始。
上の画面でクリエイトを済ませると▼左画面のように変わりトークンをさきほど登録したメールアドレスに送ったというメッセージがでる。このトークンとは1つのプロジェクトごとに割り当てられる秘密鍵のようなもので紛失したり第三者に教えないようにすること。
Okをタップしたら右画面に遷移し部品を配置しはじめられる。部品を配置するには右上にある○に+の記号をタップする。
▼上の画面で○に+のアイコンをタップすると部品がいろいろ現れる。ここでは一番上にあるButtonを選んでおく。ちなみにここでオブジェクトの価格がいろいろ書かれていて利用するたびに持っているバッテリーが減るように左上の電池が減っていくが、使うのをやめる(削除する)と回復するのでいろいろ試せる。
さらにもっとオブジェクトを配置したかったらお金を払えば無限につくれる。
▼右のように画面が変わり1個オブジェクトが配置されている。
上の画面で右上にあるナットのアイコンをタップすると▼こちらの左画像のような画面になるので万一メールで届いたトークンを消してしまった場合、この左画面の真ん中少し下にあるEmail allまたはCopy allというのをタップしてトークンを控えておく。
上の画面で配置されたばかりのボタンオブジェクトをタップすると▼右画像のような画面に変わるので名前を決めるほか機能を割り当てる。ここではOUTPUTのところをタップしてVirtual→V1という選択にしておく。なぜかというとblynkのサービスをこのあとインストールし起動するが、デフォルトのイベントトリガーがV1でまずは作られるから。そんな程度の意味だ。
ラズパイ内でblynkサーバを起動させ外部からの指示で動かす
ラズベリーパイにblynkサービスをインストール
ラズベリーパイのターミナル画面(スタートメニューからLXTerminal)にて下記のコマンドを1行ずつ入力していく。
$ sudo apt install wiringpi
$ git clone https://github.com/blynkkk/blynk-library.git
$ cd blynk-library/linux
$ make clean all target=raspberry
一応1行ずつ意味を解釈していくと、
- ネット上のWiring Pi(GPIO Interface library for the Raspberry Pi)をダウンロードしてインストールする。もっと興味があったらググってください。
ここでwiringpiがみつかりませんというエラーが出たらここのサイトを参考にしてソースファイルをダウンロードしてビルドするとかいうことをしてください。 - githubよりblynkのライブラリをダウンロードして複製する。git cloneというのがそういう命令らしいが詳しいことは自分でしらべてください。
- 2で現在ディレクトリの下にblynk-libraryさらにその下にlinuxというディレクトリができているのでそこまでカレントディレクトリを移動する
- makeコマンドはソースファイルをコンパイルして実行ファイルにする。つまりターゲットをラズベリーパイに合わせた形に実行ファイルをメークする。
ここまで実行するとホームディレクトリの下のblynk-library/linuxにblynkというファイルができているはずだ。
ラズベリーパイでblynkサービスを実行
次にそのままのディレクトリ(~/blynk-library/linux)で以下を実行する。
sudo ./blynk --token=<YourToken>
<YourToken>のところはさきほど取得した自分のトークンに置き換えよう。そうすると▼こんなような画面になってカーソルが戻ってこない状態になるはず。
pi@raspberrypi:~ $ cd blynk-library/linux
pi@raspberrypi:~/blynk-library/linux $ sudo ./blynk --token=*********************
[0]
___ __ __
/ _ )/ /_ _____ / /__
/ _ / / // / _ \/ '_/
/____/_/\_, /_//_/_/\_\
/___/ v1.0.1 on Linux
[1] Connecting to blynk-cloud.com:80
[508] Ready (ping: 91ms).
これはサービスがループしてずっと待機状態になっているからで問題ない。
スマホとblynkサービスが繋がっているか確認
▼スマホ画面をこのオブジェクト配置に戻し画面右上の▷アイコンをタップすることによりこのプロジェクトを起動する。
▼右画面のようにボタンオブジェクトが命名した名前に変わるりグリッド表示が消える。ここでボタンをタップしてみるとボタンの表記がまず変わることを確認する。
▼さらにラズベリーパイのターミナルではさきほど起動したblynkの画面でGot a value 1とかGot a value -とか表示されているはず。ボタンを押すたびに新しい行がでてくる。
pi@raspberrypi:~/blynk-library/linux $ sudo ./blynk --token=*****************************
[0]
___ __ __
/ _ )/ /_ _____ / /__
/ _ / / // / _ \/ '_/
/____/_/\_, /_//_/_/\_\
/___/ v1.0.1 on Linux
[1] Connecting to blynk-cloud.com:80
[351] Ready (ping: 91ms).
Got a value: 1
Got a value: 0
Got a value: 1
これでスマホでボタンを押すとラズベリーパイに信号が行っているということが確認できた。
さらにサーボに連動させるにはソースファイルをいじる
~/blynk-library/linuxディレクトリにあるmain.cppの中身をカスタマイズすることでスマホのボタンをタップしたタイミングでサーボに回転命令をだすことができる。
カレントディレクトリを~/blynk-library/linuxにした状態で下記のコマンドをTXTerminal画面で打つ。
$ sudo mousepad main.cpp
main.cppの編集画面で少し下にスクロールすると下記のような記述がある。
BLYNK_WRITE(V1)
{
printf("Got a value: %s\n", param[0].asStr());
}
これはさきほど少し触れたがデフォルトで作られるイベント関数なので引数がV1になっている。だから最初のボタンにV1とデータを割り当てておいたのだ。
ここで{}の中に前回の記事で作ったサーボを動かすPythonファイルを呼び出すコードを記述する。つまりホームディレクトリにservo_turn_left.pyとservo_turn_right.pyいう名前で保存してあったとしたら
BLYNK_WRITE(V1) { printf("Got a value: %s\n", param[0].asStr()); if(param[0].asInt() == 1){ system("sudo python3 /home/pi/servo_turn_left.py"); }
else if(param[0].asInt() == 0){ system("sudo python3 /home/pi/servo_turn_right.py"); }
}
という記述にする。printf()関数は消しても残しても良い。
このときサーボの回転方向が想定しているのと逆だったらifのあとの数値を入れ替えれば逆向きになる。
param[0]とかasInt()とかっていうのは俺も意味がわからないまま使っているので興味があればググってください。
ついでにもう一つ。前回記事のblynkでボタンをもう一個増やしたらデータ変数をV2にしたとしよう。そうしてV1のボタンとV2のボタンでサーボの回転を逆にするという設定にしたいとする。
そのときの記述は
BLYNK_WRITE(V1) { printf("Got a value: %s\n", param[0].asStr()); if(param[0].asInt() == 1){ system("sudo python3 /home/pi/servo_turn_left.py"); }
}
BLYNK_WRITE(V2) { printf("Got a value: %s\n", param[0].asStr()); if(param[0].asInt() == 1){ system("sudo python3 /home/pi/servo_turn_right.py");
}
}
つまりV1のボタンが押されたときにはサーボ左に回す。V2のボタンが押されたときにはサーボ右に回すということ。
再コンパイルして動作確認
それではプログラムを思い通りに書き換えたら保存してコンパイルしよう。
~blynk-library/linuxのディレクトリ下で以下のコマンドを打つ。これは最初にインストールしたときも入れたコマンドだ。
$ make clean all target=raspberry
コンパイルが無事終わったら再び起動。
$ sudo ./blynk --token=*****************************
スマホのボタンオブジェクトを押すたびにサーボが反応すれば成功。
常駐ソフト扱いにする=デーモン
TXTerminalの画面で以下のコマンドを実行する。これはblynk.serviceというテキストファイルを/etc/systemd/systemというディレクトリに新規につくるのだ。
$ sudo mousepad /etc/systemd/system/blynk.service
開いたらなにもないはずなので以下をトークンの部分だけ自分のトークンに置き換えてコピペする。
[Unit]
Description = Blynk service
[Service]
ExecStart = /home/pi/blynk-library/linux/blynk --token=あなたのプロジェクトのトークン
ExecStop = /bin/kill $MAINPID
Restart = always
[Install]
WantedBy = multi-user.target
ファイルを保存したら実行してみよう。以下を1行ずつ実行するだけ。
$ sudo systemctl start blynk
$ journalctl -f -u blynk
そうするとなんかメッセージがでてループ状態に入って動いてるっぽくなると成功だ。
さらにこのデーモンが起動時に実行されるようにする
TXTerminalのプロンプトから~/blynk-library/linuxのディレクトリで以下のように実行する。
$ systemctl is-enabled blynk
disabled
$ sudo systemctl enable blynk
Created symlink /etc/systemd/system/multi-user.target.wants/blynk.service → /etc/systemd/system/blynk.service.
$ systemctl is-enabled blynk
enabled
systemctl is-enabled blynk blynkは起動時実行プログラムに含まれているか?
disabled まだ動いていないの意味
sudo systemctl enable blynk blynkを起動時実行プログラムに含める
Created symlink /etc/systemd/system/multi-user.target.wants/blynk.service→/etc/systemd/system/blynk.service.
blynkがシステム起動時の実行ファイルに含まれましたよっていうメッセージ
systemctl is-enabled blynk blynkは起動時実行プログラムに含まれているか?
enabled 含まれているよっていう返答
これで再起動してみて確認してみよう。うまくサーボが動かなかったら参考リンク先を読んで確認してみよう。
ちなみに起動時の実行をやめたかったら
$ sudo systemctl disable blynk
でやめられる
blynkアプリ以外からの実行指示方法
スマホのblynkアプリでつくったボタンをタップすればサーボは動かせるようになったが、それだけではスマートロックあるいはスマートホームとしては不十分だ。
blynkアプリ以外でもこのサーボを動かすという動作をさせたい。
それにはblynkのwebサービスに特別な命令をだせばよいのだが非常にかんたん。
ブラウザで以下のURLを開けばよい。
https://blynk-cloud.com/ここにはあなたのトークンを入れる/update/V1?value=1
最後のvalue=1のところを0にしたりと変えて司令をだす。
ただしhttps://blynk-cloud.com/・・・・・・のblynk-cloud.comだとエラーになることがあるらしいので直接IPアドレスを打ってしまえば解決することがある。
つまりblynk-cloud.comのIPアドレスを調べて
https://188.166.206.43/ここにはあなたのトークンを入れる/update/V1?value=1
と置き換える。これの応用でV1を変えることでスイッチをもっと増やしたり、動きを複雑にしたりといろいろできそうだ。万一まったく動かなくなったらIPアドレスを調べ直す必要がある。
あとがき
今回のblynkについての記事は参考サイトに書いてあることを見ながらリライトしたようなもので恐縮だが、自分なりに咀嚼してあとで読み返してもわかるように解釈しながら書いた。
だから今後は参考サイトを見ずとも自分のこのページを見れば同じ設定ができるというわけだ。
さて、次回はいよいよ物理的にドアの鍵に取り付けるわけだ。
乞うご期待。
次はラズベリーパイ-スマホ-スマートロックを開閉-5 NFC仕込み
【関連】
▼1.構想について
▼2.ラズベリーパイ初期設定について
▼3.ラズベリーパイからサーボを動かすやりかたについて
I-O DATA Raspberry Pi メインボード Bluetooth(R) Wi-Fi対応モデル Raspberry Pi 3 model B 安心の1年間ハードウェア保証 UD-RP3
¥5,778(2021/11/03 22:03時点の価格)
平均評価点:
>>楽天市場で探す
>>Yahoo!ショッピングで探す
デジタル・マイクロサーボ SG90 (1個)
¥440(2021/11/03 22:05時点の価格)
平均評価点:
>>楽天市場で探す
>>Yahoo!ショッピングで探す