Blynk アプリで 遠方から スマホ とESP32 の双方向リアルタイム同時通信

ESP32 ( ESP-WROOM-32 )

Arduino IDE に Blynk ライブラリをインストールする

今度は Arduino IDE に Blynk ライブラリをインストールします。

先ほど、スマホに Blynk アプリをインストールしてプロジェクトを作成した時に送られてきたメールを見てみて、そこに下図の様にライブラリのリンクがありますので、そこをクリックします。
すると、ZIPファイルが自動ダウンロードされます。
(Windows の場合)

そのZIP ファイルを以下の記事を参照して、Arduino IDE にインストールしてください。

GitHubにある ZIP形式ライブラリ のインストール方法 ( Arduino IDE )

ただし、この場合は ZIP ファイルを直接インストールできないようです。
その場合、ZIPファイルを解凍すると、libraries とtools フォルダがありますので、それをコピーする必要があります。

Windows 10 の場合、以下のようなパスになります。

C:\Users\ユーザー\Documents\Arduino\libraries
C:\Users\ユーザー\Documents\Arduino\tools

そこに下図の様な必要なファイルをコピーすればインストール完了です。

その後、Arduino IDE を起動してください。

Arduino IDE にスケッチを入力

では、Arduino IDE に以下のサンプルスケッチを入力してみてください。

【ソースコード】 (※無保証 ※PCの場合、ダブルクリックすればコード全体を選択できます)

#define BLYNK_PRINT Serial

#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>

char auth[] = "xxxxxxxxxxxxx"; //Blynkから送られてきたメール内にある Auth コード
char ssid[] = "xxxx"; //ご自分のルーターの SSID
char pass[] = "xxxx"; //ご自分のルーターのパスワード

const uint8_t LED_pin = 27; //LED GPIO #27
const uint8_t ADC_pin = 34; //AD converter GPIO #34

void setup()
{
  Serial.begin(115200);

  Blynk.begin(auth, ssid, pass);

  sigmaDeltaSetup(0, 312500);
  sigmaDeltaAttachPin(LED_pin, 0);
  sigmaDeltaWrite(0, 0); // LED OFF ( level 0 )
}

void loop()
{
  Blynk.run();
}

BLYNK_WRITE(V0){
  //スマホ側 Blynk アプリで設定したスライダー値の受信
  int LED_level = param[0].asInt();
  sigmaDeltaWrite(0, LED_level);

  Serial.printf("LEDpin#%d = %d\r\n", LED_pin, LED_level);
}

BLYNK_READ(V1){
  //スマホ側 Blynk アプリで設置したレベルメーターに ADC値を送信
  int adc = analogRead(ADC_pin);
  Blynk.virtualWrite(V1, adc);

  Serial.printf("adc = %d\r\n", adc);
}

【解説】

●1-5行目:
これは、Blynk のサンプルスケッチそのままです。

●7行目:
ここで、先ほど説明した Blynk から送られてきたメールにある、Auth コードを入力します。

●20-22行:
LED をPWM 制御して明るさをコントロールするための関数です。
Arduino core for the ESP32 のサンプルスケッチを流用しました。

●30-36行:
ここで、スマホ側の Blynk アプリで設置したスライダーから送られてきたデータを受信して、それを sigmaDeltaWrite 関数へ代入して、LED を調光させます。
シリアルモニターにも値を出力しています。
この関数で V0 という値を持っていて、スマホBlynkアプリのスライダーの V0 とリンクしているわけです。

●38-44行:
ここで V1 という値を持っていて、スマホBlynk アプリ側のレベルメーターの V1 とリンクしています。
光センサーの CdS セルを通した電圧値をGPIO #34 で読み取り、analogRead で 12bit ADコンバーターで変換します。
それを41行でスマホ側へ送信しているわけです。
ここでも V1 という値が使われていることに注意してください。

以上、スケッチはとってもシンプルで簡単ですね。

コンパイル書き込み実行

では、インターネットにつながった Wi-Fi ルーターを立ち上げて、しばらく経ってからコンパイル書き込みおよび実行してみてください。
ルーターの設定のファイアウォールや、MACアドレスフィルタリングを設定している方は、ESP32 – DevKitC が弾かれないように設定しておいてください。

コンパイル終了して、間髪入れずにシリアルモニターを 115200bps で起動するとこうなります。

こんな感じで表示されれば、ESP32 ( ESP-WROOM-32 )と Blynk サーバーと通信ができているということになります。

次に、スマホ Blynk アプリ上で下図の様なところをタッチして操作してみてください。
すると、ESP32 ( ESP-WROOM-32 )と通信開始します。

停止する場合は下図の四角をタッチすると停止します。

では、これの動作している様子を動画でご覧ください。
レベルメーターやスライダーの最小値や最大値を途中で修正している様子が分かると思います。
使っているスマホは、Android 7.0 で、
SONY Xperia X Performance SO-04H
です。

いかがでしょうか。
最小値、最大値の値修正も簡単ですね。
ほんとに素晴らしいアプリだと思います。

では、複数の端末でこれを操作したらどうなるのでしょうか?
以下の動画をご覧ください。
手前のスマホが4G 回線で、もう一つがインターネットにつながった Wi-Fi 回線で接続されています。
使っているもう一方のスマホは、3年前の Android 6 スマホです。

どうですか?
これ、素晴らし過ぎませんか?

他の端末もプロジェクトが同じならば値が即座に更新されていますね。
4G回線は多少追従性が悪いですが、これだけ追従していれば文句なしです。
これができれば、いろいろなリモートコントロールが想像できますね。
いゃぁ~・・・スゴイっす!!!

まとめ

どうでしょうか?

このBlynk というアプリは今まで見向きもしなかったのですが、使ってみるとあまりの素晴らしさに感動してしまいました。
もっとリアルタイム性があっても良いかと思いましたが、3G、4G回線を使ってもある程度追従していて、複数端末のデータも即座に更新されるとあれば、「あっぱれ」としか言いようがありません。

自分もこんなアプリを作りたかったんだと思いました。
双方向通信の WebSocket ライブラリを作ったりしましたが、やはり通信トラフィックがネックで、インターバルを取って通信しないと双方向通信は難しいんだということが改めて分かりました。
私が作っていたことと同じセオリーでこのBlynkアプリが作られていて、
「やっぱりそうなんだ!」と納得しながら使っていた次第です。

とりあえず、これを使えば、地球の裏側のデバイスとリアルタイム双方向通信ができますね。
介護や農業分野にも大いに役立ちそうです。

Blynk の他にもクラウド系アプリが沢山ありますが、これは大変な世の中になったものだと実感した次第です。

ということで、今回はここまでです。

ではまた・・・。

コメント

  1. cypris より:

    初めまして。
    現在ESP32と3gimの接続を試みているのですが、うまくいかず手詰まりの状態です。そこで、ESP32と3gimについて記事を書いていただけないでしょうか?

    • mgo-tec mgo-tec より:

      cyprisさん

      このブログにお越しくださり、ありがとうございます。

      残念ではございますが、3gim は持ち合わせておりません。
      値段を調べたらメチャメチャ高価ですね。
      これはとても私には購入できません。

      余談で 3gim とは関係ありませんが、私が3Gや4G回線で Blynk 通信する場合は、モバイルルーターやデザリングでやったことはありました。

  2. zaudy より:

    zaudy といいます
    blynk 初心者です
    わかりやすい説明でありがとうございます
    スマホで部品を設定する事は理解できましたが
    arduino 側でのサンプルプログラムはどの様に準備するのでしょうか
    メールで送られて来るのでしょうか
    そこにauth コードなどを設定するのでしょうか
    お教え願えませんでしょうか

    • mgo-tec mgo-tec より:

      zaudyさん
      記事をご覧いただきありがとうございます。
      この記事を更に読み進めていき、3ページ目の
      「Arduino IDE に Blynk ライブラリをインストールする」
      の節で書かれておりますので、それをご覧ください。
      スマホでBlynkプロジェクトを作成したら、登録したアドレスにメールが送られてくるので、そこにライブラリ用のリンクが貼られています。
      そこにauthコードが書かれています。
      そのauthコードをArduino IDEのスケッチに入力します。

  3. Blynk3035 より:

    初めまして。いつも参考にさせて戴いております。
    スマホ1台での双方向通信はできましたが、2台目のスマホの接続方法が解りません。スケッチには1つのAuth コードしか設定できないし…   1台目のスマホのAuth コードを2台目のスマホに設定するのでしょうか? ご教授願います。

    • mgo-tec mgo-tec より:

      Blynk3035さん

      記事をご覧いただき、ありがとうございます。

      2台目以降の複数の別のスマホでは、同じように Blynk をインストールしていただき、同じアカウントでログインしていただくと、同じプロジェクトが使えるように反映されていると思います。
      ログインする時にfacebookでログインしたならば、おなじアカウントでログインしてみてください。

  4. Blynk3035 より:

    ありがとうございました。今後ともよろしくお願いいたします。

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