Simple IoT Board x Milkcocoa

Simple IoT Board x Milkcocoa

じぇーけーそふと
じぇーけーそふと (ID1705) 公認maker 2015/12/25
0

本記事はmbed Advent Calendar 2015の25日目の記事です。

最近、MilkcocoaというIoT向けWebサービスに簡単にアクセスできるmbed用のライブラリを作りました。
Simple IoT Boardを使ってMilkcocoaライブラリの使い方を紹介します。

Milkcocoaとは

Milkcocoaとはデータの保存や取得などができるWebサービスです。
Simple IoT Boardからセンサーの情報をMilkcocoaにアップロードしたり、その情報を受け取ったりすることができます。
ユーザー登録するだけで、使用できるので自分でサーバを用意するより手軽です。
(同時接続数とデータ数の違いで無料プランと有料プランがあります。)

詳しくは次のURLを参照してください。

https://mlkcca.com/

ユーザー登録

まずはMilkcocoaを使うためにユーザー登録をします。
トップページの右上にある「無料登録」をクリックします。

メールアドレスとパスワードを入れるとメールが来るので、メールに書いてあるURLにアクセスしてユーザー登録を完了します。

今度は、「ログイン」をクリックして、登録したメールアドレスとパスワードを入れてログインします。

次のような画面が出てくるので、「新しいアプリを作る」をクリックします。

アプリの名前を求められるので、半角16文字以内で適当なものを入力します。

するとアプリリストに作成したものが追加されます。
ここで「app_id:」の後ろに書かれている文字列をメモしておきます。

アプリをクリックするとdashboard画面に行きます。
後ほど、データストアの画面を確認しますので、残しておいてください。

Simple IoT Board側の準備

サンプルプログラムを公開しているので、ちょっと設定するだけでとりあえず動きます。
次のURLからインポートしてください。

https://developer.mbed.org/users/jksoft/code/MilkcocoaSampleESP8266/

インポートしたらmain.cppの以下の部分を設定します。

SSIDとPASSはWi-Fi環境に合わせて入力してください。
...YOUR_MILKCOCOA_APP_ID...には先ほどメモした「app_id:」の後ろに書かれていた文字を入力してください。

とりあえず動かす設定はこれだけです。
プログラムを書き込んで動かしてみます。

30秒ぐらいしてからMilkcocoaのdashboardのデータストア画面を開いてください。
「データストアを選択」というリストボックスに「esp8266」という項目が出てくると思います。
(出てこない場合はリストボックス右の更新ボタンを押してください)

次にリスト表示(更新)をクリックすると次のようにでてきます。

このValueに書かれているのが、Simple IoT Boardから送った値です。
JSON形式のデータになっています。

実際に送っている箇所はmain.cppのwhile(1)ループの中の以下の箇所です。

DataElement elem = DataElement();
elem.setValue("v", 1);
		
milkcocoa.push(MILKCOCOA_DATASTORE, elem);
wait(7.0);

サンプルではIDがvで1という値をセットして7秒おきに送っています。

例えばセンサーの値を送りたければ、以下のように書けば良いと思います。

DataElement elem = DataElement();

float value = GetSensorValue();

elem.setValue("SensorValue", value);

プログラムを動かしている時にシリアルコンソールで見ると次のように表示されていると思います。

これはMilkcocoaに送った瞬間に通知を受けて値を受け取っています。
サンプルでは、データを送るプログラムと受け取るプログラムを両方書いてあるので、送って、受けてるわけです。
1台でやってはあまり意味ないですが、2台用意すれば送るプログラムと受け取るプログラムをそれぞれかけば1台が送って1台が受け取るというのが離れた場所でもできます。

送った値の通知を受けて受け取っているプログラムは、次の部分で設定しています。

pc.printf("%d\n\r",milkcocoa.on(MILKCOCOA_DATASTORE, "push", onpush));

ESP8266というデータストアに"PUSH"された場合にonpush関数をコールするようにしています。

そして、onpush関数では以下のように値を受け取って受け取ったID vの値を表示するようにしています。

void onpush(MQTT::MessageData& md)
{
    MQTT::Message &message = md.message;
    DataElement de = DataElement((char*)message.payload);
    pc.printf("onpush\n\r");
    pc.printf("%d\n\r",de.getInt("v"));
}

サンプルでは"push"を使ってデータを送って受け取りますが、"send"を使えばデータストアに保存はされず、値の受け渡しのみ行われます。このメソッドも関数を用意してありますので、送信と受信の設定を以下のように置き換えればOKです。

// sendを受ける設定
pc.printf("%d\n\r",milkcocoa.on(MILKCOCOA_DATASTORE, "send", onpush));

// sendでデータを送る
milkcocoa.send(MILKCOCOA_DATASTORE, elem);

Milkcocoaを介したデータの送受はMQTTプロトコルが使われているため、かなりリアルタイムにデータの送受ができます。

1台はボタンを押すとMilkcocoaにsendし、もう1台はsendの通知を受け取るとLEDがON/OFFするプログラムを試した動画が次になります。

https://www.youtube.com/watch?v=_85teqcKWYc

もちろんSimple IoT Boradから送ったデータはWebアプリでも受け取れますし、Webアプリで送ったデータをSimple IoT Boardで受け取ることもできます。


本記事のトップの絵はSimple IoT BoardにGroveの心拍センサを取り付け、心拍数をMilkcocoaにpushし、Webアプリで受け取って心拍数を表示したところです。

Milkcocoaをちょっと使ってみて、いろいろ応用できそうなので今回、mbed用のライブラリを作りました。
本記事で紹介したESP8266用のライブラリとmbed LPC1768等の有線LANでも使えるEthernetIFに対応したライブラリも作りました。

https://developer.mbed.org/teams/Milkcocoa/wiki/Sample-Program-library

是非、試してみてください。

また、SImple IoT Boardを使ったワークショップをまた2月27日に行います。
ご興味ある方は是非。
https://mbed.doorkeeper.jp/events/36641


mbedネタのブログリレーmbed Advent Calendar 2015もクリスマスである本日で最後です。どのブログもとても参考になりそうです。
今年もカレンダーを作ってくださったmia_0032さんありがとうございました。

それではメリークリスマス!

参考にしてくれた記事

記事が登録されていません。
この記事を参考にして、新しく記事を投稿しよう!

違反について