#include <DHTesp.h>
#include <WiFi.h>
#include <PubSubClient.h>
const char* ssid = "Wokwi-GUEST";
const char* password = "1234";
const char* mqtt_server = "test.mosquitto.org";
WiFiClient espClient;
PubSubClient client(espClient);
int DHT = 33;
DHTesp sensor;
void setup() {
sensor.setup(DHT , DHTesp::DHT22);
Serial.begin(115200);
setup_wifi();
client.setServer(mqtt_server,1883);//1883 is the default port for MQTT server
}
void callback(char* topic, byte* message, unsigned int length) {
Serial.print("Message arrived on topic: ");
Serial.print(topic);
Serial.print(". Message: ");
String messageTemp;
for (int i = 0; i < length; i++) {
Serial.print((char)message[i]);
messageTemp += (char)message[i];
}
Serial.println();
}
void connect_mqttServer() {
while (!client.connected()) {
if(WiFi.status() != WL_CONNECTED){
setup_wifi();
}
//now attemt to connect to MQTT server
Serial.print("Attempting MQTT connection...");
if (client.connect("ESP32_client1")) { // Change name of client if multiple ESP32 are connected
Serial.println("connected");
// Subscribe to topics here
}
else {
//attempt not successful
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" trying again in 3 seconds");
// Wait 3 seconds before retrying
delay(3000);
}
}
}
void setup_wifi() {
delay(50);
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
int c=0;
while (WiFi.status() != WL_CONNECTED) {
delay(1000); //
Serial.print(".");
c=c+1;
if(c>15){
ESP.restart(); //restart ESP after 10 seconds
}
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}
long lstmsg = 0;
void loop() {
if (!client.connected()) {
connect_mqttServer();
}
client.loop();
long now = millis();
float C_temperature = sensor.getTemperature();
float humidity = sensor.getHumidity();
if(now - lstmsg > 5000){
lstmsg = now;
client.publish("esp32/sstemperature", String(C_temperature).c_str());
client.publish("esp32/sshumidity", String(humidity).c_str());
}
}