Ein ESP32-C6 basiertes IoT-Umgebungsüberwachungssystem mit BME280-Sensor, MAX17048 Batteriemonitor, Deep Sleep und InfluxDB-Integration.
- Übersicht
- Features
- Hardware
- Software
- API-Dokumentation
- Installation
- Konfiguration
- Verwendung
- Projektstruktur
- Entwicklung
- Versionen
- Beitragen
- Lizenz
AmbientGuard ist ein kompaktes, energieeffizientes Umgebungsüberwachungssystem, das mit dem ESP32-C6 Mikrocontroller entwickelt wurde. Das Projekt kombiniert moderne IoT-Technologien mit präzisen Sensoren zur kontinuierlichen Überwachung von Umweltbedingungen. Daten werden über WiFi an eine InfluxDB-Datenbank gesendet und können mit Grafana visualisiert werden.
-
BME280 - Kombinierter Sensor für:
- Temperatur (±1°C Genauigkeit)
- Luftfeuchtigkeit (±3% Genauigkeit)
- Luftdruck (±1 hPa Genauigkeit)
-
MAX17048 - LiPo Fuel Gauge für:
- Batteriespannung (1.25mV Genauigkeit)
- State of Charge (SOC) in Prozent
- WiFi 6 (802.11ax) - Moderne WLAN-Technologie mit vollständiger Abwärtskompatibilität
- Hostname:
AmbientGuard - Automatische Wiederverbindung bei Netzwerkausfällen
- InfluxDB v2 - Zeitreihen-Datenbank für Sensor-Daten
- HTTP-basierte Line Protocol - Effiziente Datenübertragung
- Device-ID Unterstützung - Mehrere ESP32-Geräte unterscheidbar
- Deep Sleep Mode - 5 Minuten Sleep-Zyklus für minimalen Stromverbrauch
- Automatisches Wake-up - Timer-basiertes Aufwachen
- WiFi Cleanup - Optimierte Ressourcennutzung
- 20-Sekunden Safety-Delay - Zeitfenster für Firmware-Flashing beim ersten Boot
- BOOT-Button Modus - Tiefschlaf-Deaktivierung für Entwicklungszwecke
- Wake-up Reason Detection - Unterscheidung zwischen Power-on und Sleep-Wake-up
- Serielle Ausgabe - Detaillierte Logs für Entwicklung und Monitoring
- Umfassende Fehlerbehandlung - Robustes Error-Handling für alle Komponenten
- Modulare Bibliotheks-Architektur - Wiederverwendbare Komponenten
- ESP-IDF 5.5.0 - Aktuelles Framework
- Git-basierte Versionskontrolle - Saubere Entwicklungshistorie
- 2MB Flash Partition Table - Optimierte Speichernutzung
Gesamtansicht der AmbientGuard Hardware
BME280 Sensor im Detail
- ESP32-C6FH4 (QFN32) - Mikrocontroller mit WiFi 6, Bluetooth 5, IEEE 802.15.4
- BME280 - Umwelt-Sensor (I2C-Schnittstelle)
- MAX17048 - LiPo Fuel Gauge (I2C-Schnittstelle)
- USB-C - Stromversorgung und Programmierung
Mikrocontroller: ESP32-C6 (RISC-V, 160MHz)
RAM: 320KB
Flash: 2MB (ESP32-C6FH4)
WiFi: 802.11ax (WiFi 6)
Bluetooth: 5.0
IEEE 802.15.4: Unterstützt
BME280 Sensor:
- VCC → 3.3V
- GND → GND
- SCL → GPIO 14 (I2C Clock)
- SDA → GPIO 20 (I2C Data)
- CSB → 3.3V - I2C Kommunikation
- SDO → GND - Adresse 0x76 verwenden
MAX17048 Fuel Gauge:
- VCC → 3.3V
- GND → GND
- SCL → GPIO 14 (I2C Clock, shared with BME280)
- SDA → GPIO 20 (I2C Data, shared with BME280)
- I2C Adresse: 0x36
- ESP-IDF 5.5.0 - Espressif IoT Development Framework
- PlatformIO - Entwicklungsumgebung
- lib/bme280/ - BME280 Sensor-Driver
- lib/max17048/ - MAX17048 Fuel Gauge-Driver
- lib/wifi_config/ - WLAN-Konfiguration und -Management
- src/influxdb_client.* - InfluxDB HTTP-Client
- C - Systemnahe Programmierung für maximale Effizienz
Initialisiert den BME280 Sensor und konfiguriert die I2C-Schnittstelle.
- Rückgabe:
ESP_OKbei Erfolg, Fehlercode bei Fehler - Verwendung: Muss vor allen anderen BME280-Funktionen aufgerufen werden
Konfiguriert den BME280 Sensor für optimale Messungen.
- Rückgabe:
ESP_OKbei Erfolg, Fehlercode bei Fehler - Konfiguration: Forced Mode, 1x Oversampling, Filter Off
Liest Kalibrierungsdaten aus dem Sensor.
- Parameter:
calib_data- Pointer zur Kalibrierungsdaten Struktur - Rückgabe:
ESP_OKbei Erfolg, Fehlercode bei Fehler
Startet eine Messung im Forced Mode.
- Rückgabe:
ESP_OKbei Erfolg, Fehlercode bei Fehler
Liest Messwerte vom Sensor.
- Parameter:
data- Pointer zur Datenstruktur - Rückgabe:
ESP_OKbei Erfolg, Fehlercode bei Fehler
Komplette Messung: Startet Messung und liest Werte.
- Parameter:
data- Pointer zur Datenstruktur - Rückgabe:
ESP_OKbei Erfolg, Fehlercode bei Fehler
typedef struct {
float temperature; // °C
float pressure; // Pa
float humidity; // %
} bme280_data_t;typedef struct {
// Temperatur Kalibrierung
uint16_t dig_T1;
int16_t dig_T2, dig_T3;
// Luftdruck Kalibrierung
uint16_t dig_P1;
int16_t dig_P2, dig_P3, dig_P4, dig_P5, dig_P6, dig_P7, dig_P8, dig_P9;
// Luftfeuchtigkeit Kalibrierung
uint8_t dig_H1;
int16_t dig_H2, dig_H3;
int16_t dig_H4, dig_H5;
int8_t dig_H6;
} bme280_calib_data_t;Initialisiert den MAX17048 Fuel Gauge und liest die Version.
- Rückgabe:
ESP_OKbei Erfolg, Fehlercode bei Fehler - Verwendung: Muss vor allen anderen MAX17048-Funktionen aufgerufen werden
Liest die Batteriespannung.
- Parameter:
voltage- Pointer zur Spannungsvariable (in Volt) - Rückgabe:
ESP_OKbei Erfolg, Fehlercode bei Fehler - Auflösung: 1.25mV pro LSB
Liest den State of Charge (SOC) der Batterie.
- Parameter:
soc- Pointer zur SOC-Variable (in Prozent, 0-100%) - Rückgabe:
ESP_OKbei Erfolg, Fehlercode bei Fehler
Liest sowohl Spannung als auch SOC.
- Parameter:
data- Pointer zur Datenstruktur - Rückgabe:
ESP_OKbei Erfolg, Fehlercode bei Fehler
typedef struct {
float voltage; // Volt
float soc; // Prozent (0-100)
} max17048_data_t;Event Handler für WiFi-Ereignisse.
- Parameter: Standard ESP-IDF Event Handler Parameter
Initialisiert das WiFi-System. Muss nur einmal beim Start aufgerufen werden.
- Rückgabe:
ESP_OKbei Erfolg, Fehlercode bei Fehler - Hinweis: Nur einmal pro Programmstart aufrufen
Stellt eine WiFi-Verbindung her. Kann mehrfach aufgerufen werden.
- Rückgabe:
ESP_OKbei Erfolg, Fehlercode bei Fehler
Prüft den WiFi-Verbindungsstatus.
- Rückgabe:
truewenn verbunden,falsewenn nicht verbunden
Setzt den Hostname für das ESP32-C6.
- Parameter:
hostname- Der gewünschte Hostname - Rückgabe:
ESP_OKbei Erfolg, Fehlercode bei Fehler
Deinitialisiert das WiFi-System und gibt Ressourcen frei.
- Rückgabe: Keine
Initialisiert den InfluxDB-Client (nur Logging).
- Rückgabe:
ESP_OKbei Erfolg
esp_err_t influxdb_send_sensor_data(float temperature, float humidity, float pressure, float battery_voltage, float battery_soc)
Sendet Sensordaten an InfluxDB.
- Parameter: Alle Sensorwerte (Temperatur, Luftfeuchtigkeit, Druck, Batteriespannung, SOC)
- Rückgabe:
ESP_OKbei Erfolg, Fehlercode bei Fehler
Sendet rohe Line-Protocol-Daten an InfluxDB.
- Parameter:
line_protocol- InfluxDB Line Protocol String - Rückgabe:
ESP_OKbei Erfolg, Fehlercode bei Fehler
Prüft die Verfügbarkeit des InfluxDB-Servers.
- Rückgabe:
truewenn Server erreichbar,falsesonst
Hauptfunktion des AmbientGuard Systems.
Ablauf:
- Safety-Delay für Firmware-Flashing (nur beim ersten Boot)
- BOOT-Button-Check für Flash-Modus
- Hardware-Initialisierung (BME280, MAX17048)
- WiFi-Initialisierung
- Batteriedaten lesen (MAX17048)
- Sensordaten lesen (BME280)
- WiFi-Verbindung herstellen
- Daten an InfluxDB senden
- WiFi trennen und aufräumen
- Deep Sleep aktivieren (5 Minuten)
- PlatformIO installiert
- ESP32-C6 Development Board (ESP32-C6FH4)
- BME280 Sensor
- MAX17048 Fuel Gauge (optional, aber empfohlen)
- USB-C Kabel
- InfluxDB Server (siehe RASPBERRY_PI_SETUP.md)
Aufbau der Hardware
Es ist zu beachten, dass keine Pullup-Widerstände für SDA und SCL benötigt werden, da diese intern aktiviert wurden. Sollte die Adresse 0x77 für den BME280 gewünscht sein, kann SDO auf 3.3V gehängt werden.
Fertiger Aufbau
git clone https://github.com/WindowPlaceBrain/AmbientGuard.git
cd AmbientGuardpio lib installpio run --target upload- Bearbeiten Sie die Datei
src/credentials.h:
#ifndef CREDENTIALS_H
#define CREDENTIALS_H
// WLAN Netzwerk Name (SSID)
#define WIFI_SSID "Ihr-WLAN-Name"
// WLAN Passwort
#define WIFI_PASSWORD "Ihr-WLAN-Passwort"
// Hostname für das ESP32-C6
#define WIFI_HOSTNAME "AmbientGuard"
// Device-ID für mehrere ESP32-Geräte (unterscheidbar in InfluxDB)
#define DEVICE_ID "ESP32_001"
// InfluxDB Konfiguration
#define INFLUXDB_SERVER "192.168.0.198" // IP-Adresse des InfluxDB-Servers
#define INFLUXDB_PORT 8086
#define INFLUXDB_ORG "AmbientGuard"
#define INFLUXDB_BUCKET "sensors"
#define INFLUXDB_TOKEN "Ihr-InfluxDB-Token"
#define INFLUXDB_MEASUREMENT "weather"
#endif // CREDENTIALS_Hpio device monitor --baud 115200- ESP32-C6 mit USB-C verbinden
- Serieller Monitor starten (optional, aber empfohlen)
- System startet automatisch:
- Beim ersten Boot: 20 Sekunden Safety-Delay für Firmware-Flashing
- Hardware-Initialisierung (BME280, MAX17048)
- WiFi-Verbindung
- Sensordaten-Messung
- Datenübertragung an InfluxDB
- Deep Sleep (5 Minuten)
- Wiederholung des Zyklus
Um Deep Sleep während der Entwicklung zu deaktivieren:
- BOOT-Button gedrückt halten während des Starts
- System bleibt aktiv (kein Deep Sleep)
- BOOT-Button loslassen und Reset für normalen Betrieb
I (0) AMBIENTGUARD: =================================
I (10) AMBIENTGUARD: ESP32-C6 AmbientGuard Starting
I (20) AMBIENTGUARD: =================================
I (1020) AMBIENTGUARD: Wake-up from deep sleep (timer)
I (1050) AMBIENTGUARD: Initializing hardware...
I (1120) BME280: Initializing BME280...
I (1250) BME280: BME280 found (Chip ID: 0x60)
I (1280) BME280: BME280 initialized!
I (1300) MAX17048: Initializing MAX17048...
I (1350) MAX17048: MAX17048 found! Version: 0x0001
I (1380) AMBIENTGUARD: Hardware initialization complete
I (1400) AMBIENTGUARD: Initializing WiFi...
I (1500) WIFI_CONFIG: WiFi initialization complete
I (1520) AMBIENTGUARD: Reading battery data...
I (1580) AMBIENTGUARD: Battery: 4.14V (85.3%)
I (1600) AMBIENTGUARD: Reading BME280 sensor data...
I (1650) AMBIENTGUARD: Sensor: T=23.45°C, H=65.30%, P=1013.25hPa
I (1700) AMBIENTGUARD: Connecting to WiFi...
I (2800) WIFI_CONFIG: WiFi connected! IP: 192.168.0.100
I (2850) AMBIENTGUARD: WiFi connected successfully
I (2900) AMBIENTGUARD: Sending data to InfluxDB...
I (3100) INFLUXDB: Data written successfully
I (3150) AMBIENTGUARD: Data sent successfully
I (3200) AMBIENTGUARD: Disconnecting WiFi...
I (3250) AMBIENTGUARD: WiFi disconnected
I (3300) AMBIENTGUARD: =================================
I (3310) AMBIENTGUARD: Cycle complete
I (3320) AMBIENTGUARD: =================================
I (3350) AMBIENTGUARD: Entering deep sleep for 300 seconds...
I (3400) AMBIENTGUARD: Deep sleep configured. Good night!
Siehe RASPBERRY_PI_SETUP.md für Anleitung zur InfluxDB- und Grafana-Installation.
AmbientGuard/
├── lib/ # Bibliotheken
│ ├── bme280/ # BME280 Sensor-Driver
│ │ ├── bme280.h
│ │ ├── bme280.c
│ │ └── CMakeLists.txt
│ ├── max17048/ # MAX17048 Fuel Gauge-Driver
│ │ ├── max17048.h
│ │ └── max17048.c
│ └── wifi_config/ # WLAN-Konfiguration
│ ├── wifi_config.h
│ ├── wifi_config.c
│ └── CMakeLists.txt
├── src/ # Quellcode
│ ├── main.c # Hauptprogramm
│ ├── credentials.h # Credentials (nicht im Git)
│ ├── influxdb_client.h # InfluxDB Client Header
│ ├── influxdb_client.c # InfluxDB Client Implementation
│ └── CMakeLists.txt
├── partitions_2mb.csv # Custom Partition Table (2MB Flash)
├── platformio.ini # PlatformIO-Konfiguration
├── CMakeLists.txt # Haupt-CMake-Konfiguration
├── README.md # Diese Datei
└── RASPBERRY_PI_SETUP.md # InfluxDB/Grafana Setup-Anleitung
# Feature-Branch erstellen
git checkout -b feature/neue-funktion
# Änderungen committen
git add .
git commit -m "Beschreibung der Änderungen"
# Zurück zu develop
git checkout develop
git merge feature/neue-funktion- Serieller Monitor:
pio device monitor --baud 115200 - Log-Level: Konfigurierbar über
esp_log_level_set() - Flash-Modus: BOOT-Button für Entwicklung ohne Deep Sleep
- Coding Style: ESP-IDF Standard
- Kommentare: Doxygen-kompatibel
- Error Handling: Umfassende Fehlerbehandlung mit
esp_err_t
Features:
- Deep Sleep mit 5-Minuten-Zyklus
- Vollständige Hardware-Reinitialisierung nach jedem Wake-up
- NVS-basierte Persistenz entfernt (vereinfachter Code)
- Optimierte WiFi-Verbindungshandhabung
- Stabile Langzeit-Betriebsfähigkeit
Features:
- Deep Sleep Mode mit konfigurierbarer Dauer
- Safety-Features für Firmware-Flashing
- BOOT-Button-Modus für Entwicklung
- Timing-Messungen für Power-Analyse
- InfluxDB-Integration mit Device-ID
Features:
- MAX17048 Fuel Gauge Integration
- Batteriespannung und SOC-Messung
- Korrekte Spannungsberechnung (1.25mV/LSB)
- I2C-Pin-Korrektur (SDA/SCL)
Features:
- ESP32-C6 Mikrocontroller mit WiFi 6 Support
- BME280 Sensor für Temperatur, Luftfeuchtigkeit und Luftdruck
- WLAN-Verbindung mit automatischer Wiederverbindung
- Hostname-Konfiguration "AmbientGuard"
- Serielle Ausgabe für Monitoring und Debugging
- Modulare Bibliotheks-Architektur
- IDE: VS Code mit PlatformIO Extension
- Framework: ESP-IDF 5.5.0
- Board: ESP32-C6-DevKitM-1
- Flash: 2MB (Custom Partition Table)
Dieses Projekt steht unter der GPL-3.0 Lizenz. Siehe LICENSE Datei für Details.
Entwickler: Luca Moser
Email: luca.moser.lm3@gmail.com
Projekt: AmbientGuard - ESP32-C6 IoT Umgebungsüberwachungssystem
Entwickelt mit Liebe für das Internet der Dinge





