const char* ssid = "Wokwi-GUEST";
const char* password = " ";
const char* mqttServer = "broker.hivemq.com";
const char* clientID = "ESP32WokwiTutorial";
int DHTpin = 14;
int RedLED = 2;
WiFiClient espClient;
PubSubClient client(espclient);
void setupwifi() {
wifi.begin(ssid, password);
while (Wifi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("WiFi Connected");
}
void callback(char* topic, byte* payload, unsigned int length) {
Serial.println("Message arrived in topic :");
Serial.println(topic);
Serial.println("Message :");
String data = "";
for (int i = 0; 1 < length; i++) {
Serial.print((char)payload[i]);
data += (char)payload[i];
}
if (String(topic) == "/ESP32/LED/RED") {
if (data == "ON") {
digitalWrite(RedLED, HIGH);
}
else if (data == "OFF")
{
digitalWrite(RedLED, LOW);
}
}
}
DHT dht(DHTPin, DHT22);
void setup() {
// put your code here, to run once:
Serial.begin(115200);
pinMode(RedLED, OUTPUT);
dht.begin();
setupwifi();
client.setserver(mqttServer, 1883);
client.setCallback(callback);
}
void reconnect(){
while(!client.connected()){
if(client.connect(clientID)){
client.subscribe("/ESP32/LED/RED");
}
else{
Serial.println("Failed,rc=");
Serial.print(client.state());
Serial.println("Trying again in 5 seconds");
delay(5000);
}
}
}
void loop() {
if (!client.connected()){
reconnect();
}
client.loop();
float temp = dht.readTemperature();
float humidity = dht.readHumidity();
Serial.println("Temperature :" + String(temp));
Serial.println("Humidity :" + String(humidity));
String datatoSend = String(temp);
byte arrSize;
arrSize = datatoSend.length() + 1;
char msg[arrSize];
datatoSend.toCharArray(msg,arrSize);
client.publish("/ESP32/temp",msg);
datatoSend = String(humidity);
arrSize = datatoSend.length() + 1;
char msg2[arrSize];
datatoSend.toCharArray(msg2,arrSize);
client.publish("/ESP32/humidity",msg2);
delay(1000);
}