A full-stack IoT weather station and smart home controller built on the ESP32 platform. This was my high school diploma thesis project (HTL Mössingerstraße, 2020–2021), written entirely from scratch — 775 lines of C/C++ before AI coding assistants existed.
- BME280 Sensor Integration: Real-time temperature (°C), atmospheric pressure (hPa), and humidity (%) readings
- Light Sensor: Analog light level measurement with 4-tier classification (Dark → Dim → Bright → Too Bright)
- Motion Detection: PIR-based motion sensing with binary state reporting
- WiFi Auto-Provisioning: AutoConnect captive portal for zero-configuration network setup
- MQTT Telemetry: Publishes all sensor data to configurable MQTT topics at 10-second intervals
- NTP Time Sync: Automatic time synchronization with timezone selection across 24 global zones
- Live Web Dashboard: Self-hosted web server with real-time sensor readings (auto-refresh)
- Serial CLI Configurator: Full command-line interface for runtime MQTT topic/server reconfiguration
- SPIFFS Persistent Storage: All configuration changes survive power cycles via flash filesystem
| Command | Description |
|---|---|
help |
List all available commands |
showIP |
Display current AutoConnect IP |
set TemperatureTopic <topic> |
Change MQTT temperature topic |
set MqttServer <host> |
Change MQTT broker address |
reset MqttTopics |
Restore default MQTT topics |
reset MqttServerSettings |
Restore default broker settings |
stopMqtt / reconnectMqtt |
Stop/restart MQTT connection |
formatSpiff |
Format SPIFFS filesystem |
- MCU: ESP32 (dual-core, WiFi + Bluetooth)
- Sensors: Adafruit BME280 (I²C), analog photoresistor, PIR motion sensor
- Power: USB or battery-powered portable design
┌─────────────┐ I²C ┌──────────┐
│ ESP32 │ ←────────→ │ BME280 │
│ │ └──────────┘
│ WiFi │ ADC ┌──────────┐
│ MQTT │ ←────────→ │ Light │
│ WebServer │ └──────────┘
│ SPIFFS │ GPIO ┌──────────┐
│ Serial CLI │ ←────────→ │ PIR │
└─────────────┘ └──────────┘
│
├──→ MQTT Broker (telemetry)
├──→ Web Dashboard (HTTP)
└──→ Serial Monitor (CLI)
- AutoConnect — WiFi captive portal
- PubSubClient — MQTT client
- Adafruit BME280 — Sensor driver
- SPIFFS — Flash filesystem
Open FINALVersion2.ino in the Arduino IDE with ESP32 board support installed, then upload to your device.
MIT License