LoginSignup
2

More than 5 years have passed since last update.

ArduinoYunからMilkcocoaへデータ送受信

Posted at

はじめに

機材

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先を参考に少しいじった感じ

ArduinoYun_MQTTClientMilkcocoa.ino

#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"

こんな感じでできました

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2