From daa3cff43974340fdaf9e4a70357edf3084a9766 Mon Sep 17 00:00:00 2001 From: Dejvino Date: Thu, 12 Feb 2026 19:55:45 +0100 Subject: [PATCH] split into features --- esp32_MachineNotify.ino | 72 +++++++++++++++++++++++++++++++++++------ 1 file changed, 62 insertions(+), 10 deletions(-) diff --git a/esp32_MachineNotify.ino b/esp32_MachineNotify.ino index 641787b..b4343de 100644 --- a/esp32_MachineNotify.ino +++ b/esp32_MachineNotify.ino @@ -1,22 +1,34 @@ +#include + +// Feature Configuration - Comment out to disable +#define ENABLE_SENSORS +#define ENABLE_DISPLAY +#define ENABLE_WIFI +#define ENABLE_NOTIFICATIONS + +#ifdef ENABLE_WIFI #include #include -#include +#endif + +#ifdef ENABLE_SENSORS #include +#endif + +#ifdef ENABLE_DISPLAY #include #include +#endif // WiFi credentials +#ifdef ENABLE_WIFI const char* WIFI_SSID = "YOUR_WIFI_SSID"; const char* WIFI_PASSWORD = "YOUR_WIFI_PASSWORD"; +#endif // ntfy.sh topic const char* NTFY_TOPIC = "YOUR_NTFY_TOPIC"; -// Notification queue -String queuedNotification = ""; -String queuedTitle = ""; -String queuedPriority = ""; - // Pin definitions const int VIBRATION_PIN = 4; @@ -25,10 +37,14 @@ const int VIBRATION_PIN = 4; #define SCREEN_HEIGHT 64 #define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino reset pin) #define SCREEN_ADDRESS 0x3C +#ifdef ENABLE_DISPLAY Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); +#endif // Light sensor +#ifdef ENABLE_SENSORS BH1750 lightMeter; +#endif // Thresholds const float LIGHT_ACTIVATION_THRESHOLD = 200.0; @@ -47,26 +63,37 @@ unsigned long lightHighStartTime = 0; unsigned long lightLowStartTime = 0; // OLED display data +#ifdef ENABLE_DISPLAY String displayData[4]; int currentDisplayLine = 0; unsigned long lastDisplayScrollTime = 0; -const unsigned long DISPLAY_SCROLL_INTERVAL = 2000; // 2 seconds +const unsigned long DISPLAY_SCROLL_INTERVAL = 1000; // 1000 = 1 second +#endif + +// Notification queue +String queuedNotification = ""; +String queuedTitle = ""; +String queuedPriority = ""; void setup() { Serial.begin(115200); + #if defined(ENABLE_SENSORS) || defined(ENABLE_DISPLAY) + Wire.begin(); + #endif + + #ifdef ENABLE_SENSORS // Initialize vibration sensor pin pinMode(VIBRATION_PIN, INPUT); - // Initialize I2C bus - Wire.begin(); - // Initialize light sensor if (!lightMeter.begin(BH1750::CONTINUOUS_HIGH_RES_MODE)) { Serial.println(F("Could not find a valid BH1750 sensor, check wiring!")); while (1) { } } + #endif + #ifdef ENABLE_DISPLAY // Initialize OLED display if (!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) { Serial.println(F("SSD1306 allocation failed")); @@ -78,7 +105,9 @@ void setup() { display.setCursor(0, 0); display.println(F("Initializing...")); display.display(); + #endif + #ifdef ENABLE_WIFI // Connect to WiFi Serial.print("Connecting to "); Serial.println(WIFI_SSID); @@ -91,18 +120,22 @@ void setup() { Serial.println("WiFi connected"); Serial.println("IP address: "); Serial.println(WiFi.localIP()); + #endif + #if defined(ENABLE_DISPLAY) && defined(ENABLE_WIFI) display.clearDisplay(); display.setCursor(0,0); display.println("WiFi Connected"); display.display(); delay(1000); + #endif } bool sendNotification(String message, String title, String priority); void updateDisplay(); void loop() { + #ifdef ENABLE_NOTIFICATIONS // Try to send any queued notification if (queuedNotification != "") { if (sendNotification(queuedNotification, queuedTitle, queuedPriority)) { @@ -114,12 +147,18 @@ void loop() { // Failed, will retry on next loop } } + #endif unsigned long currentTime = millis(); // Sensor readings + #ifdef ENABLE_SENSORS bool currentVibrationState = (digitalRead(VIBRATION_PIN) == LOW); float currentLightLevel = lightMeter.readLightLevel(); + #else + bool currentVibrationState = false; + float currentLightLevel = 0.0; + #endif // Vibration state change logic if (currentVibrationState && !isVibrationActive) { // Vibration is active (LOW) @@ -186,13 +225,18 @@ void loop() { priority = "high"; } + #ifdef ENABLE_NOTIFICATIONS if (!sendNotification(message, title, priority)) { queuedNotification = message; // Failed to send, queue it (overwrites any older one) queuedTitle = title; queuedPriority = priority; } + #else + Serial.println("Notification (Disabled): " + title + " - " + message); + #endif } + #ifdef ENABLE_DISPLAY // Update display data displayData[0] = "Vibration: " + String(isVibrationActive ? "ON" : "OFF"); displayData[1] = "Light: " + String(currentLightLevel) + " lx"; @@ -201,9 +245,11 @@ void loop() { // Update display updateDisplay(); + #endif } bool sendNotification(String message, String title, String priority) { + #ifdef ENABLE_WIFI if (WiFi.status() == WL_CONNECTED) { HTTPClient http; String url = "http://ntfy.sh/" + String(NTFY_TOPIC); @@ -228,9 +274,14 @@ bool sendNotification(String message, String title, String priority) { Serial.println("WiFi Disconnected. Cannot send notification."); return false; } + #else + Serial.println("WiFi Disabled. Notification skipped."); + return true; + #endif } void updateDisplay() { + #ifdef ENABLE_DISPLAY unsigned long currentTime = millis(); // Scroll logic @@ -250,4 +301,5 @@ void updateDisplay() { } display.display(); + #endif }