#include <ArduinoJson.h>
#include <WiFi.h>
#include <PubSubClient.h>
#include <DHT.h>
const char *ssid = "Wokwi-GUEST"; // Enter your WiFi name
const char *password = ""; // Enter WiFi password
const char *mqtt_broker = "iot.egrotek.id";
String topic_custom_publish = "egrotek/pub/APPgLP1xvc7YbMTsspDPH/DEVLmmExEC3ZN8YxYvTWW";
String topic_custom_subscribe ="egrotek/sub/APPgLP1xvc7YbMTsspDPH/DEVLmmExEC3ZN8YxYvTWW";
const char *mqtt_username = "QtthvPJFSeJTYGfbT7";
const char *mqtt_password = "BUSZf936D5euEs35nU";
int mqtt_port = 1883;
const char *client_id = "DEVLmmExEC3ZN8YxYvTWW";
WiFiClient espClient;
PubSubClient client(espClient);
#define DHT_SENSOR_PIN 25
#define DHT_SENSOR_TYPE DHT22
DHT dht_sensor(DHT_SENSOR_PIN, DHT_SENSOR_TYPE);
long lastMsg = 0;
float temp;
float humd;
String val_temp = "temp";
String val_humd = "humd";
void setup() {
Serial.begin(9600);
Serial.print("Conecting to wifi AP");
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());
//connecting to a mqtt broker
client.setServer(mqtt_broker, mqtt_port);
client.setCallback(callback);
while (!client.connected()) {
Serial.printf("The client %s connects to the public mqtt broker\n", client_id);
if (client.connect(client_id, mqtt_username, mqtt_password)) {
Serial.println("Public emqx mqtt broker connected");
} else {
Serial.print("failed with state ");
Serial.print(client.state());
delay(2000);
}
}
char finalsubs[topic_custom_subscribe.length() + 1];
topic_custom_subscribe.toCharArray(finalsubs, topic_custom_subscribe.length() + 1);
client.subscribe(finalsubs);
dht_sensor.begin();
}
void callback(char *topic2, byte *payload, unsigned int length) {
Serial.print("Message arrived in topic: ");
Serial.println(topic2);
Serial.print("Message:");
for (int i = 0; i < length; i++) {
Serial.print((char) payload[i]);
}
Serial.println();
Serial.println("-----------------------");
}
void reconnect() {
// Loop until we're reconnected
while (!client.connected()) {
Serial.print("Attempting MQTT connection...");
// Attempt to connect
if (client.connect(client_id, mqtt_username, mqtt_password)) {
Serial.println("connected");
char finalsubs[topic_custom_subscribe.length() + 1];
topic_custom_subscribe.toCharArray(finalsubs, topic_custom_subscribe.length() + 1);
client.subscribe(finalsubs);
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
// Wait 5 seconds before retrying
delay(5000);
}
}
}
void loop() {
if (!client.connected()) {
reconnect();
}
client.loop();
long now = millis();
if (now - lastMsg > 10000) {
lastMsg = now;
float humi = dht_sensor.readHumidity();
float tempC = dht_sensor.readTemperature();
float tempF =dht_sensor.readTemperature(true);
if ( isnan(tempC) || isnan(tempF) || isnan(humi)) {
Serial.println("Failed to read from DHT sensor!");
} else {
String pesan = "{\"" + val_temp + "\":\"" + String(tempC, 1) + "\",\"" + val_humd + "\":\"" + String(humi, 0) + "\"}";
char finalDataChar[pesan.length() + 1];
char topicChar[topic_custom_publish.length() + 1];
pesan.toCharArray(finalDataChar, pesan.length() + 1);
topic_custom_publish.toCharArray(topicChar, topic_custom_publish.length()+1);
client.publish(topicChar, finalDataChar);
}
}
}