// MQTT Publisher example //#include <M5StickCPlus.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 = "m5stickc01_00000002"; //デバイス個別に設定すればなんでもよい 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アドレス mqttClient.setServer(server, port); if ( !mqttClient.connected() ) { Serial.println("Try connecting MQTT ..."); reconnect(); } // 参考:WiFiデバイスのMACアドレスを取得し、送信する uint8_t mac[6]; esp_read_mac(mac, ESP_MAC_WIFI_STA); char mbuf[100]; sprintf(mbuf, "Message from %02X:%02X:%02X:%02X:%02X:%02X", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5] ); mqttClient.publish( pubTopic , mbuf ); // MQTT publish message Serial.println(mbuf); //送信した内容をシリアルに表示して確認 Serial.println("publishするメッセージをSerialから送信してください"); } 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 ); mqttClient.publish( pubTopic , mbuf ); // if ( !ret ){ // Serial.println("publish failed."); // } } 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()); } } }