#include <WiFi.h>
#include <EEPROM.h>
#include <PubSubClient.h>
#include <Adafruit_SSD1306.h>
#define MQTT_SERVER "104.214.189.245"
#define MQTT_PORT 1883
#define MQTT_USERNAME ""
#define MQTT_PASSWORD ""
#define MQTT_NAME "ESP32_1"
#define LED_PIN 25
#define POT 34
#define sw 5
#define EEPROM_SIZE 4056
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 32
WiFiClient client;
PubSubClient mqtt(client);
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire);
const char* send_pot = "/ESP32_1/POT";
String text, textclone;
bool toggle = true;
int pot, timecount, cov;
int suit(int value) {
return (value * 255) / 4095;
}
void callback(char *topic, byte *payload, unsigned int length) {
for (int i = 0; i < length; i++) {
text += (char)payload[i];
}
textclone = text;
text = "";
Serial.println("text is");
Serial.println(textclone);
}
void showoled(int add, int value, int cov, bool key) {
display.clearDisplay();
display.display();
display.setTextSize(0.5);
display.setTextColor(WHITE);
display.setCursor(0, 0);
if (key) {
display.println(F("ON"));
display.setCursor(60, 0);
display.println(F("ADC : "));
display.setCursor(80, 0);
display.println(value);
display.setCursor(0, 15);
display.println(F("Address : "));
display.setCursor(60, 15);
display.println(add);
display.setCursor(0, 25);
display.println(F("Data : "));
display.setCursor(40, 25);
display.println(cov);
display.display();
} else {
display.println(F("OFF"));
display.setCursor(60, 0);
display.println(F("ADC : "));
display.setCursor(80, 0);
display.println(value);
display.setCursor(0, 15);
display.println(F("Address : "));
display.setCursor(60, 15);
display.println(add);
display.setCursor(0, 25);
display.println(F("Data : "));
display.setCursor(40, 25);
display.println(cov);
display.display();
}
}
void setup() {
Serial.begin(115200);
pinMode(LED_PIN, OUTPUT);
pinMode(sw, INPUT_PULLUP);
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
while (true);
}
if (!EEPROM.begin(EEPROM_SIZE)) {
Serial.println("Failed to initialize EEPROM");
delay(1000);
ESP.restart();
}
WiFi.mode(WIFI_STA);
WiFi.begin("Wokwi-GUEST", "");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("WiFi connected");
EEPROM.writeUChar(82, 0);
EEPROM.commit();
mqtt.setServer(MQTT_SERVER, MQTT_PORT);
mqtt.setCallback(callback);
}
void loop() {
if (!mqtt.connected()) {
if (mqtt.connect(MQTT_NAME, MQTT_USERNAME, MQTT_PASSWORD)) {
Serial.println("Connected to MQTT");
mqtt.subscribe("/ESP32_1/POT");
mqtt.subscribe("/ESP32_1/LED");
} else {
delay(5000);
return;
}
}
mqtt.loop();
pot = analogRead(POT);
cov = suit(pot);
if (digitalRead(sw) == LOW) {
delay(1000);
mqtt.publish("/ESP32_1/POT",String(EEPROM.readUChar(82)).c_str());
EEPROM.writeUChar(82, cov);
EEPROM.commit();
Serial.println("Commit success");
}
if (textclone == "on") {
showoled(82, pot, cov, true);
analogWrite(LED_PIN, EEPROM.readUChar(82));
}
else if (textclone == "off")
{
showoled(82, pot, cov, false);
analogWrite(LED_PIN, 0);
}
else
{
showoled(82, pot, cov, false);
analogWrite(LED_PIN, 0);
}
}
Loading
ssd1306
ssd1306