// MQTT Subscriber example
// #include <M5StickCPlus.h>
#include <WiFi.h>
// ライブラリで PubSubClient をいれておく ★★★ 重要 ★★★
#include <PubSubClient.h>
// ライブラリで ArduinoJson v6.xをいれておく ★★★ 重要 ★★★
// (注意:Arduino_Json v0.1.0 は別物)
#include <ArduinoJson.h>
const char* ssid = "ics-ap";
const char* password = "jikkenics";
const char* server = "mqtt.istlab.info";
const int port = 1883;
const char* pubTopic = "+"; // 例: ex1/groupXX/sensor
WiFiClient wifiClient;
char* clientid = "m5stickc01_00000001"; //デバイス個別に設定すればなんでもよい
PubSubClient mqttClient(wifiClient); // MQTT Client
void setup() {
// M5.begin();
Serial.begin(115200);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) { // 接続中...
Serial.print(".");
delay(200);
}
Serial.println( WiFi.localIP().toString() ); //取得したIPアドレス
// 参考:WiFiデバイスのMACアドレスを取得し、clientid として用いる
// (18行目のclientidの定義を変更し、char clientid[20]とするのがのぞましい)
// uint8_t mac[6];
// esp_read_mac(mac, ESP_MAC_WIFI_STA);
// sprintf(clientid, "%02X:%02X:%02X:%02X:%02X:%02X",
// mac[0], mac[1], mac[2], mac[3], mac[4], mac[5] );
mqttClient.setServer(server, port);
mqttClient.setCallback(callback_on_subscribe);
if (!mqttClient.connected()) {
Serial.println("Try (re)connecting...");
reconnect();
}
mqttClient.subscribe(pubTopic);
}
void loop() {
mqttClient.loop(); // データがpublishされたら、callback_on_subscribe が呼ばれる
delay(100);
}
void reconnect() {
while (!mqttClient.connected()) {
if (mqttClient.connect(clientid)) {
Serial.println("Connected to MQTT Broker.");
} else {
Serial.printf("Connect Failed. state=%d", mqttClient.state());
}
}
}
// データがPublishされたら、ここが実行される。(39行目でコールバック関数を設定しているため)
void callback_on_subscribe(char* topic, byte* payload, unsigned int len) {
char buf[100];
Serial.print("Message arrived [");
Serial.print(topic);
Serial.print("] ");
for (int i = 0; i < len ; i++) {
buf[i] = (char)payload[i];
}
buf[len] = 0;
Serial.println(buf);
return;
// 参考:JSON Parsing example
// StaticJsonDocument<200> sjdoc;
// deserializeJson(sjdoc, buf);
// int intval = sjdoc["intval"];
// const char* str = sjdoc["string"];
}