#include <M5Unified.h> #include <WiFi.h> // ライブラリで PubSubClient をいれておく ★★★ 重要 ★★★ #include <PubSubClient.h> const char* ssid = "ics-ap"; const char* password = "jikkenics"; const char* server = "mqtt.istlab.info"; const int port = 1883; const char* pubTopic = "jikken"; // 班名を入れれば他の班とかぶらない。+にはしない。ex. jikken/A4han WiFiClient wifiClient; char* clientid = "m5scp2_001"; //デバイス個別に設定すればなんでもよい PubSubClient mqttClient(wifiClient); // MQTT Client char macaddr[100]; void setup() { auto cfg = M5.config(); cfg.serial_baudrate = 115200; M5.begin(cfg); M5.Display.setRotation(3); //横向き M5.Display.setFont(&fonts::lgfxJapanGothic_16); M5.Display.println("mqtt01pub"); M5.Display.setTextScroll(false); WiFi.begin(ssid, password); // 接続開始 while (WiFi.status() != WL_CONNECTED) { // 接続中... M5.Display.print("."); M5.delay(500); } // 接続完了!! M5.Display.fillScreen(CYAN); M5.Display.setCursor(0, 8, 4);//x,y,fonttype M5.Display.setTextColor(BLACK, CYAN); M5.Display.print(" Wifi Connected!\n"); String gotip = WiFi.localIP().toString(); // m5デバイスのIPアドレス M5.Display.println(gotip); mqttClient.setServer(server, port); if ( !mqttClient.connected() ) { Serial.println("Try connecting MQTT..."); reconnect(); } // 参考:WiFiデバイスのMACアドレスを取得し、送信する uint8_t mac[6]; WiFi.macAddress(mac); sprintf(macaddr, "%02X:%02X:%02X:%02X:%02X:%02X", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5] ); M5.Display.println(macaddr); M5.delay(2000); Serial.println("publishするメッセージをSerialから送信してください。またはAボタンを押してください。"); M5.Display.setFont(&fonts::lgfxJapanGothic_16); M5.Display.println("publishするメッセージをSerialから送信してください。またはAボタンを押してください。"); } void loop() { // シリアルコンソールから書き込みがあれば, publishする char mbuf[100]; int pos = 0; while ( Serial.available() ) { // ノンブロッキング mbuf[pos] = Serial.read(); pos++; } if (pos > 0) { mbuf[pos-1] = 0; //改行をNULLに置き換える Serial.println(mbuf); if ( !mqttClient.connected() ) reconnect(); // ブローカにデータを送信する。最後の false を true にすると、retained になる。 // boolean ret = mqttClient.publish( pubTopic , mbuf, size, false ); boolean ret = mqttClient.publish( pubTopic , mbuf ); if ( !ret ){ Serial.println("publish failed."); } } M5.update(); // ボタン読み取りの前にはupdateが必要 if (M5.BtnA.wasReleased()) { if ( !mqttClient.connected() ) reconnect(); boolean ret = mqttClient.publish( pubTopic , macaddr ); if ( !ret ){ Serial.println("publish failed."); } } M5.delay(50); } void reconnect() { while ( !mqttClient.connected() ) { if ( mqttClient.connect(clientid) ) { Serial.println("Connected to MQTT Broker."); } else { Serial.printf("Connect Failed. state=%d", mqttClient.state()); } } }