#include "WiFi.h"
#include <PubSubClient.h>
#include <ArduinoJson.h>
unsigned long delay_time = 120000;
boolean transmissionFlag = 1;
const char* mqtt_server = "broker.emqx.io";
const char* mqtt_topic = "/thing";
const int mqtt_port = 1883;
const char* clientId = "randomwords";
int count = 1; //To find the number of mqtt requests sent
// WiFi and MQTT client initialization
WiFiClient espClient;
PubSubClient mqttClient(espClient);
void setup() {
Serial.begin(115200);
WiFi.disconnect(); //Disconnect from previously connected wifi
Serial.println("\nWifi disconnected");
delay(100);
WiFi.mode(WIFI_STA); //STAtion mode:the ESP8266 connects to an access point
mqttClient.setServer(mqtt_server, mqtt_port);
connectWifi();
connectMQTT();
}
void loop() {
mqttClient.loop();
getData();
delay(delay_time);
}
void connectWifi() {
if (WiFi.status() != WL_CONNECTED) {
Serial.println("Attempting to connect to WiFi");
WiFi.begin("Wokwi-GUEST", "");
while (WiFi.status() != WL_CONNECTED) {
Serial.println(".");
delay(1000);
}
Serial.println("Wifi Connected");
return;
}
}
void getData() {
double randomDecimal = random(0, 100) / 100.0;
double temp = random(0, 100) + randomDecimal;
double humidity = random(0, 100) + randomDecimal;
Serial.println("----------------");
Serial.print("Humidity: " + String(humidity) + "% , ");
Serial.println("Temp: " + String(temp) + "°C");
// unsigned long currentTime = millis();
// int time_elapsed = currentTime - lastTransmissionTime;
// Serial.println("Time elapsed: " + String(time_elapsed));
StaticJsonDocument<20> doc;
doc["Humidity"] = humidity;
doc["Temperature"] = temp;
// Serialize the JSON object to a string
String jsonString;
serializeJson(doc, jsonString);
sendCommand();
if (transmissionFlag)
sendMQTT(jsonString);
// lastTransmissionTime = currentTime;
delay_time+=60000;
// }
}
void connectMQTT() {
int retryCount = 5;
while (!mqttClient.connected() && retryCount) {
Serial.print("Attempting MQTT connection...");
if (mqttClient.connect(clientId)) {
Serial.println(" MQTT connected");
// mqttClient.publish(mqtt_topic, jsonString.c_str());
} else {
Serial.print("failed, rc=");
Serial.print(mqttClient.state());
Serial.println(" try again in 2 seconds");
delay(2000);
retryCount--;
}
}
}
void sendMQTT(String jsonString) {
if (mqttClient.connected())
connectMQTT();
mqttClient.publish(mqtt_topic, jsonString.c_str());
Serial.println("Sent count: " + String(count++));
}