#include "WiFi.h"
#include "ThingSpeak.h"
#include <PubSubClient.h>
unsigned long lastTransmissionTime = 0;
boolean transmissionFlag = 1;
// const char* mqtt_server = "mqtt3.thingspeak.com";
const char* mqtt_server = "broker.hivemq.com";
const int mqtt_port = 1883;
int count = 0;
// const int myChannelID = 2480948;
const char* clientId = "IToqNjolFC0dIAE6Jx45Bi0";
// const char* username = "IToqNjolFC0dIAE6Jx45Bi0";
// const char* password = "PjgDxpXejM4GEKLqYBo+TEwv";
WiFiClient client;
PubSubClient mqttClient(client);
void setup() {
Serial.begin(115200);
WiFi.disconnect(); //Disconnect from previously connected wifi
Serial.println("\nWifi disconnected");
delay(200);
WiFi.mode(WIFI_STA); //STAtion mode: the ESP8266 connects to an access point
mqttClient.setServer(mqtt_server, mqtt_port);
}
void loop() {
connectWifi();
mqttClient.loop();
getData();
delay(2000); // Wait for a new reading from the sensor (DHT22 has ~0.5Hz sample rate)
}
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() {
float randomDecimal = random(0, 100) / 100.0;
float temp = random(0, 100) + randomDecimal;
float humidity = random(0, 100) + randomDecimal;
Serial.println("----------------");
Serial.print("Temp: " + String(temp) + "°C , ");
Serial.println("Humidity: " + String(humidity) + "%");
unsigned long currentTime = millis();
int time_elapsed = currentTime - lastTransmissionTime;
Serial.println("Time elapsed: " + String(time_elapsed));
// if ((time_elapsed >= 6000) && transmissionFlag) {
// if (!mqttClient.connected())
connectMQTT(humidity, temp);
// mqttClient.loop();
lastTransmissionTime = currentTime;
// }
}
void connectMQTT(float humidity, float temp) {
while (!mqttClient.connected()) {
Serial.print("Attempting MQTT connection...");
// if (mqttClient.connect(clientId, username, password)) {
if (mqttClient.connect(clientId)) {
Serial.println("connected " + String(count));
String message = "field1=" + String(humidity) + "&field2=" + String(temp) + "&status=MQTTPUBLISH";
mqttClient.publish("/thing", message.c_str());
count++;
// client.subscribe("event");
} else {
Serial.print("failed, rc=");
Serial.print(mqttClient.state());
Serial.println(" try again in 2 seconds");
delay(2000);
}
}
mqttClient.disconnect();
}