Lumen
A general-purpose ESP32 sensing and actuation node — ambient telemetry, LED control, MQTT reporting, and persistent settings on a local network.
Problem
Controlled-environment lighting and monitoring projects tend to hard-code one sensor layout and one control loop. Changing hardware or use case means rewriting firmware instead of extending a platform.
Lumen is a local node that reads environmental sensors, drives outputs, and reports telemetry over MQTT. The architecture is generic by design so the same firmware shell can grow toward spectral sensing, direct mode, and multi-node coordination. The firmware is public on GitHub.
Current capabilities
- Ambient light, temperature, and humidity sensing through a dedicated sensor manager
- LED lighting with automatic and manual control paths
- MQTT client for telemetry, status, energy data, and online/offline state
- Persistent configuration via a config manager with validated type boundaries
- Watchdog-backed task scheduling with boot-failure tracking in RTC memory
#include "lumen_command_handler.h"
#include "lumen_config_manager.h"
#include "lumen_energy_tracker.h"
#include "lumen_led_control.h"
#include "lumen_mqtt_client.h"
#include "lumen_sensor_manager.h"
#include "lumen_task_manager.h"
#include "lumen_wifi_manager.h"
RTC_DATA_ATTR static uint8_t boot_failure_count = 0;
bool initWatchdog() {
esp_task_wdt_config_t watchdog_config = {};
watchdog_config.timeout_ms = WATCHDOG_TIMEOUT_MS;
watchdog_config.trigger_panic = true;
// ...
}