Update wifi.ino

This commit is contained in:
Ghassan Yusuf 2025-06-10 22:24:46 +03:00
parent 9666c3ef44
commit a2e8efc215

166
wifi.ino
View File

@ -1,41 +1,54 @@
#include <Wire.h> #include <Wire.h>
#include <Adafruit_GFX.h> #include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h> #include <Adafruit_SSD1306.h>
#include <FS.h> #include <FS.h>
#include <SPIFFS.h> #include <SPIFFS.h>
#include <WiFiManager.h> #include <WiFiManager.h>
#include <ArduinoJson.h> #include <ArduinoJson.h>
#include <PubSubClient.h> // <-- Add this
#define PRODUCT_NAME "TAKEONE" #define PRODUCT_NAME "TAKEONE"
// OLED display setup (on I2C bus 0) // OLED display setup (on I2C bus 0)
#define OLED_SDA 18 #define OLED_SDA 18
#define OLED_SCL 19 #define OLED_SCL 19
#define SCREEN_WIDTH 128 #define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 32 #define SCREEN_HEIGHT 32
#define OLED_RESET -1 #define OLED_RESET -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
// Second I2C bus for other sensors/devices // Second I2C bus for other sensors/devices
#define I2C2_SDA 1 #define I2C2_SDA 1
#define I2C2_SCL 2 #define I2C2_SCL 2
TwoWire I2C_Two = TwoWire(1); TwoWire I2C_Two = TwoWire(1);
// MQTT/WiFi config // MQTT/WiFi config
char mqtt_server[40] = ""; char mqtt_server[40] = "";
char mqtt_port[6] = "8080"; char mqtt_port[6] = "8080";
char api_token[34] = "YOUR_API_TOKEN"; char api_token[34] = "YOUR_API_TOKEN";
bool shouldSaveConfig = false; bool shouldSaveConfig = false;
// WiFi loss detection // WiFi loss detection
unsigned long wifiLostTime = 0; unsigned long wifiLostTime = 0;
bool portalOpened = false; bool portalOpened = false;
// Button reset // Button reset
#define BOOT_BUTTON 0 // Usually GPIO 0 on ESP32 #define BOOT_BUTTON 0 // Usually GPIO 0 on ESP32
void saveConfigCallback() { // MQTT client setup
WiFiClient espClient;
PubSubClient mqttClient(espClient);
// MQTT topics
#define MQTT_TOPIC_SUB "takeone/in"
#define MQTT_TOPIC_PUB "takeone/out"
//================================================================
// SETUP
//================================================================
void saveConfigCallback() {
shouldSaveConfig = true; shouldSaveConfig = true;
display.clearDisplay(); display.clearDisplay();
@ -43,9 +56,13 @@ void saveConfigCallback() {
display.println("Saving config..."); display.println("Saving config...");
display.display(); display.display();
} }
void showStatus(const String& line1, const String& line2 = "", const String& line3 = "") { //================================================================
// SETUP
//================================================================
void showStatus(const String& line1, const String& line2 = "", const String& line3 = "") {
display.clearDisplay(); display.clearDisplay();
display.setCursor(0, 0); display.setCursor(0, 0);
@ -54,9 +71,54 @@ void showStatus(const String& line1, const String& line2 = "", const String& lin
if (!line3.isEmpty()) display.println(line3); if (!line3.isEmpty()) display.println(line3);
display.display(); display.display();
} }
void setup() { //================================================================
// SETUP
//================================================================
// MQTT message received callback
void mqttCallback(char* topic, byte* payload, unsigned int length) {
char message[length + 1];
memcpy(message, payload, length);
message[length] = '\0';
Serial.print("Message received: ");
Serial.println(message);
showStatus("MQTT:", "RX: " + String(message));
}
//================================================================
// SETUP
//================================================================
// Connect to MQTT broker
bool mqttConnect() {
if (!mqttClient.connected()) {
Serial.println("Connecting to MQTT broker...");
showStatus("MQTT:", "Connecting...");
if (mqttClient.connect("ESP32Client", "", "")) {
Serial.println("Connected to MQTT broker");
mqttClient.subscribe(MQTT_TOPIC_SUB);
showStatus("MQTT:", "Connected!");
return true;
} else {
Serial.println("Failed to connect to MQTT broker");
showStatus("MQTT:", "Failed!");
return false;
}
}
return true;
}
//================================================================
// SETUP
//================================================================
void setup() {
Serial.begin(115200); Serial.begin(115200);
@ -134,9 +196,18 @@ void setup() {
// Button setup // Button setup
pinMode(BOOT_BUTTON, INPUT_PULLUP); pinMode(BOOT_BUTTON, INPUT_PULLUP);
}
void loop() { // MQTT setup
mqttClient.setServer(mqtt_server, atoi(mqtt_port));
mqttClient.setCallback(mqttCallback);
}
//================================================================
// SETUP
//================================================================
void loop() {
// WiFi loss detection // WiFi loss detection
if (WiFi.status() != WL_CONNECTED) { if (WiFi.status() != WL_CONNECTED) {
@ -152,6 +223,11 @@ void loop() {
} }
} else { } else {
wifiLostTime = 0; wifiLostTime = 0;
// MQTT keepalive and reconnect
if (!mqttClient.connected()) {
mqttConnect();
}
mqttClient.loop();
} }
// Button hold check // Button hold check
@ -166,7 +242,7 @@ void loop() {
WiFi.disconnect(true); WiFi.disconnect(true);
WiFiManager wifiManager; WiFiManager wifiManager;
wifiManager.resetSettings(); wifiManager.resetSettings();
wifiManager.startConfigPortal("AutoConnectAP", "12345678"); wifiManager.startConfigPortal(PRODUCT_NAME);
buttonActionTaken = true; buttonActionTaken = true;
} }
} else { } else {
@ -174,4 +250,18 @@ void loop() {
buttonActionTaken = false; buttonActionTaken = false;
} }
} // Example: Publish a message every 5 seconds
static unsigned long lastPublish = 0;
if (millis() - lastPublish > 5000) {
lastPublish = millis();
if (mqttClient.connected()) {
String msg = "Hello from " + String(PRODUCT_NAME);
mqttClient.publish(MQTT_TOPIC_PUB, msg.c_str());
}
}
}
//================================================================
// SETUP
//================================================================