milkcocoa
ESP32
ESP-WROOM-32

ESP32(ESP-WROOM-32)でMilkcocoaSDKを使う

ESP32でMilkcocoaを使った例がなかったのでメモ

皆さんどうも。お久しぶりです。306です。大学生というモラトリアム期間も終わり、社畜になりました

さて、弊社では事業でIoTやっていないのですが個人で勝手にやっています。

今回はESP32を入手したので、これにMilkcocoaを乗っけて遊ぼうと思ったんですが、ESP02の例は多くあるものの、ESP32の例(そもそもSDKがESP32向けに提供されていない)がなかったので、ESP8266のMilkcocoaSDK使ってみようという試みです。
結論から言うと幾つかソースコードとライブラリを変えれば大丈夫でした。
ArduinoIDEでESP32で使えるようにする部分とMilkcocoaSDKを導入する部分は省略します。
ライブラリは/Users/foo/Documents/Arduino/libraries/Milkcocoa_Arduino_SDK-master/Adafruit_MQTT.cppを(パスはMacの場合です。他のOSは知りません。)修正します。

#include "include/Adafruit/Adafruit_MQTT.h"

#if defined(ARDUINO_ARCH_AVR)
#define strncasecmp strncasecmp_P
#define strncpy strncpy_P
#else
//#include "avr/dtostrf.h" //=>ここをコメントアウト
#endif

チュートリアルのサンプルを書き換えると以下のようにすれば大丈夫でした。

#include <Milkcocoa.h>
#include <WiFi.h>

#define MILKCOCOA_APP_ID      "hogehoge"
#define MILKCOCOA_SERVERPORT  1883
#define MILKCOCOA_DATASTORE   "esp32"

const char MQTT_SERVER[] PROGMEM    = MILKCOCOA_APP_ID ".mlkcca.com";
const char MQTT_CLIENTID[] PROGMEM  = __TIME__ MILKCOCOA_APP_ID;

WiFiClient client;
Milkcocoa milkcocoa = Milkcocoa(&client, "milkcocoa_app_id.mlkcca.com", 1883, "milkcocoa_app_id", "mqtt_client_id");

const char* ssid     = "SSID";
const char* password = "WIFI_PASS";

void setup(){
  Serial.begin(115200);
  delay(10);

  // We start by connecting to a WiFi network

  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);

  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.println("");
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
}

void loop(){
  // 以下をloopの中で必ず実行します
  milkcocoa.loop();

  // データ格納用のオブジェクトです
  DataElement elem = DataElement();

  // 以下のようにkey, valueを設定していきます。
  elem.setValue("name", "Milk");
  elem.setValue("age", 35);

  // データストア名を指定して、データをpushもしくはsendします
  milkcocoa.push(MILKCOCOA_DATASTORE, &elem);
  // or
  milkcocoa.send(MILKCOCOA_DATASTORE, &elem);
}