// MQTT Publisher example
//#include <M5StickCPlus.h>
#include <WiFi.h>
// ライブラリで PubSubClient をいれておく ★★★ 重要 ★★★
#include <PubSubClient.h>
const char* ssid = "miura2g";
const char* password = "jikken2022";
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());
}
}
}