IoTとmBaaSは相性が良いというのは前回の記事で書きましたが、実際どういったことができるのか一例を紹介したいと思います。以前の記事でArduinoからプッシュ通知を行うというテクニックを紹介しましたが、その応用になります。
用意するもの
ハードウェアは次のように配線します。
Arduinoのコード
Arduinoのコードは次のようになります(一部です)。
void get(String message) { connecting = 1; // Make a TCP connection to remote host Serial.print("Performing HTTP GET of: "); Serial.println(server); if ( !client.connect(server, 80) ) { Serial.println("Error: Could not make a TCP connection"); } // Make a HTTP GET request client.println("GET /?m=" + message + " HTTP/1.1"); client.print("Host: "); client.println(server); client.println("Connection: close"); client.println(); Serial.println(); delay(3000); while(client.available()){ char c = client.read(); Serial.print(c); if ( !client.connected() ) { Serial.println("disconnected."); Serial.println(); //connecting = 0; // Close socket if ( !client.close() ) { Serial.println("Error: Could not close socket"); } break; } } client.close(); Serial.println("Finished WebClient test"); } void loop() { int ret, i; String s = ""; rcs620s.timeout = COMMAND_TIMEOUT; ret = rcs620s.polling(); if(ret && connecting == 0) { for(i = 0; i < 8; i++) { s.concat(rcs620s.idm[i]); } get(s); connecting = 0; } else { } Serial.println(""); delay(POLLING_INTERVAL); }
loop処理はArduinoが待機中に実行され続けます。この中でFelicaリーダーからデータの読み取りを行っています。
for(i = 0; i < 8; i++) { s.concat(rcs620s.idm[i]); }
そして8byte分のデータを読み取ったら、それをget関数に送っています。この処理は指定したURLをリクエストするだけです。Webアクセスしている間もloop関数が呼ばれますので、その間は処理をしないために connecting のフラグを立てています。
データを受け取ったサーバはニフティクラウドのプッシュ通知を作成しています。
class Server < Sinatra::Base get '/' do NCMB.initialize application_key: ENV['APPLICATION_KEY'] || "", client_key: ENV['CLIENT_KEY'] || "" @push = NCMB::Push.new @push.immediateDeliveryFlag = true @push.target = ['ios'] @push.message = params["m"] @push.deliveryExpirationTime = "3 day" if @push.save status 201 body '' else status 403 body '' end end end
アーキテクチャとしては次のようになります。
これらを実装した結果が次の動画になります。Pasmoをリーダーに読み取ってしばらくするとiPhoneにプッシュ通知が届くのが確認できます。この時にはUSBケーブルでつないでいますが、電源さえ確保できればポータブルに利用できます。
https://www.youtube.com/watch?v=orROiRVNf2k
今回はFelicaリーダーを使っていますので、同じような仕組みで会社の簡易出退勤システムもできそうです。プッシュ通知だけでなくデータストアを使って出勤、退勤のタイミングで記録することもできるでしょう。また、他のシールドを使うことで(スイッチや接触など)必要なタイミングでデータをニフティクラウド mobile backendに蓄積できます。
IoTデバイスから直接プッシュ通知を作成するというのは大変ですが、ニフティクラウド mobile backendを経由すればHTTPアクセス一つで済むようになります。IoTデバイスとスマートフォン、Webブラウザなどを連携させる際にはこのような手法を使ってみてはいかがでしょう。
なお今回のコードはGitHubにアップロードしてあります。動かないところがあったら参考にしてください。