// MQTT Publisher example //#include <M5StickCPlus.h> #include <WiFi.h> // ライブラリで PubSubClient をいれておく ★★★ 重要 ★★★ #include <PubSubClient.h> const char* ssid = "miura_asp_2g"; const char* password = "**********"; const char* server = "mqtt.istlab.info"; const int port = 1883; // 注:学内ネットワークからは上記ポート番号に接続できない。 const char* pubTopic = "office/temp"; //"ex1/groupXX/sensor";のようにして、他の班とかぶらないようにすること。 const char* mquser = "ex1"; const char* mqpass = "***PASSWORD***"; // 講義システム(三浦担当講義用)を参照すること。 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); if (!mqttClient.connected()) { Serial.println("Try (re)connecting..."); reconnect(); } } void loop() { // シリアルコンソールから書き込みがあれば, publishする byte mbuf[100]; int pos = 0; while (Serial.available()) { // ノンブロッキング mbuf[pos] = Serial.read(); pos++; } if (pos > 0) { mbuf[pos-1] = 0; //改行をNULLに置き換える Serial.println((char*)mbuf); // ブローカにデータを送信する。最後の false を true にすると、retained になる。 bool ret = mqttClient.publish(pubTopic, mbuf, pos-1, false); if (!ret){ Serial.println("publish failed."); } } delay(10); } void reconnect() { while (!mqttClient.connected()) { if (mqttClient.connect(clientid, mquser, mqpass)) { Serial.println("Connected to MQTT Broker."); } else { Serial.printf("Connect Failed. state=%d", mqttClient.state()); } } }