Newer
Older
M5StickCPlus_FactoryTest2022 / SampleSrc / mqtt01pub.ino
@motoki miura motoki miura on 19 Feb 2024 2 KB d
// MQTT Publisher example
//#include <M5StickCPlus.h>
#include <WiFi.h>
// ライブラリで PubSubClient をいれておく ★★★ 重要 ★★★
#include <PubSubClient.h>

const char* ssid = "miura2g";
const char* password = "jikkenics";

const char* server = "192.168.11.11"; // "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());
    }
  }
}