Wio LTE用Milkcocoaライブラリ

[Wio LTE](https://soracom.jp/products/wio_lte/)でも[Milkcocoa](https://mlkcca.com/)が使いたいということでArduino IDE向けのライブラリを作りました！

![image.png](https://qiita-image-store.s3.amazonaws.com/0/109992/adf9c890-a5af-a051-bd06-3893a3a86f76.png)


#作った経緯
[ESP8266用のライブラリ](https://github.com/milk-cocoa/Milkcocoa_ESP8266_SDK)がそのまま動くかなと思いきやコンパイルエラーが起きたので、それを解消したものをWio LTE用のライブラリとして公開しています。

[https://github.com/junichikatsu/Milkcocoa_Wio_LTE-master](https://github.com/junichikatsu/Milkcocoa_Wio_LTE-master)

#使い方
他のライブラリと同じようにZIP形式でダウンロードして、Arduino IDEでインポートすればライブラリとして取り込まれます。
以下のサンプルも同封しているのでArduino IDEのスケッチ例から選択すれば使用できます。

```arduino:
#include <WioLTEforArduino.h>
#include <WioLTEClient.h>
#include <stdio.h>
#include <Milkcocoa.h>

#define APN               "soracom.io"
#define USERNAME          "sora"
#define PASSWORD          "sora"


/************************* Your Milkcocoa Setup *********************************/

#define MILKCOCOA_APP_ID      "...YOUR_MILKCOCOA_APP_ID..."
#define MILKCOCOA_DATASTORE   "Wio_LTE"

/************* Milkcocoa Setup (you don't need to change this!) ******************/

#define MILKCOCOA_SERVERPORT  1883

/************ Global State (you don't need to change this!) ******************/

WioLTE Wio;
WioLTEClient WioClient(&Wio);

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

Milkcocoa milkcocoa = Milkcocoa(&WioClient, MQTT_SERVER, MILKCOCOA_SERVERPORT, MILKCOCOA_APP_ID, MQTT_CLIENTID);

void onpush(DataElement *elem) {
  SerialUSB.println("onpush");
  SerialUSB.println(elem->getInt("v"));
};

void setupLTE() {
  delay(200);

  SerialUSB.println("");
  SerialUSB.println("--- START ---------------------------------------------------");
  
  SerialUSB.println("### I/O Initialize.");
  Wio.Init();
  
  SerialUSB.println("### Power supply ON.");
  Wio.PowerSupplyLTE(true);
  delay(5000);

  SerialUSB.println("### Turn on or reset.");
  if (!Wio.TurnOnOrReset()) {
    SerialUSB.println("### ERROR! ###");
    return;
  }

  SerialUSB.println("### Connecting to \""APN"\".");
  delay(5000);
  if (!Wio.Activate(APN, USERNAME, PASSWORD)) {
    SerialUSB.println("### ERROR! ###");
    return;
  }
}

void setup() {
  Serial.begin(115200);
  delay(10);
  
  SerialUSB.println(F("Milkcocoa SDK demo"));

  setupLTE();

  SerialUSB.println( milkcocoa.on(MILKCOCOA_DATASTORE, "push", onpush) );
};

void loop() {
  milkcocoa.loop();

  DataElement elem = DataElement();
  elem.setValue("v", 1);

  milkcocoa.push(MILKCOCOA_DATASTORE, &elem);
  delay(7000);
};

```

MilkcocoaのAPP IDを入力すれば、pushと通知が確認できます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/109992/612dc8f6-7a78-b3df-e53d-fe258ab78b30.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/109992/9e224d9e-21a3-2c0e-91e9-570df6f846b9.png)

Milkcocoaはリアルタイムにデータの更新、保存、通知ができるサービスです。使い方は[チュートリアル](https://mlkcca.com/tutorial/page2.html)を参考にしてください。

#最後に
`setup()`の最初に`Serial.begin(115200);`を行っていますが、本来は不要のはずです。ですが、なぜかこれが無いと動作しないので入れています。とりあえず問題なく動作するので公開しました。自分でも調査中ですがもし原因がわかった方がいらっしゃれば修正版のプルリク投げてください～。
次は[JavaScript版](https://qiita.com/jksoft/items/8bc68921de823fb35c01)も作りたいと思っています。