FJCT_ニフクラ mobile backend(mBaaS)お役立ちブログ

スマホアプリ開発にニフクラ mobile backend(mBaaS)。アプリ開発に役立つ情報をおとどけ!

Arduino YÚNから直接mBaaSにデータをアップロードする

Arduinoはよく知られた小型マイコンで、IoT分野でもよく使われています。そんなArduinoの弱点とも言えたのがネットワーク機能ですが、Arduino YÚNは無線LANと有線LANを備えており、利用範囲が一気に広がったマイコンとなっています。

Arduino YÚNのネットワーク部分は実は組み込み用Linuxで提供されています。そこにはSSHでログインし、ある程度自由にカスタマイズも可能となっています。

そこで今回はArduino IDEで作ったらスケッチから、Linux部分のコマンドを呼び出してmBaaSにデータをアップロードする方法を紹介します。

Linux環境の設定

前述の通り、まずSSHでログインします。ユーザ名はrootで、パスワードはArduino YÚNの初期設定時に指定したものです。

ssh root@arduino.local

ログインして確認すると分かりますが、プログラミング言語としてはLuaまたはPythonがインストールされています。そこで今回はサードパーティ製のNCMBライブラリを利用します。

インストールにはpipが必要なのですがデフォルトでは入っていませんので、インストールします。その後、py_nifty_cloudをインストールします。

# opkg update  
Downloading http://downloads.arduino.cc/openwrtyun/1/packages/Packages.gz.
  :
Configuring distribute.
# opkg install python-openssl
  :
Configuring python-openssl.
# easy_install pip 
Searching for pip
  :
Finished processing dependencies for pip
# pip install py_nifty_cloud
Collecting py-nifty-cloud
  :
  InsecurePlatformWarning

なお、py_nifty_cloudのサポートバージョンはPython 2.7.7ですが、Arduino YÚNに入っているのはPython 2.7.3です。一応動くのですが、保証はありませんのでご注意ください。

設定ファイルの作成

まず設定ファイルを作成します。

# cat nifty_cloud.yml

APPLICATION_KEY: '120...e76d'
CLIENT_KEY: 'b5f...4c8'

アプリケーションキー、クライアントキーともにmBaaSの管理画面にて確認、置き換えてください。

そしてテスト用のスクリプトになります。こんな簡単なものになります。

# cat test.py

#import
from py_nifty_cloud.nifty_cloud_request import NiftyCloudRequest
 
# instanciate with yaml file contains APPLICATION KEY and CLIENT KEY
ncr = NiftyCloudRequest('/tmp/nifty_cloud.yml')
path = '/classes/TestClass'
method = 'POST'
 
# post a new recode
values = {'key': 'test'}
response = ncr.post(path=path, query=values)
print(response.status_code)

これを実行してみます。

# python test.py
    :
  InsecurePlatformWarning
201

このように表示されればOKです。mBaaSの管理画面にてログインすると、実際にデータが保存できているのが確認できるはずです。

Processingからの実行

では次に考えるのがArduino IDEで使えるProcessingからの実行です。これはProcessオブジェクトのShellCommandを使って行います。例えば次のようなスケッチを書きます。

#include <Bridge.h>
#include <Process.h>

void setup() {
  // put your setup code here, to run once:
  Bridge.begin();
  Serial.begin(9600);

  while (!Serial);
}

void loop() {
  // put your main code here, to run repeatedly:
  Process p;
  p.runShellCommand("/usr/bin/python /tmp/test.py");
  while(p.running());
  while (p.available()) {
    int result = p.parseInt();
    Serial.println(result);     
  } 
  delay(5000); 
}

これを実行すると、シリアルモニターにログが流れていきます。約10秒ごとにデータがmBaaSに追加されていくのが確認できるはずです。

後はPythonのコードを実行する際に引数としてセンサーの値を渡してあげればいいだけです。そうすればセンサーからの取得はProcessingで簡単に、その値はPythonで操作といった仕組みも簡単にできます。何よりArduino本体のメモリでは難しかったHTTPSの扱いもLinux側であれば何も気にすることなく実現します。


ArduinoとmBaaSの連携は複雑そうに見えましたが、Linux側の環境を使うことで容易にできることが分かりました。クラウドサービスが使えるようになれば、Arduinoを使ったIoTの可能性が大きく広がるのではないでしょうか。