#include <WiFi.h>
#include "Adafruit_MQTT.h"
#include "Adafruit_MQTT_Client.h"
#define AIO_SERVER "broker.emqx.io"
#define AIO_SERVERPORT 1883 // Using port 8883 for MQTTS
const int analogPin = 34;
const int switchPin = 13;
WiFiClient client; // WiFiFlientSecure for SSL/TLS support
Adafruit_MQTT_Client mqtt(&client, AIO_SERVER, AIO_SERVERPORT);
// Setup a subscriber
Adafruit_MQTT_Subscribe subscriber = Adafruit_MQTT_Subscribe(&mqtt, "topic/esp32", MQTT_QOS_0);
// Setup a publisher
Adafruit_MQTT_Publish publisher = Adafruit_MQTT_Publish(&mqtt, "topic/esp32", MQTT_QOS_0);
void setup() {
Serial.begin(115200);
pinMode(switchPin, OUTPUT);
// start your network
WiFi.begin("Wokwi-GUEST", "");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
// Set MQTT callback function
subscriber.setCallback(&ledCallback);
// connect to host with MQTT over WebSocket securely
mqtt.subscribe(&subscriber);
}
void ledCallback(char *message, uint16_t len)
{
//char messageBuffer[40];
//snprintf(messageBuffer, sizeof(messageBuffer), "LED status is :: %s, len :: %u", message, len);
Serial.println(message);
}
int sensorData = 0;
boolean enable = true;
void loop() {
// should be called to trigger callbacks
MQTT_connect();
//mqtt.processPackets(10000);
Serial.println(digitalRead(switchPin));
while(digitalRead(switchPin))
{
sensorData = analogRead(analogPin);
if (sensorData > 2094)
{
if (enable)
if (publisher.publish("test from device"))
{
enable = false;
Serial.println(F("Data sent to mqtt subscribers."));
}
else
Serial.println(F("Failed to send MQTT Message"));
}
}
if(!digitalRead(switchPin))
enable = true;
//Serial.println(digitalRead(switchPin));
// Serial.println(analogRead(analogPin));
// if (!publisher.publish("test from device"))
// {
// Serial.println(F("Failed to send MQTT Message"));
//}
//delay(2000);
//Serial.println("Sending publish..");
}
void MQTT_connect() {
int8_t ret;
// Stop if already connected.
if (mqtt.connected()) {
return;
}
Serial.print("Connecting to MQTT... ");
uint8_t retries = 3;
while ((ret = mqtt.connect()) != 0) { // connect will return 0 for connected
Serial.println(mqtt.connectErrorString(ret));
Serial.println("Retrying MQTT connection in 5 seconds...");
mqtt.disconnect();
delay(500); // wait 5 seconds
retries--;
//if (retries == 0) {
// while (1); // basically die and wait for WDT to reset me
// }
}
Serial.println("MQTT Connected!");
}
//https://www.donskytech.com/adafruit-mqtt-library-tutorial/
//https://www.electronicwings.com/esp32/esp32-mqtt-client