#include <HTTPClient.h>
#include <ETH.h>
#include <WiFi.h>
#include <WiFiAP.h>
#include <WiFiClient.h>
#include <WiFiGeneric.h>
#include <WiFiMulti.h>
#include <WiFiScan.h>
#include <WiFiServer.h>
#include <WiFiSTA.h>
#include <WiFiType.h>
#include <WiFiUdp.h>
#include "DHT.h"
#include "PubSubClient.h"
#include <ArduinoJson.h>
#define DHTTYPE DHT22 // DHT22
#define DHTPIN 5
#define RETRY_LIMIT 20
DHT dht(DHTPIN, DHTTYPE);
const char* ssid = "Wokwi-GUEST";
const char* password = "";
const char * MQTT_ID = "be580d0b-322a-4984-b472-564a9c21143e";
int Port = 1883;
const char * MQTTServer = "broker.hivemq.com";
const char * MQTT_Topic = "21004122/control";
WiFiClient espClient;
PubSubClient client(espClient);
//Kết nối lại MQTT
void MQTT_Reconnect() {
while (!client.connected()) {
if (client.connect(MQTT_ID)) {
Serial.print("MQTT Topic: ");
Serial.print(MQTT_Topic);
Serial.print(" connected");
client.subscribe(MQTT_Topic);
Serial.println("");
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
delay(5000);
}
}
}
//Đọc giá trị từ Topic
void callback(char* topic, byte* message, unsigned int length) {
Serial.print("Message arrived on topic: ");
Serial.println(topic);
Serial.print("Message: ");
String stMessage;
for (int i = 0; i < length; i++) {
Serial.print((char)message[i]);
stMessage += (char)message[i];
}
Serial.println();
JsonDocument doc;
DeserializationError error = deserializeJson(doc, stMessage);
if (error) {
Serial.print(F("deserializeJson() failed: "));
Serial.println(error.f_str());
return;
}
void setup()
{
dht.begin();
Serial.begin(115200);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP Address");
Serial.println(WiFi.localIP());
client.setServer(MQTTServer, Port);
client.setCallback(callback);
}
void loop()
{
//Kết nối MQTT
delay(10);
if (!client.connected()) {
MQTT_Reconnect();
}
client.loop();
//Nhiệt độ, độ ẩm
int rtl = RETRY_LIMIT;
float h = dht.readHumidity();
float t = dht.readTemperature();
delay(500);
while (isnan(t) || isnan(h)) {
Serial.println("Check sensor again - " + rtl);
h = dht.readHumidity();
t = dht.readTemperature();
delay(500);
if (--rtl < 1) {
ESP.restart(); // At times the DHT11 just kept returning NAN. A Restart fixed this.
}
}
//Mở kết nối đến server
HTTPClient http;
http.begin("http://btlzulux0j.sharedwithexpose.com/ESP32/db.php");
http.addHeader("Content-Type", "application/x-www-form-urlencoded");
//format your POST request.
int httpResponseCode = http.POST("nhietdo=" + String(t) + "&doam=" + String(h));
if (httpResponseCode > 0) {
//check for a return code - This is more for debugging.
String response = http.getString();
Serial.println(httpResponseCode);
Serial.println(response);
}
else {
Serial.print("Error on sending post");
Serial.println(httpResponseCode);
}
//closde the HTTP request.
http.end();
//Monitor values in console for debugging.
Serial.println("Temp = " + String(t));
Serial.println("humidity = " + String(h));
delay(60000);
}