Raspberry Pi 3にBlynkサーバの構築

Raspberry Pi 3にBlynkサーバを構築しました。Blynkサーバの構築方法については、「Blynkサーバ」を参考にしました。構築したサーバを使って、LEDやタクトスイッチをESP8266に接続し、Blynkがインストールされたクライアントのアンドロイド端末からESP8266のLEDの点灯/消灯、タクトスイッチの入力を行います。

Raspberry Pi 3にBlynkサーバのインストール・実行

Blynkサーバは、Java サーバをべスにしたオープンソース「Netty」です。次の手順によりBlynkサーバをインストールします。

Java 8が利用できるかを次のコマンドで確認します。

$ java -version
java version “1.8.0_65”
Java(TM) SE Runtime Environment (build 1.8.0_65-b17)
Java HotSpot(TM) Client VM (build 25.65-b01, mixed mode)

Blynkサーバを次のコマンドでダウンロードします。

$ wget "https://github.com/blynkkk/blynk-server/releases/download/v0.28.5/server-0.28.5-java8.jar"

Blynkサーバは、ESP8266のプログラムで使用するAUTH TOKENをメールで送信します。Raspberry Pi 3でメール転送を可能とするため、次のSMTPサーバの情報を設定したファイル「mail.properties」を生成し、実行ファイル「server-0.28.5-java8.jar」と同じフォルダに設定します。

mail.smtp.auth=true
mail.smtp.starttls.enable=true
mail.smtp.host=smtp.gmail.com
mail.smtp.port=587
mail.smtp.username=YOUR_EMAIL_HERE
mail.smtp.password=YOUR_EMAIL_PASS_HERE

次のコマンドによりBlynkサーバをディフォルト「’hardware port 8442′ and default ‘application port 8443’ (SSL port)」で起動します。

$ java -jar server-0.28.5-java8.jar -dataFolder /home/pi/Blynk

Blynk Server 0.29.0-SNAPSHOT successfully started.
All server output is stored in folder ‘/home/pi/Blynk/logs’ file.

次のようなログファイルが記録されます。

20:13:08.573 INFO – Using data dir ‘/home/pi/Blynk’
20:13:10.646 INFO – Region : local. Host : eth0.
20:13:12.207 INFO – Initializing gmail smtp mail transport. Username : xxxx. SMTP host : xxxxx
20:13:12.445 INFO – Didn’t find custom user certificates.
20:13:12.449 INFO – Didn’t find Let’s Encrypt certificates.
20:13:12.450 WARN – You didn’t specified ‘server.host’ or ‘contact.email’ properties in server.properties file. Automatic certificate generation is turned off. Please specify above properties for automatic certificates retrieval.
20:13:12.450 WARN – ATTENTION. Server certificate paths (cert : ‘/home/pi/Blynk’, key : ‘/home/pi/Blynk’) not valid. Using embedded server certs and one way ssl. This is not secure. Please replace it with your own certs.
20:13:14.061 INFO – Hardware plain tcp/ip server listening at 8442 port.
20:13:14.065 INFO – Hardware SSL server listening at 8441 port.
20:13:14.068 INFO – Application server listening at 8443 port.
20:13:14.070 INFO – HTTP API and WebSockets server listening at 8080 port.
20:13:14.072 INFO – HTTPS API, WebSockets and Admin page server listening at 9443 port.
20:13:14.074 INFO – Mqtt hardware server listening at 8440 port.

Raspberry Pi 3の電源投入時にBlynkサーバを起動するために、ファイル「/etc/rc.local」の最終行に次の構文を設定します。

java -jar /home/pi/Blynk/server-0.28.5-java8.jar -dataFolder /home/pi/Blynk &

ESP8266にタクトスイッチの配線

TRIAL-ESP8266-LEAFキットでWi-Fi接続」で作成したTRIAL-ESP8266-LEAFキットに次のようにタクトスイッチを接続します。タクトスイッチは抵抗「330Ω」を介してESP8266に接続します。

ESP8266の接続

タクトスイッチとLEDのGPIO番号を次に示します。

  • タクトスイッチのGPIO番号:15
  • LEDのGPIO番号:16

アンドロイド端末でBlynk Widgetの作成

AQUOS PAD「SH-08E」にGoogle Playから「Blynk」をダウンロード・インストールし、 Blynk を起動すると、次の画面が表示されます。ダウンロードされたBlynkのバージョンを次に示します。

  • Version:2.16.4

Blynkの起動画面

「Create New Account」をタップし、表示された画面の中央のコネクタを示すアイコン(赤枠)をタップすると、BLYNKとCUSTOMの選択ボタンが表示されます。ここでCUSTOMを選択すると次のように入力欄「Host address」が表示され、ここにRaspberry Pi 3のIPアドレスを入力します。

BlynkサーバのIPアドレス設定

アカウントとしてメールアドレスとパスワードを設定すると次の画面が表示されます。このメールアドレスには、作成されたAUTH TOKENが送信されます。

「Create New Project」を選択し、プロジェクト名「LED」を入力し、「HARDWARE MODEL」から「ESP8266」を選択し、「Create」をタップします。次に「AUTH TOKEN」の「E-mail」をタップし、トークン番号を自分にメールします。

Create New Project

「Create Create」をタップするとプロジェクトが作成されるので、この画面でWidgetを置いていきます。画面の中心付近でタップすると、次のようなWidget一覧が表示され、必要なWidgetをタップしていきます。各Blynk Widgetの説明については、「Widgets」を参照してください。

Blynk Widget

LED Widgetの設定を次に示します。バーチャルポート「V1」に設定します。ESP8266のプログラムによりバーチャルポート「V1」をLEDのポートとし、点灯/消灯の処理を作成します。

Blynk Button

Button Widgetの設定を次に示します。ESP8266のLEDのGPIO番号「GP16」を割り当てます。これによりESP8266のプログラムコードは必要なくなります。

Blynk LED

BlynkサーバにアクセスするESP8266のプログラム作成

BlynkサーバにアクセスするためにBlynkライブラリが提供されています。Blynkライブラリを「blynkkk/blynk-library」(Source code (zip))から取得し、Arduino IDEのメニューの「スケッチ」→「ライブラリをインクルード」→「zip形式のライブラリをインストール」 を選択し、ダウンロードした Source code (zip) ファイルを選択します。Blynkライブラリは次のフォルダに設定され、Arduino IDEからアクセスできます。

C:\Users\(ユーザー名)\Documents\Arduino\libraries\blynk-library-0.4.10

ESP8266のプログラムを次に示します。Blynkサーバに接続するために、setup関数からBlynk.begin、loop関数からBlynk.runをそれぞれ呼び出します。また、AQUOS PAD「SH-08E」に表示されたLEDを点灯/消灯するためにWidgetLEDクラスを使用します。構築したBlynkサーバにアクセスするBlynk.beginの書式を次に示します。なお、Blynk関数については「Blynk Firmware」を参照してください。

Blynk.begin(auth, SSID, pass, IPAddress(XXX,XXX,XXX,XXX));

作成するプログラムの機能を次に示します。

  • TRIAL-ESP8266-LEAFキットのLEDは、AQUOS PAD「SH-08E」で表示されたボタンをタップするごとに点灯/消灯が切り替わります。このための処理は、ESP8266のプログラムには記述されていません。Blynk.runにより処理されます。
  • TRIAL-ESP8266-LEAFキットに接続したタクトスイッチを押すと、AQUOS PAD「SH-08E」に表示されたLEDが点灯し、離すと消灯します。これは、タクトスイッチのON/OFF状態をdigitalRead関数で入力し、その値に応じて「led1.on」関数あるいは「led1.off」関数を呼び出します。
#define BLYNK_PRINT Serial    // Comment this out to disable prints and save space
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>

// You should get Auth Token in the Blynk App.
// Go to the Project Settings (nut icon).
int sw = 15;
int val = 0 ;
WidgetLED led1(V1); //register to virtual pin 1

void setup()
{
  Serial.begin(9600);
  Blynk.begin("xxxx", "xxxx", "xxxx", "192.168.10.50");
  pinMode(sw, INPUT);
}

void loop()
{
  Blynk.run();
  
  delay(1000);
  val = digitalRead(sw);  // 入力ピンを読む
  if (val == 1){
    led1.on();
  }else{
    led1.off();
  }
}

アンドロイド端末からESP8266へのアクセス

1.Raspberry Pi 3上のBlynkサーバを起動します。

2.作成したESP8266プログラムを実行します。ESP8266プログラムを実行すると、Wi-FiによりBlynkサーバに接続される状況が、シリアル通信によりESP8266プログラムから次のように送信されます。パソコンにインストールしたTeraTermソフトにより受信しました。

2dO,4韆八
         x$・270] Connecting to xxxx
[1773] Connected to WiFi
[1773] IP: 192.168.10.7
[1773]
           ___  __          __
                                 / _ )/ /_ _____  / /__
                                                         / _  / / // / _ \/  '_/
                                                                                /____/_/\_, /_//_/_/\_\
                               /___/ v0.4.10 on ESP8266

[5001] Connecting to 192.168.10.50:8442
[5075] Ready (ping: 4ms).

3.AQUOS PAD「SH-08E」のBlynkを起動し、起動画面の「LogIn」をタップして、登録したメールアドレスとパスワードを入力します。Blynkサーバが起動されていないと次のように赤字でメッセージ「Something went wrong when connection…」と表示されます。

Blynkサーバの起動

4.AQUOS PAD「SH-08E」で作成したプロジェクト「LED」を実行します。トップ画面の最右の三角アイコンをタップすると四角アイコンになり実行されます。ESP8266が実行されていないと次のようにアイコンに赤いシンボルが付与され、メッセージ「Offline…」と表示されます。

ESP8266の実行

5.画面上のボタンをタップすると、タップするごとにESP8266のLEDが点灯/消灯を繰り返します。

6.ESP8266のタクトスイッチを押すと画面上のLEDが点灯し、タクトスイッチを離すと画面上のLEDが消灯します。

※ 注意 ※

ESP8266プログラムのloop関数内にBlynk関数を組み込むと次のようなエラーメッセージがでます。これはBlynk関数の処理が追いついていない時に発生するメッセージで、遅延関数(delay関数など)を挿入して処理を遅らせます。

    ・・・
[115681] Ready (ping: 4ms).
[116008] Trouble detected: http://docs.blynk.cc/#troubleshooting-flood-error
[120682] Connecting to 192.168.10.50:8442