ラズベリーパイ-スマホ-スマートロックを開閉-4 blynk仮想ボタン設定

ラズベリーパイとサーボを使ったスマートロック

ラズベリーパイを使ってスマートロックを自作しようとしてブログ記事に起こしながらトライしている。

前回まででサーボを動かすまではできたが、今回はいよいよリモートで動かすわくわくする話だ。

リモートで動かすにはいくつも方法はあると思うが俺はblynkというサービスを利用することにした。

ほかにも試したものはいろいろありすぎて数え切れないほどあるが、ラズベリーパイ&サーボ&リモート操作というキーワードでblynkというサービスを利用する方法をまとめてくれていたサイト記事があったのでそれを読みながら自分の言葉で書いただけだ。

実際には必ずしもこの記事を読まずともリンクを貼らせていただいている参考サイトを見ても十分わかると思う。ただ他人のサイトだといつ閉鎖されるか知れないし、自分のサイトなら閉鎖するリスクは少ないから自分の言葉でここに記録しておく。

ということでblynkサービスを利用したラズベリーパイへの命令についての記事である。

スポンサーリンク

【関連】

▼1.構想について

ラズベリーパイ-スマホ-スマートロックを開閉-1 プロジェクト概要
ラズベリーパイを介してスマホでスマートロックというプロジェクトを個人的に始める。 ラズベリーパイという超小型ワンボードマイクロコンピュータが随分昔からあるのは知っていたが、果たして自分のようなズブの文系人間が下手に手を出して太...

▼2.ラズベリーパイ初期設定について

ラズベリーパイ-スマホ-スマートロックを開閉-2 ラズパイ初期設定
ラズベリーパイを使ったスマートロックをつくる工作の2話目。 今回はラズベリーパイを初期設定し、外部の端末(WindowsとかMacとか)からリモートで使えるようにする。 その他日本語入力できるようにとかWi-Fi接続とか...

▼3.ラズベリーパイからサーボを動かすやりかたについて

ラズベリーパイ-スマホ-スマートロックを開閉-3 サーボを動かす
初心者だけどスマートロックを作ってみたい! そういう願望からラズベリーパイを買ってみて意外に難しい?いやいや思っていたとおり難しい。でもネットで情報を調べていくうちに何がわかってなにがわからないのかが見えてくる。 で、今回はスマ...

スマホ画面でblynkアプリ使って仮想スイッチ作成

概要

画面に仮想のスイッチパネルを造り、それらに機能を割当てることによりスイッチをタップしたときに物理的動作が発動されるわけでこれぞIoTといったことがかんたんにできてしまう。

この記事に関してはほとんど以下▼のサイトを参考にしたので飛んでくれてもよい。
Blynkを使ってRaspberryi Piをスマホから操作する

blynkとは

クラウドサービスのひとつで、アプリ上でさまざまな操作をビジュアル状に表現したオブジェクトから操作をしてその操作内容を別のサービスに転送することができる。

IFTTTの直接操作版みたいなものと理解している。

アプリダウンロード

Blynk 0.1 (legacy)

Blynk 0.1 (legacy)
開発元:Blynk Inc
無料
posted withアプリーチ

iPhoneでもアンドロイドでもアプリをインストールしておく。

アカウント作成はいらなそう

以下の公式サイトでアカウントをつくろうと思えば作れる。作るだけならとりあえずタダだ。

Blynk IoT platform: for businesses and developers

ただこの記事を書こうとしていつもの自分のメルアドでサインインしようとしたらできなかった。どうやらアカウントを作っていないまま利用していたっぽい。アカウント作らなくても利用できるって不思議。

あと部品をたくさん使わないように気をつければ金はかからない。あまりアイテムを増やしすぎると課金されるという今どきのゲームっぽいビジネスモデルだ。

プロジェクト作成して画面上に部品配置

左:アプリを開くと最初はこういう画面なのでNewProjectで新しくプロジェクトを作ろう
右:名前、デバイスを選ぶ(ラズベリーパイ以外も選べる)、接続方式はWi-Fi以外も選べるがWi-Fiで操作したいのでWi-Fiを選ぶ

でクリエイトをタップして開始。

blynk操作手順blynk操作手順

上の画面でクリエイトを済ませると▼左画面のように変わりトークンをさきほど登録したメールアドレスに送ったというメッセージがでる。このトークンとは1つのプロジェクトごとに割り当てられる秘密鍵のようなもので紛失したり第三者に教えないようにすること。

Okをタップしたら右画面に遷移し部品を配置しはじめられる。部品を配置するには右上にある○に+の記号をタップする。

blynk操作手順blynk操作手順

▼上の画面で○に+のアイコンをタップすると部品がいろいろ現れる。ここでは一番上にあるButtonを選んでおく。ちなみにここでオブジェクトの価格がいろいろ書かれていて利用するたびに持っているバッテリーが減るように左上の電池が減っていくが、使うのをやめる(削除する)と回復するのでいろいろ試せる。

さらにもっとオブジェクトを配置したかったらお金を払えば無限につくれる。

▼右のように画面が変わり1個オブジェクトが配置されている。

blynk操作手順blynk操作手順

上の画面で右上にあるナットのアイコンをタップすると▼こちらの左画像のような画面になるので万一メールで届いたトークンを消してしまった場合、この左画面の真ん中少し下にあるEmail allまたはCopy allというのをタップしてトークンを控えておく。

上の画面で配置されたばかりのボタンオブジェクトをタップすると▼右画像のような画面に変わるので名前を決めるほか機能を割り当てる。ここではOUTPUTのところをタップしてVirtual→V1という選択にしておく。なぜかというとblynkのサービスをこのあとインストールし起動するが、デフォルトのイベントトリガーがV1でまずは作られるから。そんな程度の意味だ。

blynk操作手順blynk操作手順

あとはON/OFF LABELSのところにはわかりやすい名前たとえば施錠/解錠などとつけておこう。それとMODEのところはPUSHではなくSWITCHにした。これはPUSHにしておくとモードが解錠から施錠と切り替わらないから。鍵というのは解錠から施錠、施錠から解錠へとモードが切り替わるものだから。

ラズパイ内で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行ずつ意味を解釈していくと、

  1. ネット上のWiring Pi(GPIO Interface library for the Raspberry Pi)をダウンロードしてインストールする。もっと興味があったらググってください。
  2. githubよりblynkのライブラリをダウンロードして複製する。git cloneというのがそういう命令らしいが詳しいことは自分でしらべてください。
  3. 2で現在ディレクトリの下にblynk-libraryさらにその下にlinuxというディレクトリができているのでそこまでカレントディレクトリを移動する
  4. makeコマンドはソースファイルをコンパイルして実行ファイルにする。つまりターゲットをラズベリーパイに合わせた形に実行ファイルをメークする。

ここまで実行するとホームディレクトリの下のblynk-library/linuxにblynkというファイルができているはずだ。

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操作手順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のプロンプトから以下のように実行する。

pi@raspberrypi:~/blynk-library/linux $ systemctl is-enabled blynk→→→→→blynkは起動時実行プログラムに含まれているか?
disabled→→→→→→→→まだ動いていない
pi@raspberrypi:~/blynk-library/linux $ sudo systemctl enable blynk→→→→blynkを起動時実行プログラムに含める
Created symlink /etc/systemd/system/multi-user.target.wants/blynk.service → /etc/systemd/system/blynk.service.
→→→→→→→→blynkがシステム起動時の実行ファイルに含まれましたよっていうメッセージ
pi@raspberrypi:~/blynk-library/linux $ systemctl is-enabled blynk→→→→blynkは起動時実行プログラムに含まれているか?
enabled→→→→→→→→含まれているよっていう返答

これで再起動してみて確認してみよう。うまくサーボが動かなかったら参考リンク先を読んで確認してみよう。

blynkアプリ以外からの実行指示方法

スマホのblynkアプリでつくったボタンをタップすればサーボは動かせるようになったが、それだけではスマートロックあるいはスマートホームとしては不十分だ。

blynkアプリ以外でもこのサーボを動かすという動作をさせたい。

それにはblynkのwebサービスに特別な命令をだせばよいのだが非常にかんたん。

ブラウザで以下のURLを開けばよい。

http://blynk-cloud.com/ここにはあなたのトークンを入れる/update/V1?value=1

最後のvalue=1のところを0にしたりと変えて司令をだす。

ただしhttp://blynk-cloud.com/・・・・・・のblynk-cloud.comだとエラーになることがあるらしいので直接IPアドレスを打ってしまえば解決することがある。

つまりblynk-cloud.comのIPアドレスを調べて

http://188.166.206.43/ここにはあなたのトークンを入れる/update/V1?value=1

と置き換える。これの応用でV1を変えることでスイッチをもっと増やしたり、動きを複雑にしたりといろいろできそうだ。万一まったく動かなくなったらIPアドレスを調べ直す必要がある。

あとがき

今回のblynkについての記事は参考サイトに書いてあることを見ながらリライトしたようなもので恐縮だが、自分なりに咀嚼してあとで読み返してもわかるように解釈しながら書いた。

だから今後は参考サイトを見ずとも自分のこのページを見れば同じ設定ができるというわけだ。

さて、次回はいよいよ物理的にドアの鍵に取り付けるわけだ。

乞うご期待。

次はラズベリーパイ-スマホ-スマートロックを開閉-5 NFC仕込み

【関連】

▼1.構想について

ラズベリーパイ-スマホ-スマートロックを開閉-1 プロジェクト概要
ラズベリーパイを介してスマホでスマートロックというプロジェクトを個人的に始める。 ラズベリーパイという超小型ワンボードマイクロコンピュータが随分昔からあるのは知っていたが、果たして自分のようなズブの文系人間が下手に手を出して太...

▼2.ラズベリーパイ初期設定について

ラズベリーパイ-スマホ-スマートロックを開閉-2 ラズパイ初期設定
ラズベリーパイを使ったスマートロックをつくる工作の2話目。 今回はラズベリーパイを初期設定し、外部の端末(WindowsとかMacとか)からリモートで使えるようにする。 その他日本語入力できるようにとかWi-Fi接続とか...

▼3.ラズベリーパイからサーボを動かすやりかたについて

ラズベリーパイ-スマホ-スマートロックを開閉-3 サーボを動かす
初心者だけどスマートロックを作ってみたい! そういう願望からラズベリーパイを買ってみて意外に難しい?いやいや思っていたとおり難しい。でもネットで情報を調べていくうちに何がわかってなにがわからないのかが見えてくる。 で、今回はスマ...

 

B01NHEBAN5
I-O DATA Raspberry Pi メインボード Bluetooth(R) Wi-Fi対応モデル Raspberry Pi 3 model B 安心の1年間ハードウェア保証 UD-RP3

¥5,778(2021/11/03 22:03時点の価格)
平均評価点:5つ星のうち4.3
>>楽天市場で探す
>>Yahoo!ショッピングで探す

B016FKJJ8M
デジタル・マイクロサーボ SG90 (1個)

¥440(2021/11/03 22:05時点の価格)
平均評価点:5つ星のうち4.2
>>楽天市場で探す
>>Yahoo!ショッピングで探す

タイトルとURLをコピーしました