Arduino Cloud に Raspberry Pi を接続して Lチカ

 Arduino ではオンライン上でのオールインワンの開発プラットフォームとして Arduino Create というものを提供しています。

create.arduino.cc

f:id:akanuma-hiroaki:20180322081919p:plain

 以前の記事で使った Arduino Web Editor も Arduino Create で提供されているサービスです。そのほかのサービスとして Arduino Cloud という、 Arduino を簡単にインターネットに接続したり、ほかの Arduino と相互に接続したり、デバイスを管理したりできるサービスを提供しています。現在 Arduino Cloud の対応デバイスはまだ少なく、 YUN SHIELD、 MKR1000、 WIFI SHIELD 101 の3つのようで、いずれも技適を通っていないため日本ではまだ Arduino Cloud に対応している Arduino 端末はないようです。前回の記事で使用した WROOM-32 も Arduino 互換なので、なんとか接続できないかと色々試してみたのですが、今のところまだ接続できていません。

f:id:akanuma-hiroaki:20180321202749p:plain

 とりあえず対応している Arduino 端末が日本でも使えるようになるのを待ちたいと思いますが、 Arduino Cloud では Arduino 以外にも、 Raspberry Pi や BeagleBone などの Linux 端末も接続することができるので、今回は Raspberry Pi を接続してみたいと思います。

Arduino Cloud に Raspberry Pi を登録

 まずは Arduino Cloud に Raspberry Pi をデバイスとして登録します。Raspberry Pi の通常の初期セットアップは事前に終わらせておき、ネットワークに接続されている状態にしておきます。 Arduino Cloud にアクセスすると下記のようなメニュー画面になります。 Arduino Cloud 対応の Arduinoボードを登録する場合には右下の Arduino Cloud を選択すれば良いのですが、 Raspberry Pi などの Linux 端末を登録する場合には、左下の My Devices を選択します。

f:id:akanuma-hiroaki:20180321163526p:plain

 デバイスを登録するとできるようになることなどの説明が表示されるので、 ADD NEW DEVICE をクリックします。

f:id:akanuma-hiroaki:20180321163445p:plain

 登録するデバイスを選択する画面になりますので、今回は Set up a Raspberry Pi を選択します。

f:id:akanuma-hiroaki:20180321163507p:plain

 セットアップの手順内で行われる内容の説明が表示されます。セットアップでは PC 側にまだ Arduino Plugin がインストールされていなければインストールし、 Raspberry Pi 側に Arduino Connector がインストールされます。 NEXT をクリックして先に進みます。

f:id:akanuma-hiroaki:20180321163646p:plain

 Raspberry Pi がオンラインになっていることを確認するように促す画面が表示されますので、オンラインになっていれば MY DEVICE IS READY をクリックします。

f:id:akanuma-hiroaki:20180321163703p:plain

 セットアップの実行の仕方の選択肢として、 Raspberry Pi の IP アドレスがわかるか、 Raspberry Pi にモニタとキーボードが使えるようになっているかを選択します。今回はモニタとキーボードは繋いでいないですが、 IP アドレスはわかっているので、 I KNOW THE IP ADDRESS OF MY DEVICE を選択します。

f:id:akanuma-hiroaki:20180321201510p:plain

 すると IP アドレスの入力欄が表示されるので、 IP アドレスを入力して NEXT をクリックします。

f:id:akanuma-hiroaki:20180321201527p:plain

 Raspberry Pi にアクセスするためのアカウント情報が求められるので、フォームに入力して DONE をクリックします。

f:id:akanuma-hiroaki:20180321201543p:plain

 セットアップが開始され、処理中は下記のような画面が表示されます。ここで Arduino Connector のインストールなどが行われます。処理が終わると画面は自動的に切り替わりますので、このまま待ちます。

f:id:akanuma-hiroaki:20180321201600p:plain

 セットアップが無事終了すると下記のように Arduino Cloud に登録するデバイス名の入力フォームが表示されますので、わかりやすい名前をつけて SAVE をクリックします。

f:id:akanuma-hiroaki:20180321201616p:plain

 これでひとまず登録は完了ですので、 GO TO MY DEVICES をクリックしてデバイス一覧画面に移動します。

f:id:akanuma-hiroaki:20180321201631p:plain

 デバイス一覧には登録した Raspberry Pi が表示され、ネットワークに接続されていれば ONLINE という表示になっています。

f:id:akanuma-hiroaki:20180321201648p:plain

 ここでデバイスを選択すると下記のようにデバイスの状態についてのダッシュボードが表示されます。

f:id:akanuma-hiroaki:20180321202818p:plain

 ちなみに登録した Raspberry Pi でホームディレクトリを見てみると、Arduino Connector 関連の下記のようなファイルが追加されています。

$ ls -ltr ~
合計 28368
〜〜〜抜粋〜〜〜
-rwxr-xr-x  1 pi   pi   11346716  35 15:31 arduino-connector
-rw-------  1 root root      227  321 08:32 certificate.key
-rw-------  1 root root     1099  321 08:32 certificate.pem
-rw-r-----  1 pi   root      203  321 08:32 arduino-connector.cfg
-rw-r--r--  1 pi   pi        445  321 08:32 arduino-connector.log

 ログにはインストール時のものと思われるログが記録されています。 MQTT のサーバとしては AWS IoT を使っているっぽいです。

$ cat arduino-connector.log 
Version: 1.0.94
Generate private key
Generate csr
Request certificate
Request mqtt url
Write conf to arduino-connector.cfg
Check successful mqtt connection
setupMQTT certificate.pem certificate.key akanuma:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx xxxxxxxxxxxxxx.iot.us-east-1.amazonaws.com
WARN: memstore.go:137: [store]    memorystore wiped
WARN: net.go:328: [net]      errorWatch stopped
WARN: net.go:318: [net]      logic stopped
Setup completed

 設定ファイルは下記のような内容で作成されていました。

$ cat arduino-connector.cfg 
id=akanuma:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
url=xxxxxxxxxxxxxx.iot.us-east-1.amazonaws.com
http_proxy=
https_proxy=
all_proxy=
authurl=https://hydra.arduino.cc/
apiurl=https://api2.arduino.cc

スケッチの実行

 Arduino Cloud にデバイスを登録すると、 Arduino Uno 等の Arduino ボードと同様に、 Web Editor からスケッチをフラッシュして実行させることができます。そのデバイスがオンラインであれば Web Editor の接続先ボードとして選択できるようになりますので選択します。

f:id:akanuma-hiroaki:20180322072428p:plain

 今回はとりあえず下記のような Lチカのスケッチで試してみます。

const int ledPin = 12; // GPIOピン番号ではなく物理ピン番号

void setup()
{
  pinMode(ledPin, OUTPUT);
}

void loop()
{
  digitalWrite(ledPin, HIGH);
  delay(1000); // Wait for 1000 millisecond(s)
  digitalWrite(ledPin, LOW);
  delay(1000); // Wait for 1000 millisecond(s)
}

 上記コードを用意したら Arduinoボードの時と同様に、 Verify ボタンでコンパイル可能か確認して問題なければ Upload ボタンで Raspberry Pi にスケッチをアップロードして実行します。成功すると下記のように Web Editor のコンソールに Raspberry Pi で実行されているプロセスの ID が出力されます。

f:id:akanuma-hiroaki:20180322073650p:plain

 Raspberry Pi 上で確認してみると、確かにその PID でスケッチが実行されています。

$ ps aux | grep 1474 | grep -v grep
root      1474  0.1  0.2   4340  2520 pts/2    Ss+  22:35   0:00 /home/pi/sketches/CoolDensor1

 アップロードからLチカ実行の様子は下記動画のようになります。

 さらにプロセスの実行/停止もWeb上から操作できます。 Web Editor の RUN/STOP ボタンをクリックします。

f:id:akanuma-hiroaki:20180322075604p:plain

 すると登録済みのスケッチのリストと、各スケッチの実行状況がトグルボタンで表示されますので、このトグルを切り替えることでプロセスの実行/停止を行うことができます。

f:id:akanuma-hiroaki:20180322075620p:plain

 操作してみた様子は下記動画の通りです。トグルの切り替えでLチカの実行/停止を操作することができています。

まとめ

 Raspberry Pi 側では初期セットアップさえ終わっていれば、簡単に Arduino Cloud に登録できますし、登録してしまえば Raspberry Pi 側で直接操作することなく、他の Arduino ボードと同様に Web Editor から触ることができて便利ですね。 Arduino 以外にも mbed をはじめ、各社がクラウド環境でのプラットフォームを提供するようになってきていますが、それぞれできることが違っているので、デバイスを選定する場合はボード自体の機能だけでなく、プラットフォームの内容も含めて検討するのが良さそうです。