#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_MPU6050.h>
#include <DHT.h>
#include <WiFi.h>
#include <PubSubClient.h>
// กำหนดขา DHT22 และชนิดของ DHT22
#define DHTPIN 15
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
Adafruit_MPU6050 mpu;
// ข้อมูลสำหรับเชื่อมต่อ WiFi
const char* ssid = "Wokwi-GUEST";
const char* password = "";
// ข้อมูลสำหรับเชื่อมต่อ MQTT Broker
const char* mqtt_server = "good-moose.com";
const int mqtt_port = 1883;
WiFiClient espClient;
PubSubClient client(espClient);
void setup() {
Serial.begin(115200);
// เริ่มต้นเซนเซอร์ DHT22
dht.begin();
// เริ่มต้นเซนเซอร์ MPU6050
if (!mpu.begin()) {
Serial.println("MPU6050 ไม่สามารถเริ่มต้นได้");
while (1);
}
// เชื่อมต่อ WiFi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.println("กำลังเชื่อมต่อ WiFi...");
}
Serial.println("เชื่อมต่อ WiFi สำเร็จ");
// ตั้งค่า MQTT Broker
client.setServer(mqtt_server, mqtt_port);
}
void loop() {
if (!client.connected()) {
reconnect();
}
client.loop();
// อ่านข้อมูลจาก DHT22
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
// อ่านข้อมูลจาก MPU6050
sensors_event_t a, g, temp;
mpu.getEvent(&a, &g, &temp);
String payload = "{";
payload += "\"student_information\": [{";
payload += "\"student_id1\": \"019-2\", \"name1\": \"ดนัย\", \"surname1\": \"จองคำ\"},";
payload += "{\"student_id2\": \"023-4\", \"name2\": \"นรินทร์ดา\", \"surname2\": \"ศักดิ์กายแน\"}],";
payload += "\"sensor_data\": {\"DHT22\": {\"humidity\": \"" + String(humidity) + "\", \"temperature\": \"" + String(temperature) + "\"},";
payload += "\"MPU6050\": {\"gyroscope_x\": \"" + String(g.gyro.x) + "\", \"gyroscope_y\": \"" + String(g.gyro.y) + "\", \"gyroscope_z\": \"" + String(g.gyro.z) + "\"}}}";
// ส่งข้อมูลผ่าน MQTT
if (!client.connected()) {
reconnect();
}
client.publish("/ENGAE110/019_2,023_4", payload.c_str());
delay(2000);
}
void reconnect() {
// ฟังก์ชันเชื่อมต่อกับ MQTT Broker ใหม่เมื่อขาดการเชื่อมต่อ
while (!client.connected()) {
Serial.print("กำลังเชื่อมต่อกับ MQTT Broker...");
if (client.connect("ESP32Client")) {
Serial.println("เชื่อมต่อสำเร็จ");
} else {
Serial.print("การเชื่อมต่อล้มเหลว, rc=");
Serial.print(client.state());
Serial.println(" รอ 5 วินาทีแล้วลองใหม่");
delay(5000);
}
}
}