DEV Community

Komsan Nurak
Komsan Nurak

Posted on

ESP32 WiFiManager MQTT ArduinoJson 7

#include <WiFi.h>
#include <WiFiManager.h>
#include <ArduinoJson.h>
#include <PubSubClient.h>

// ตั้งค่า WiFiManager
WiFiManager wm;

// ตั้งค่า MQTT
WiFiClient espClient;
PubSubClient client(espClient);
char mqtt_server[40];
char mqtt_port[6];

// ตั้งค่า JSON document
StaticJsonDocument<200> doc;

void setup() {
  Serial.begin(115200);

  // รีเซ็ตการตั้งค่า WiFi เมื่อกดปุ่มรีเซ็ตนาน 3 วินาที
  wm.resetSettings();

  // กำหนดค่าเริ่มต้นสำหรับการกำหนดค่าผ่าน WiFiManager
  WiFiManagerParameter custom_mqtt_server("server", "MQTT Server", "mqtt.example.com", 40);
  WiFiManagerParameter custom_mqtt_port("port", "MQTT Port", "1883", 6);
  wm.addParameter(&custom_mqtt_server);
  wm.addParameter(&custom_mqtt_port);

  bool res = wm.autoConnect("ESP32-AP");

  if (!res) {
    Serial.println("Failed to connect");
    // ไม่สามารถเชื่อมต่อ WiFi ให้เข้าสู่โหมด Deep Sleep
  } else {
    Serial.println("Connected to WiFi");

    // เก็บค่า MQTT Server และ Port จากการกำหนดค่าผ่าน WiFiManager
    strcpy(mqtt_server, custom_mqtt_server.getValue());
    strcpy(mqtt_port, custom_mqtt_port.getValue());

    // เชื่อมต่อ MQTT
    client.setServer(mqtt_server, atoi(mqtt_port));
    client.connect("ESP32-Client");
  }

  // เพิ่มข้อมูลลงใน JSON document
  doc["sensor"] = "BME280";
  doc["data"][0] = 24.5;
  doc["data"][1] = 65.2;

  // สร้าง JSON string จาก JSON document
  String output;
  serializeJson(doc, output);
  Serial.println(output);

  // ส่งข้อมูล JSON ไปยัง MQTT topic
  client.publish("sensors/data", output.c_str());
}

void loop() {
  // คงการเชื่อมต่อ MQTT
  client.loop();
}
Enter fullscreen mode Exit fullscreen mode

Top comments (0)