|
1 | | - |
2 | 1 | <p align="center"> |
3 | 2 | <img src="https://reset42.de/reset42.svg" alt="reset42 Logo" width="180"/> |
4 | 3 | </p> |
5 | 4 |
|
6 | | -# reset42 Gartensensor |
| 5 | +# reset42 Gardensensor |
7 | 6 |
|
8 | | -**Plug & Play WLAN-Gartensensor für Maker, Bastler & Automatisierer – mit Raspberry Pi Pico W, BME280, VEML7700 und MQTT.** |
| 7 | +**Plug & Play WLAN-Gartensensor für Maker, Bastler und Automatisierungs-Fans – basierend auf Raspberry Pi Pico W, BME280, VEML7700 und MQTT.** |
9 | 8 | **Läuft mit MicroPython – lokal, modular, ohne Cloud.** |
10 | 9 |
|
11 | 10 | --- |
12 | 11 |
|
13 | 12 | ## 🌱 Funktionen |
14 | 13 |
|
15 | | -- 📶 **WiFi-fähig** – inkl. Fallback-WLAN und statischer IP (optional) |
16 | | -- 🌡️ Echtzeitdaten: Temperatur, Luftfeuchte, Luftdruck, Helligkeit (Lux) |
17 | | -- 🔄 **Asynchrone Runtime** via `uasyncio` |
18 | | -- 📡 **MQTT-Support** für Logging, Smart Home & Automatisierung |
19 | | -- 💡 **Status-LED** zur Fehleranzeige |
20 | | -- 🛠️ Vollständig modular, quelloffen & leicht erweiterbar (MIT-Lizenz) |
| 14 | +- 📶 **WLAN-fähig** – inkl. Fallback-Netzwerk und optionaler statischer IP |
| 15 | +- 🌡️ Live-Daten: Temperatur, Luftfeuchtigkeit, Luftdruck, Licht (Lux) |
| 16 | +- 🧪 **Test- & Demo-Modus:** Sensordaten und MQTT-Publishing über `config.py` simulieren (ideal für Entwicklung & Tests) |
| 17 | +- 🧩 **Flexibles MQTT-Format:** Felder & Reihenfolge konfigurierbar |
| 18 | +- 📡 **MQTT-Unterstützung** für Logging, Smart Home & Automatisierung |
| 19 | +- 💡 **Status-LED** für Fehlermeldungen |
| 20 | +- 🛠️ Vollständig modular, quelloffen & einfach erweiterbar (MIT-Lizenz) |
21 | 21 |
|
22 | 22 | --- |
23 | 23 |
|
24 | 24 | ## 🔧 Hardware |
25 | 25 |
|
26 | | -- [x] **Raspberry Pi Pico W** (MicroPython-fähig) |
27 | | -- [x] **BME280** (I2C – Temperatur, Feuchtigkeit, Luftdruck) |
28 | | -- [x] **VEML7700** (I2C – Lichtstärke in Lux) |
29 | | -- [ ] **Status-LED** (ansteuerbar, optional) |
30 | | -- [ ] **weitere I2C-Sensoren optional integrierbar** |
| 26 | +- [x] **Raspberry Pi Pico W** (MicroPython-kompatibel) |
| 27 | +- [x] **BME280** (I2C – Temperatur, Luftfeuchte, Luftdruck) |
| 28 | +- [x] **VEML7700** (I2C – Lichtintensität in Lux) |
| 29 | +- [ ] **Status-LED** (steuerbar, optional) |
| 30 | +- [ ] **Optional** zusätzliche I2C-Sensoren |
31 | 31 |
|
32 | 32 | --- |
33 | 33 |
|
34 | 34 | ## ⚙️ Installation |
35 | 35 |
|
36 | 36 | 1. **MicroPython flashen** |
37 | | - Lade das passende `.uf2`-Image für den Pico W von |
| 37 | + Passendes `.uf2`-Image für den Pico W herunterladen von: |
38 | 38 | 👉 [micropython.org/download/rp2-pico-w](https://micropython.org/download/rp2-pico-w) |
39 | 39 |
|
40 | | -2. **Dateien übertragen** |
41 | | - - Kopiere den Inhalt von `src/lib/` in das Hauptverzeichnis des Pico W |
| 40 | +2. **Dateien hochladen** |
| 41 | + - Alles aus `src/lib/` ins Hauptverzeichnis des Pico W kopieren |
42 | 42 | (z. B. mit Thonny, `rshell`, `ampy` oder WebREPL) |
43 | | - - Kopiere `main.py` ebenfalls ins Hauptverzeichnis |
| 43 | + - Zusätzlich `main.py` ins Hauptverzeichnis kopieren |
44 | 44 |
|
45 | 45 | 3. **`config.py` anpassen** |
46 | 46 | - WLAN-Daten, MQTT-Broker, Sensor-Pins etc. |
| 47 | + - Sensor-Modi konfigurieren ("active", "dummy", "inactive") sowie MQTT-Felder |
47 | 48 |
|
48 | | -4. **Los geht's!** |
| 49 | +4. **Los geht’s!** |
49 | 50 | - Reboot → `main.py` startet automatisch |
50 | 51 | - Status-LED blinkt bei Fehlern (siehe Troubleshooting) |
51 | 52 |
|
52 | 53 | --- |
53 | 54 |
|
54 | 55 | ## 🧾 Beispiel `config.py` |
55 | 56 |
|
56 | | -Siehe [src/lib/config.py](src/lib/config.py) im Repo für Details: |
| 57 | +Details siehe [src/lib/config.py](src/lib/config.py) im Repository: |
57 | 58 |
|
58 | 59 | ```python |
59 | | -SSID = "MeinWLAN" |
60 | | -PASSWORD = "supergeheim" |
61 | | -STATIC_IP = "" # leer = DHCP |
| 60 | +SSID = "MyWiFi" |
| 61 | +PASSWORD = "supersecret" |
| 62 | +STATIC_IP = "" # leer lassen für DHCP |
62 | 63 |
|
63 | 64 | MQTT_BROKER = "192.168.1.50" |
64 | 65 | MQTT_PORT = 1883 |
65 | 66 | MQTT_CLIENT_ID = "sensor_indoor" |
66 | 67 |
|
67 | | -VEML_SDA = 0 |
68 | | -VEML_SCL = 1 |
69 | | -BME_SDA = 2 |
70 | | -BME_SCL = 3 |
71 | | -ONBOARD_LED = "LED" |
| 68 | +# Sensor- & MQTT-Modi |
| 69 | +VEML_MODE = "dummy" # "active", "dummy", "inactive" |
| 70 | +BME_MODE = "inactive" # "active", "dummy", "inactive" |
| 71 | +MQTT_MODE = "active" # "active", "dummy", "inactive" |
| 72 | + |
| 73 | +# MQTT Payload-Felder |
| 74 | +MQTT_PAYLOAD_FIELDS = [ |
| 75 | + "date", |
| 76 | + "time", |
| 77 | + "temp", |
| 78 | + "pressure", |
| 79 | + "humidity", |
| 80 | + "lux", |
| 81 | +] |
72 | 82 | ``` |
73 | 83 |
|
74 | 84 | --- |
75 | 85 |
|
76 | | -## 📌 Standard-Pinout |
| 86 | +## 📌 Standard-Pinbelegung |
77 | 87 |
|
78 | | -| Komponente | SDA | SCL | |
79 | | -|--------------|-----|-----| |
80 | | -| VEML7700 | GP0 | GP1 | |
81 | | -| BME280 | GP2 | GP3 | |
| 88 | +| Komponente | SDA | SCL | VCC (Power) | |
| 89 | +|-------------|-----|-----|-------------| |
| 90 | +| VEML7700 | GP0 | GP1 | GP15 | |
| 91 | +| BME280 | GP2 | GP3 | GP14 | |
82 | 92 |
|
83 | | -| Funktion | Pin | |
84 | | -|------------------|------------| |
85 | | -| Onboard-LED | "LED" | |
86 | | -| VEML Reset GPIO | GP15 | |
| 93 | +| Funktion | Pin | |
| 94 | +|-------------------|------------| |
| 95 | +| Onboard-LED | "LED" | |
| 96 | +| VEML Reset GPIO | GP15 | |
87 | 97 |
|
88 | 98 | --- |
89 | 99 |
|
90 | | -## 🧠 Architektur (Kurzfassung) |
| 100 | +## 🧠 Architekturübersicht |
91 | 101 |
|
92 | | -- `main.py`: Zentrale Ablaufsteuerung (WLAN, MQTT, Sensoren, LED) |
| 102 | +- `main.py`: Hauptsteuerung (WLAN, MQTT, Sensoren, LED) |
93 | 103 | - `lib/`: |
94 | | - - `wifi.py`: Verbindet mit primärem oder Fallback-WLAN |
95 | | - - `mqtt.py`: Verbindet zum Broker, sendet JSON-Daten |
96 | | - - `sensors.py`: Liest BME280 + VEML7700, kann Reset auslösen |
97 | | - - `leds.py`: Ansteuerung der Onboard-LED für Statusanzeigen |
98 | | - - `config.py`: Konfiguration |
99 | | - - `state.py`: Zustandscodes (z. B. `SUCCESS`, `FATAL_ERROR`) |
| 104 | + - `wifi.py`: Verbindung zu primärem oder Fallback-WLAN |
| 105 | + - `mqtt.py`: Verbindet mit Broker, sendet JSON, Dummy-Modus |
| 106 | + - `sensors.py`: Liest BME280 & VEML7700 (real oder simuliert) |
| 107 | + - `leds.py`: LED-Ansteuerung für Statussignale |
| 108 | + - `config.py`: Zentrale Konfiguration (WLAN, MQTT, Sensoren, Payload) |
| 109 | + - `state.py`: Rückgabecodes (SUCCESS, FATAL_ERROR, …) |
| 110 | + |
| 111 | +--- |
| 112 | + |
| 113 | +## 🚨 Fehlersignale (LED) |
| 114 | + |
| 115 | +| Problem | LED-Blinkmuster | Bedeutung | |
| 116 | +|-----------------|---------------------|----------------------------| |
| 117 | +| WLAN-Fehler | 1× langsam | Keine Verbindung möglich | |
| 118 | +| MQTT-Fehler | 2× mittel | Broker nicht erreichbar | |
| 119 | +| Sensor-Fehler | 3× schnell | Sensor antwortet nicht | |
100 | 120 |
|
101 | 121 | --- |
102 | 122 |
|
103 | | -## 🚨 Fehlersuche |
| 123 | +## 🖼️ Gehäuse, STL & Zusammenbau |
104 | 124 |
|
105 | | -| Fehler | LED blinkt | Beschreibung | |
106 | | -|--------|------------|--------------| |
107 | | -| WiFi-Fehler | 1× langsam | Keine Verbindung zu WLAN | |
108 | | -| MQTT-Fehler | 2× mittel | Broker nicht erreichbar | |
109 | | -| Sensorfehler | 3× schnell | Sensorantwort fehlerhaft | |
| 125 | +- **STL-Dateien und Anleitung folgen in Kürze!** |
| 126 | +- Das Projekt richtet sich an Maker – gerne Ideen via Issue oder PR beisteuern. |
110 | 127 |
|
111 | 128 | --- |
112 | 129 |
|
113 | 130 | ## 🔒 Lizenz |
114 | 131 |
|
115 | | -reset42 Gardensensor ist Open Source und unter der **MIT-Lizenz** veröffentlicht. |
116 | | -Nutzung für private & kommerzielle Projekte erlaubt – siehe `LICENSE`. |
| 132 | +reset42 Gardensensor ist Open Source und steht unter der **MIT-Lizenz**. |
| 133 | +Private & kommerzielle Nutzung erlaubt – siehe `LICENSE`. |
117 | 134 |
|
118 | 135 | --- |
119 | 136 |
|
120 | | -**Projektstatus:** aktiv gepflegt – weitere Sensoren, Web-Oberfläche & Sleep-Modus geplant. |
| 137 | +**Projektstatus:** aktiv gepflegt – weitere Sensoren, Webinterface & Sleep-Modus geplant. |
| 138 | +**STL-Dateien und Montageanleitung folgen bald.** |
121 | 139 |
|
122 | 140 | Fragen, Ideen oder Feedback? → [reset42.de](https://reset42.de) |
0 commit comments