#include <WiFi.h>
#include <PubSubClient.h>
float temperature;
float humidity;
String messageString;
float as;
float cd;
const char * MQTTServer = "broker.hivemq.com";
const char * MQTT_Topic_nhan ="pt/dl";
const char * MQTT_Topic1 = "pt/nhietdo";
const char * MQTT_Topic2 ="pt/doam";
const char * MQTT_Topic3 ="pt/anhsang";
const char * MQTT_Topic4 ="pt/chuyendong";
const char * MQTT_ID = "mqttx_7e7c4ab4";
int Port = 1883;
WiFiClient espClient;
PubSubClient client(espClient);
void WIFIConnect() {
Serial.println("Connecting to SSID: Wokwi-GUEST");
WiFi.begin("Wokwi-GUEST", "");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.print("WiFi connected");
Serial.print(", IP address: ");
Serial.println(WiFi.localIP());
}
void MQTT_Reconnect() {
while (!client.connected()) {
if (client.connect(MQTT_ID)) {
Serial.print("MQTT Topic: ");
Serial.print(MQTT_Topic1);
// Đăng ký chủ đề nhận dữ liệu từ web
client.subscribe(MQTT_Topic_nhan);
Serial.print(" connected");
} else {
Serial.println("failed, rc=");
Serial.println(client.state());
Serial.println(" try again in 5 seconds");
delay(5000);
}
}
}
void callback(char* topic, byte* message, unsigned int length) {
Serial.print("Message arrived on topic: ");
Serial.println(topic);
Serial.print("Message: ");
messageString = "";
for (int i = 0; i < length; i++) {
Serial.print((char)message[i]);
messageString += (char)message[i];
}
Serial.println();
}
void setup() {
Serial.begin(9600);
WIFIConnect();
// client.subscribe(MQTT_Topic_nhan);
client.setServer(MQTTServer, Port);
// client.setCallback(callback);
}
void loop() {
if (!client.connected()) {
MQTT_Reconnect();
}
client.loop();
temperature = random(10,50);
humidity = random(10,50);
as = random(10,50);
cd = random(10,50);
// Gửi nhiệt độ & độ ẩm lên MQTT Broker
String a = String(temperature);
String b = String(humidity);
String c = String(as);
String d = String(cd);
Serial.println("Nhiệt độ: ");
Serial.println(temperature);
Serial.println("Độ ẩm: ");
Serial.println(humidity);
Serial.println("Ánh sáng: ");
Serial.println(as);
Serial.println("Chuyển động: ");
Serial.println(cd);
delay(500);
client.publish(MQTT_Topic1,a.c_str());
client.publish(MQTT_Topic2,b.c_str());
client.publish(MQTT_Topic3,c.c_str());
client.publish(MQTT_Topic4,d.c_str());
delay(1000);
}
// <!DOCTYPE html>
// <html lang="en">
// <head>
// <meta charset="UTF-8">
// <meta http-equiv="X-UA-Compatible" content="IE=edge">
// <meta name="viewport" content="width=device-width, initial-scale=1.0">
// <script src="https://cdnjs.cloudflare.com/ajax/libs/paho-mqtt/1.0.1/mqttws31.min.js" type="text/javascript"></script>
// <script src="https://code.jquery.com/jquery-3.6.1.min.js" type="text/javascript"></script>
// <title>REAL-TIME SENSOR</title>
// <style>
// body {
// font-family: Arial, sans-serif;
// display: flex;
// flex-direction: column;
// align-items: center;
// height: 100vh;
// margin: 0;
// justify-content: center;
// }
// h1 {
// text-align: center;
// margin-bottom: 20px;
// }
// .sensor-container {
// display: flex;
// gap: 20px;
// margin-top: 20px;
// justify-content: center;
// }
// .sensor-box {
// padding: 20px;
// border-radius: 5px;
// width: 150px;
// text-align: center;
// }
// .temperature {
// background-color: white;
// border: 2px solid #ccc;
// }
// .humidity {
// background-color: #f0f0f0;
// }
// .wind {
// background-color: #4CAF50;
// color: white;
// }
// .pressure {
// background-color: #f44336;
// color: white;
// }
// .value {
// font-size: 2em;
// }
// </style>
// </head>
// <body>
// <h1>REAL-TIME SENSOR</h1>
// <div class="sensor-container">
// <div class="sensor-box temperature">
// <h3 id="temperature" class="value">30 °C</h3>
// <p>Temperature</p>
// </div>
// <div class="sensor-box humidity">
// <h3 id="humidity" class="value">80%RH</h3>
// <p>Air humidity</p>
// </div>
// <div class="sensor-box wind">
// <h3 id="wind" class="value">100m/s</h3>
// <p>Wind speed</p>
// </div>
// <div class="sensor-box pressure">
// <h3 id="pressure" class="value">1100hPa</h3>
// <p>Mean pressure</p>
// </div>
// </div>
// <script>
// var client = new Paho.MQTT.Client("broker.hivemq.com", 8000, "clientId-" + Math.random().toString(36).substring(2, 15));
// client.onConnectionLost = function (responseObject) {
// if (responseObject.errorCode !== 0) {
// console.log("onConnectionLost:" + responseObject.errorMessage);
// }
// };
// client.onMessageArrived = function (message) {
// console.log("onMessageArrived:" + message.destinationName + " - " + message.payloadString);
// if (message.destinationName === "pt/nhietdo") {
// $('#temperature').text(message.payloadString + " °C");
// }
// else if (message.destinationName === "pt/doam") {
// $('#humidity').text(message.payloadString + "%RH");
// }
// else if (message.destinationName === "pt/anhsang") {
// $('#wind').text(message.payloadString + "m/s");
// }
// else if (message.destinationName === "pt/chuyendong") {
// $('#pressure').text(message.payloadString + "hPa");
// }
// };
// client.connect({
// onSuccess: function () {
// console.log("Connected to MQTT broker");
// client.subscribe("pt/nhietdo");
// client.subscribe("pt/doam");
// client.subscribe("pt/anhsang");
// client.subscribe("pt/chuyendong");
// },
// useSSL: false,
// timeout: 3,
// onFailure: function (message) {
// console.error("Connection failed: " + message.errorMessage);
// }
// });
// function onConnect() {
// console.log("Connected to MQTT broker");
// }
// </script>
// </body>
// </html>