#include <ArduinoJson.h>
#include <WiFi.h>
#include <PubSubClient.h>
#include <ThingsBoard.h>
#include <DHTesp.h>
#define ssid "Wokwi-GUEST"
#define pass ""
#define pinDht 15
DHTesp dhtsensor;
const char* mqtt_server = "mqtt.thingsboard.cloud";
const int mqtt_port = 1883;
const char* idBroker = "ESP32_Juan";
const char* userBroker = "iotChickinHMI";
const char* passBroker = "6W38KkAZ1%1w";
const char* userBrokerThingsboard = "Bex3XyVqko0qqn6UL5NX";
const char* passBrokerThingsboard = "";
WiFiClient espClient;
PubSubClient client(espClient);
const char* mqtt_publish = "test_juan/status";
const char* mqtt_publish_thingsboard = "v1/devices/me/telemetry";
const char* mqtt_subscribe = "test_juan/data";
TempAndHumidity data = dhtsensor.getTempAndHumidity();
String temp = String(data.temperature, 2);
String hum = String(data.humidity, 1);
String payloadTemperature;
String payloadHumidity;
String msg;
void SetupWiFi() {
Serial.println("Connecting to " + String(ssid));
while (WiFi.status() != WL_CONNECTED)
{
Serial.print(".");
WiFi.begin(ssid,pass);
delay(500);
}
Serial.println("WiFi CONNECTED");
Serial.println("__________________");
}
void callback(char* topic, byte* payload, unsigned int length) {
// get topic
Serial.print("Message arrived [");
Serial.print(topic);
Serial.print("] ");
// get payload
for (int i=0;i<length;i++) {
Serial.print((char)payload[i]);
msg += (char)payload[i];
}
String payloadString = String((char*)payload).substring(0,length);
int payloadInt = int(payload);
if (payloadString == "start")
{
Serial.println("SYSTEM STARTED");
}
// JSON Parsing
StaticJsonDocument<200> doc;
DeserializationError error = deserializeJson(doc, payloadString);
if (error) {
Serial.print("JSON Deserialization failed: ");
Serial.println(error.f_str());
return;
}
// Get the "request" value
const char* request = doc["request"];
String requestStr = String(request);
requestStr.toLowerCase();
Serial.print("Request: ");
Serial.println(request);
// if (float(payload) = float())
// {
// }
// Request = true
if (String(requestStr) == "true")
{
Serial.println("Request is True");
client.publish(mqtt_publish, "SERVER IS ON !");
}
else if (String(requestStr) == "false")
{
Serial.println("Request is False");
client.publish(mqtt_publish, "SERVER IS OFF !");
};
// sending data to thingsboard
}
void reconnect() {
while (!client.connected())
{
if (client.connect("ESP32Client")) {
client.publish(mqtt_publish, "Server ON!");
client.subscribe(mqtt_subscribe);
} else {
delay(1000);
};
if (client.connect(idBroker, userBrokerThingsboard, passBrokerThingsboard))
{
Serial.println("BROKER CONNECTED");
client.publish(mqtt_publish, "Server ON!");
client.subscribe(mqtt_subscribe);
}
}
}
void test_publish() {
// temperature = random(1,101);
// humditiy = random(1,101);
payloadTemperature = "{\"temperature\": "+ String(data.temperature, 2) +" }";
payloadHumidity= "{\"humidity\": "+ String(data.humidity, 1) +" }";
client.publish(mqtt_publish_thingsboard, payloadTemperature.c_str());
client.publish(mqtt_publish_thingsboard, payloadHumidity.c_str());
Serial.println(temp);
Serial.println(hum);
Serial.println(msg);
Serial.println(payloadTemperature);
Serial.println(payloadHumidity);
delay(5000);
}
void setup() {
Serial.begin(9600);
dhtsensor.setup(pinDht,DHTesp::DHT22);
randomSeed(analogRead(0));
SetupWiFi();
client.setServer(mqtt_server, mqtt_port);
client.setCallback(callback);
client.publish(mqtt_publish, "Server ON!");
}
void loop() {
if (!client.connected()) {
reconnect();
}
TempAndHumidity data = dhtsensor.getTempAndHumidity();
Serial.println("Temp: " + String(data.temperature, 2) + "°C");
Serial.println("Humidity: " + String(data.humidity, 1) + "%");
Serial.println("---");
client.loop();
test_publish();
}