// 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 = "192.168.11.11"; // "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"]; }