// ESP32 Code Implementation - Wokwi Simulation
#include <WiFi.h>
#include <PubSubClient.h>
// WiFi credentials
const char* ssid = "Wokwi-GUEST";
const char* password = "";
// ThingSpeak MQTT broker details
const char* mqttServer = "mqtt3.thingspeak.com";
const int mqttPort = 1883;
const char* mqttUserName = "CxUVNxshIR42MxImHRwWAQg";
const char* clientID = "CxUVNxshIR42MxImHRwWAQg";
const char* mqttPass = "7nvDLLEjNvgaYqisIP/g/QPD";
// ThingSpeak Channel ID
const int channelID = 2391224;
// WiFi client and MQTT client
WiFiClient client;
PubSubClient mqttClient(client);
// Timing variables
long lastPublishMillis = 0;
int updateInterval = 3000; // Update interval in milliseconds
// Function to connect to WiFi
void connectWifi() {
Serial.print("Connecting to Wi-Fi...");
if (WiFi.status() != WL_CONNECTED) {
Serial.print("Attempting to connect");
while (WiFi.status() != WL_CONNECTED) {
WiFi.begin(ssid, password);
delay(2000);
}
Serial.println("\nConnected.");
}
}
// Function to publish data to ThingSpeak
void mqttPublish(long pubChannelID, String message) {
String topicString = "channels/" + String(pubChannelID) + "/publish";
mqttClient.publish(topicString.c_str(), message.c_str());
}
// Function to subscribe to ThingSpeak channel
void mqttSubscribe(long subChannelID) {
String myTopic = "channels/" + String(subChannelID) + "/subscribe";
mqttClient.subscribe(myTopic.c_str());
}
// Function to connect to ThingSpeak MQTT broker
void mqttConnect() {
while (!mqttClient.connected()) {
if (mqttClient.connect(clientID, mqttUserName, mqttPass)) {
Serial.print("MQTT to ");
Serial.print(mqttServer);
Serial.print(" at port ");
Serial.print(mqttPort);
Serial.println(" successful.");
} else {
Serial.print("MQTT connection failed, rc = ");
Serial.print(mqttClient.state());
Serial.println(" Will try again in a few seconds");
delay(2000);
}
}
}
void setup() {
Serial.begin(115200);
delay(2000);
connectWifi();
mqttClient.setServer(mqttServer, mqttPort);
mqttClient.setBufferSize(2048);
}
void loop() {
// Reconnect to WiFi if disconnected
if (WiFi.status() != WL_CONNECTED) {
connectWifi();
}
// Connect to ThingSpeak MQTT broker
if (!mqttClient.connected()) {
mqttConnect();
mqttSubscribe(channelID);
}
// Maintain MQTT connection
mqttClient.loop();
// Publish data to ThingSpeak at specified intervals
if (millis() - lastPublishMillis > updateInterval) {
// Generate random values for temperature, HR, and SpO2
float temperature = random(320, 450) / 10.0;
float HR = random(60, 100);
float SpO2 = random(95, 100);
// Print the generated values
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.print(" HR: ");
Serial.print(HR);
Serial.print(" SpO2: ");
Serial.println(SpO2);
// Publish data to ThingSpeak via MQTT
mqttPublish(channelID, (String("field1=") + String(temperature) + String("&field2=") + String(HR) + String("&field3=") + String(SpO2)));
lastPublishMillis = millis();
}
}