はじめに
機材
ArduinoYun
設定など,以下を参考にしてもらえれば
http://qiita.com/tkyko13/items/495b4b1bdc2d4eb00d0a
Milkcocoa
https://mlkcca.com/
Arduinoライブラリ
これらはArduinoIDEからの「ライブラリの管理」からも探せると思います.
・arduino-mqtt
https://github.com/256dpi/arduino-mqtt
Adafruitの方のライブラリもあったが,自分は失敗したのでこっちを利用
・arduinoJson
https://github.com/bblanchon/ArduinoJson
これは,最悪なくてもテストはできます.
参考サイト
・milkcocoaにmqttで送る場合の注意点など
http://blog.mlkcca.com/iot/milkcocoa-mqtt/
サンプルコード
ArduinoMqttライブラリ内の例に,参考URL先を参考に少しいじった感じ
# include <ArduinoJson.h>
# include <Bridge.h>
# include <YunClient.h>
# include <MQTTClient.h>
# include <Console.h>
# define APP_ID ".....app id....."
# define USER_NAME "sdammy"
# define CLINET_ID "jsclientid01"
# define SERVER APP_ID ".mlkcca.com"
# define PORT 1883
YunClient net;
MQTTClient client;
unsigned long lastMillis = 0;
void setup() {
Bridge.begin();
Console.begin();
client.begin(SERVER, PORT, net);
connect();
}
void connect() {
Console.print("connecting...");
while (!client.connect(CLINET_ID, USER_NAME, APP_ID)) {
Console.print(".");
delay(1000);
}
Console.println("\nconnected!");
// サブスクライブ設定しなくても送信エラーメッセージをmessageReceived関数で受け取れた
// client.subscribe("/example");
}
void loop() {
client.loop();
if (!client.connected()) {
connect();
}
// 5秒ごとに送信
if (millis() - lastMillis > 5000) {
lastMillis = millis();
// 送信JSONデータ作成
DynamicJsonBuffer jsonBuffer;
JsonObject& root = jsonBuffer.createObject();
JsonObject& params = root.createNestedObject("params");
params["fromYun"] = 1;
params["Hello"] = "World";
String rootStr;
root.printTo(rootStr);
Console.print("publish: ");
Console.println(rootStr);
// パブリッシュ!!
client.publish(APP_ID "/message/push", rootStr);
}
}
// メッセージ受信関数 今回は成功すると通らない
void messageReceived(String topic, String payload, char * bytes, unsigned int length) {
Console.print(topic);
Console.print(" - ");
Console.print(payload);
Console.println();
}
「.....app id.....」はそれぞれのmilkcocoaのアプリIDに
今回は,2017年2月現在の段階でのmilkcocoaのデフォルトの設定で動くようになってるはずです.(登録はもっと前なのでデフォルトかどうか不安ですが設定いじってはいない)
参考URLでもあった注目点,注意点
・ユーザー名をsdammyに
・パスワードをアプリIDに
・クライアントIDを指定できるmqtt関数を実行して,そのIDは適当に,そして他のクライアントとかぶらないように
・その他,ArduinoMqttライブラリにあるYunMQTTClientを利用したら接続できなかった
・送信フォーマットはJSONのみ(今のところ)
・送信データはparams内に収める
・送信するときのトピックは"アプリID/任意/push"
こんな感じでできました