LoginSignup
8
12

More than 1 year has passed since last update.

Raspberry Piに、Blynkサーバーを立てる(Widgetが使い放題)

Last updated at Posted at 2020-05-25

Blynkは、インターネット上にあるBlynk Serverを介して、デバイスと情報のやりとりをします(下の図)。スマホとIOTデバイスだけで簡単にリモート操作ができるので大変すばらいい。
architecture.png

ローカルサーバーを持つ利点は?

今回、紹介するのは、そのBlynk serverをお家のRaspberry Piに立てることです。うん?サーバーなしですぐできるのが長所なのになぜだ?と思うかも知りません。

  • 応答が速い (お家の無線LANだけでやりとりするので)
  • BlynkのWidgetが使い放題(タダです)

下記の図のようにBlynk mobileアプリにジョイスティックやボタンなどのWidgetをつけるのにお金がかかります。(Energyというポイントが必要で、最初に1000pointsまで無料です)自分のサーバーなら、それを自由に設定できるので、開発の際に自由度がぐーんと増します。そして、お家のサーバーなので、ネットを介すよりタイムラグがすくなく、例えば、リモコンでミニカーを操作する場合、操作性が断然違います。

IMG_3766.PNG

今回使ったもの

  • Raspberry Pi 3 Model B+

手順

  1. Raspberry piにDockerをインストール
  2. Blynk ServerカスタマイズしてImage作成
  3. 自動起動設定と起動
  4. Mobile AppのBlynkでユーザー作成

1. Raspberry piにDockerをインストール

下記の先人の知恵を借りました。

ただ、素早くやってみたいだけの方はこちらのコードでどうぞ

// 現在の Raspberry pi内の環境
$ uname -a
Linux raspberrypi 4.14.98-v7+ #1200 SMP Tue Feb 12 20:27:48 GMT 2019 armv7l GNU/Linux

$ lsb_release -a
No LSB modules are available.
Distributor ID:	Raspbian
Description:	Raspbian GNU/Linux 9.8 (stretch)
Release:	9.8
Codename:	stretch

Raspberry Piに Docker インストール

# Install
$ curl -fsSL https://get.docker.com -o get-docker.sh
$ sudo sh get-docker.sh
$ sudo systemctl enable docker
$ docker --version
# Docker version 19.03.9, build 9d98839

# Raspbianの標準ユーザのpiにDockerの実行権限を付与します。
$ sudo usermod -aG docker pi

インストールと起動確認
インストールしたら、常にdockerが動くようになっています。

# 確認
$ systemctl status docker.service
● docker.service - Docker Application Container Engine
   Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
   Active: active (running) since Sat 2020-05-23 21:56:03 JST; 1 day 14h ago
   
$ ps aux | grep docker
root       416  0.1  6.5 967836 58464 ?        Ssl  May23   2:48 /usr/bin/dockerd -H fd:// -- ....
root       857  0.0  0.3 866456  3152 ?        Sl   May23   0:34 /usr/bin/docker-proxy -proto tcp -host-ip ....
root       870  0.0  0.3 867224  3396 ?        Sl   May23   0:00 /usr/bin/docker-proxy -proto tcp -host-ip ....
root       879  0.0  0.6 799176  5672 ?        Sl   May23   0:25 containerd-shim -namespace moby -workdir ....
pi       12761  0.0  0.0   4340   564 pts/0    S+   12:49   0:00 grep --color=auto docker

2. Blynk ServerカスタマイズしてImage作成

blynkの公式Github repositoryにdockerを使った起動方法がありますが、そこの説明のままに実行したら毎回データーが初期化されるなど不便なところがあります。そこで、そのイメージを少しカスタマイズしたものを用意したので、このrepositoryからクローンして、Raspberry piで、実行してください。
大まかには、
設定ファイルを簡単に修正できるように、ユーザーデータを保持できるようにボリュームを指定しています。dockerに詳しくなくても中をのぞけば仕組みが簡単にわかると思います。

@RaspberryPi
# イメージビルドソースをクローン
# ビルドしたイメージの中でblynk
$ git clone https://github.com/yusonkim/localblynkserver.git
$ cd localblynkserver

# サーバー設定ファイルを開く(各自環境に合わせてeditorを使ってください)
$ vim server.properties

initial.energyは、新しいアカウントを作成した時に使えるWidget購入pointです。そのままでも十分ですが、ガンガン使うならもっと高くしても良いでしょう。
admin.emailadmin.passは、ウェブからの管理画面にアクセスする時に使うものです。この管理画面のURLは、https://<Rasberry piのhostname>.local:9443/adminで、お家のネットワーク内で、Macなど他のPCから接続できます。暗証番号等を新たに変更してください。

server.properties
...中略
#initial amount of energy
initial.energy=100000
...中略
admin.email=admin@blynk.cc
admin.pass=admin

そのあとは、Raspberry pi内でカスタムしたイメージを作成して、Rapberry piが再起動しても常に立ち上がるように設定するだけです。

# 設定ファイルを取り込んだカスタムBlynk Server Imageを作成
$ ./build.sh

3. 自動起動設定と起動

下記を参照しました。

systemctlを使ってRaspberry Piが起動すると自動的にdocker runコマンドで起動するように設定しています。その時に、永続化するボリュームを指定してユーザーデーターがなくならないようにしています。実際には、下記のスクリプトを実行するだけでよいです。


# Blynk Serverが自動的に起動するように設定
$ ./deploy.sh

# 再起動
$ sudo reboot

# 再起動後確認
# プロセスはすぐ立ち上がりますが、サーバーが起動までには約1分ほどかかります。
$ docker ps

CONTAINER ID        IMAGE                       COMMAND             CREATED              STATUS              PORTS                                                      NAMES
646b4dbdd298        rasbian-blynk:customlocal   "entrypoint.sh"     About a minute ago   Up About a minute   0.0.0.0:8080->8080/tcp, 0.0.0.0:9443->9443/tcp, 8440/tcp   blynk

4. Mobile AppのBlynkでユーザー作成

アプリがなければ、AppStoreなどからダウンロードしてください。
もしログインしていれば、一度ログアウトして、新しくアカウントを作ります。
ローカルサーバーへの接続は、新しいアカウントを作る時に指定します。
Create New Account を選択して、EmailやPasswordを入力します。
そのあと、下にあるサーバー選択アイコンを選択します。
IMG_3765.PNG
BlynkからCustomに設定を変更してから、住所にRaspberry piのIP、もしくは .localをいれ、ポート番号を9443に指定します。
IMG_3764.PNG
プロジェクトを作って見ると、Energyが増えていることが確認できます。

その他

管理画面から、token取得

IOTデバイスで動くプログラムを組むときは、PCだと思いますが、その時に、各プロジェクトごとにデバイスのtokenをいれなければなりません。結構長いので、モバイルのBlynkアプリからコピーするのは大変だと思いますが、先ほど出ていた管理画面に接続すれば、簡単に参照できます。

https://<RaspberryPiのIP>:9443/adminに接続します。

するとこんな画面が、でます。今回ssl証明書の設定をしてないので、怒られています。Advencedを押して、Proceed to ...を押して管理画面に入ることができます。sslの設定方法はblynkの公式Github repositoryにありますので、ソース上のserver.propertiesファイルも変更すれば、ご自身で設定できると思います。
Screen Shot 2020-05-26 at 0.10.19.png
Screen Shot 2020-05-26 at 0.10.24.png

設定したadmin情報でログインして見ると、
User欄からモバイルで登録したアカウントが確認できます。
Screen Shot 2020-05-26 at 0.17.01.png
そして、そのアカウントをクリックすれば、プロジェクトやデバイスなどの情報と、デバイスの情報欄にtokenが表示されていることがわかりますので、ここからコピーすれば良いでしょう。
Screen Shot 2020-05-26 at 0.19.33.png

サーバー設置方法検討

Blynk社でローカルサーバー用のBlynk Server公開しているので、それを使えば簡単にローカルサーバーが立てられます。
が、今回はDockerを使ってサーバーを立てます。その理由は、

  • どんな環境(ハードウェアに関係なし)でも失敗せずに立ち上げられます。
  • パッケージやプログラム言語をインストールする必要がない
  • 起動・停止・削除が簡単で、綺麗に行える

*Dockerを使うときは、ボリュームを適切にマウントして、ユーザーデーターを保持することに注意が必要です。*そうしなければ、サーバーを起動する度に初期化状態になります。簡単にできますので、心配は要りません。

docker-composeやkubernetes(k8s)を使うのもいいですが、今回は必要性をあまり感じませんでした。postgress dbを使って、データー(IOTデバイスからの生データー)を保存するとなるとdocker-composeやk8sもいいオプションですが、今回は、小さな容量で動くRaspberryPiなので、dbは必要ありません。ユーザーデーターもファイルで保存する方法でやっていますので、Blynk server単体で十分です。そして、サーバーの台数を増やしたりするAutoscalingも必要ありませんので、k8sもスキップしました。

8
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
12