#include "DHT.h"
#include <PubSubClient.h>
#include <WiFi.h>
// กำหนดค่า DHT22
#define DHTPIN 14
#define DHTTYPE DHT22
// กำหนดค่า WiFi
const char* ssid = "Wokwi-GUEST";
const char* password = "";
// กำหนดค่า MQTT
const char* mqttServer = "broker.hivemq.com";
const int mqttPort = 1883;
const char* mqttUser = "";
const char* mqttPassword = "";
// สร้าง WiFi และ MQTT client
WiFiClient wifiClient;
PubSubClient mqttClient(wifiClient);
// กำหนดค่าอุปกรณ์
const char* deviceName = "esp32_01"; // ชื่ออุปกรณ์
// สร้างค่า Topics ที่แตกต่างกันตาม deviceName
String topic_devicename = "itkps/lab/sensor/" + String(deviceName) + "/devicename";
String topic_temperature = "itkps/lab/sensor/" + String(deviceName) + "/temperature";
String topic_humidity = "itkps/lab/sensor/" + String(deviceName) + "/humidity";
DHT dht(DHTPIN, DHTTYPE);
void setup_wifi() {
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nWiFi connected.");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
}
void reconnectMQTT() {
while (!mqttClient.connected()) {
Serial.print("Attempting MQTT connection...");
String clientId = "ESP32Client-" + String(random(0xffff), HEX);
if (mqttClient.connect(clientId.c_str(), mqttUser, mqttPassword)) {
Serial.println("Connected to MQTT Broker");
// ส่งค่า deviceName ไปยัง MQTT Broker
if (mqttClient.publish(topic_devicename.c_str(), deviceName)) {
Serial.println("Published device name successfully");
} else {
Serial.println("Failed to publish device name");
}
} else {
Serial.print("Failed, rc=");
Serial.print(mqttClient.state());
Serial.println(" Trying again in 5 seconds...");
delay(5000);
}
}
}
void setup() {
Serial.begin(115200);
setup_wifi();
mqttClient.setServer(mqttServer, mqttPort);
dht.begin();
}
void loop() {
if (!mqttClient.connected()) {
reconnectMQTT();
}
mqttClient.loop();
// อ่านค่าอุณหภูมิและความชื้น
float t = dht.readTemperature();
float h = dht.readHumidity();
if (isnan(t) || isnan(h)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
// แสดงค่าที่กำลังจะส่งออกไป
Serial.print("Publishing Temperature: ");
Serial.println(t);
Serial.print("Publishing Humidity: ");
Serial.println(h);
// ส่งค่าไปยัง MQTT Broker และตรวจสอบว่าการส่งสำเร็จหรือไม่
if (mqttClient.publish(topic_temperature.c_str(), String(t).c_str())) {
Serial.println("Temperature published successfully");
} else {
Serial.println("Failed to publish temperature");
}
if (mqttClient.publish(topic_humidity.c_str(), String(h).c_str())) {
Serial.println("Humidity published successfully");
} else {
Serial.println("Failed to publish humidity");
}
delay(2000);
}