// 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 = "office/temp"; //"ex1/groupXX/sensor";のようにして、他の班とかぶらないようにすること。
const char* mquser = "ex1";
//const char* mqpass = "***PASSWORD***"; // 講義システム(三浦担当講義用)を参照すること。
const char* mqpass = ""; // 講義システム(三浦担当講義用)を参照すること。
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());
}
}
}