mirror of
https://github.com/skoelle/m5stack-dashboard.git
synced 2026-09-18 09:00:24 +00:00
Compare commits
4
Commits
3640e2465c
..
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d0d4b29040 | ||
|
|
43979c883d | ||
|
|
41089a5b17 | ||
|
|
9b4c956eb6 |
@@ -0,0 +1,6 @@
|
|||||||
|
title: "M5Stack Dashboard"
|
||||||
|
emoji: "🌡️"
|
||||||
|
category: code
|
||||||
|
subcategory: "Maker Firmware"
|
||||||
|
status: active
|
||||||
|
stack: [C++, Arduino, ESP32, PlatformIO, ArduinoJson]
|
||||||
@@ -5,3 +5,18 @@
|
|||||||
```sh
|
```sh
|
||||||
.venv-platformio/bin/pio run
|
.venv-platformio/bin/pio run
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Lizenz
|
||||||
|
|
||||||
|
MIT License, Copyright (c) 2026 Stefan Koelle (https://stefankoelle.de)
|
||||||
|
|
||||||
|
- `LICENSE` — vollständiger Lizenztext im Projektroot
|
||||||
|
- Jede `.cpp`/`.h`-Datei beginnt mit:
|
||||||
|
```
|
||||||
|
// Copyright (c) 2026 Stefan Koelle (https://stefankoelle.de) - MIT License
|
||||||
|
```
|
||||||
|
- Jede `.sh`-Datei beginnt mit:
|
||||||
|
```
|
||||||
|
# Copyright (c) 2026 Stefan Koelle (https://stefankoelle.de) - MIT License
|
||||||
|
```
|
||||||
|
- `README.md` — Copyright-Verweis am Ende der Datei
|
||||||
|
|||||||
@@ -0,0 +1,21 @@
|
|||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2026 Stefan Koelle (https://stefankoelle.de)
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
# M5Stack Core Dashboard
|
# 🌤️ M5Stack Core Dashboard
|
||||||
|
|
||||||
Wetter-, Kalender- und MVG-Abfahrten-Dashboard für den M5Stack Core (ESP32),
|
Wetter-, Kalender- und MVG-Abfahrten-Dashboard für den M5Stack Core (ESP32),
|
||||||
gesteuert über die 3 eingebauten Buttons (A, B, C).
|
gesteuert über die 3 eingebauten Buttons (A, B, C).
|
||||||
@@ -8,7 +8,7 @@ gesteuert über die 3 eingebauten Buttons (A, B, C).
|
|||||||

|

|
||||||

|

|
||||||
|
|
||||||
## Voraussetzungen
|
## ⚙️ Voraussetzungen
|
||||||
|
|
||||||
- Python 3 (für das lokale venv, in dem PlatformIO installiert wird)
|
- Python 3 (für das lokale venv, in dem PlatformIO installiert wird)
|
||||||
- Kein globales `pip install platformio` nötig, alle Skripte legen sich ihr
|
- Kein globales `pip install platformio` nötig, alle Skripte legen sich ihr
|
||||||
@@ -18,7 +18,7 @@ gesteuert über die 3 eingebauten Buttons (A, B, C).
|
|||||||
die Windows-Skripte automatisch den `py`-Launcher (`py -3`), der zuverlässig
|
die Windows-Skripte automatisch den `py`-Launcher (`py -3`), der zuverlässig
|
||||||
Python 3 findet. Prüfen mit: `py -3 --version`
|
Python 3 findet. Prüfen mit: `py -3 --version`
|
||||||
|
|
||||||
## Setup
|
## 🔧 Setup
|
||||||
|
|
||||||
1. WLAN-Zugangsdaten eintragen:
|
1. WLAN-Zugangsdaten eintragen:
|
||||||
```
|
```
|
||||||
@@ -30,12 +30,12 @@ Python 3 findet. Prüfen mit: `py -3 --version`
|
|||||||
2. Beim ersten Aufruf eines Skripts wird automatisch ein lokales venv unter
|
2. Beim ersten Aufruf eines Skripts wird automatisch ein lokales venv unter
|
||||||
`.venv-platformio/` angelegt.
|
`.venv-platformio/` angelegt.
|
||||||
|
|
||||||
## Nur bauen (Test ohne Gerät)
|
## 🔨 Nur bauen (Test ohne Gerät)
|
||||||
|
|
||||||
Linux/macOS: `./scripts/build.sh`
|
Linux/macOS: `./scripts/build.sh`
|
||||||
Windows: `scripts\build.cmd`
|
Windows: `scripts\build.cmd`
|
||||||
|
|
||||||
## Bauen + Flashen
|
## ⚡ Bauen + Flashen
|
||||||
|
|
||||||
Linux/macOS: `./scripts/deploy.sh [/dev/ttyUSB0]`
|
Linux/macOS: `./scripts/deploy.sh [/dev/ttyUSB0]`
|
||||||
Windows: `scripts\deploy.cmd [COM4]`
|
Windows: `scripts\deploy.cmd [COM4]`
|
||||||
@@ -43,7 +43,7 @@ Windows: `scripts\deploy.cmd [COM4]`
|
|||||||
**Wichtig**: Vor dem Flashen sicherstellen, dass keine andere Anwendung
|
**Wichtig**: Vor dem Flashen sicherstellen, dass keine andere Anwendung
|
||||||
(z.B. Arduino IDE mit offenem Monitor) den COM-Port belegt.
|
(z.B. Arduino IDE mit offenem Monitor) den COM-Port belegt.
|
||||||
|
|
||||||
## Bedienung
|
## 🎮 Bedienung
|
||||||
|
|
||||||
| Button | Funktion |
|
| Button | Funktion |
|
||||||
|---|---|
|
|---|---|
|
||||||
@@ -54,33 +54,32 @@ Windows: `scripts\deploy.cmd [COM4]`
|
|||||||
Nach 5 Minuten ohne Tastendruck springt das Gerät automatisch zurück zur
|
Nach 5 Minuten ohne Tastendruck springt das Gerät automatisch zurück zur
|
||||||
Hauptseite. Hauptseite: Refresh alle 10 Minuten. MVG: jede Minute.
|
Hauptseite. Hauptseite: Refresh alle 10 Minuten. MVG: jede Minute.
|
||||||
|
|
||||||
## Textdarstellung (Umlaute)
|
## 🔤 Textdarstellung (Umlaute)
|
||||||
|
|
||||||
`include/text_utils.h` wandelt UTF-8-Umlaute automatisch in ASCII um
|
`include/text_utils.h` wandelt UTF-8-Umlaute automatisch in ASCII um
|
||||||
(ö -> oe, ä -> ae, ü -> ue, ß -> ss), da der Standardfont sie nicht
|
(ö -> oe, ä -> ae, ü -> ue, ß -> ss), da der Standardfont sie nicht
|
||||||
korrekt darstellt.
|
korrekt darstellt.
|
||||||
|
|
||||||
## Datumsformat im Kalender
|
## 📅 Datumsformat im Kalender
|
||||||
|
|
||||||
Kurzformat `Wochentag Tag.Monat. Stunde:Minute`, z.B. `Mo 3.8. 14:00`.
|
Kurzformat `Wochentag Tag.Monat. Stunde:Minute`, z.B. `Mo 3.8. 14:00`.
|
||||||
Ganztägige Termine ohne Uhrzeit, z.B. `Mo 3.8.`. Der Wochentag wird rein
|
Ganztägige Termine ohne Uhrzeit, z.B. `Mo 3.8.`. Der Wochentag wird rein
|
||||||
rechnerisch ermittelt (`include/date_utils.h`), keine NTP-Sync nötig.
|
rechnerisch ermittelt (`include/date_utils.h`), keine NTP-Sync nötig.
|
||||||
|
|
||||||
## Icons
|
## 🎨 Icons
|
||||||
|
|
||||||
Alle Icons werden prozedural gezeichnet (`src/icons/icons.h`), um Flash zu
|
Alle Icons werden prozedural gezeichnet (`src/icons/icons.h`), um Flash zu
|
||||||
sparen. "Gewitter" wird durch Wolke+Blitz optisch von reiner Bewölkung
|
sparen. "Gewitter" wird durch Wolke+Blitz optisch von reiner Bewölkung
|
||||||
unterschieden. Das Kalender-Icon ist ein echtes Kalenderblatt-Symbol statt
|
unterschieden. Das Kalender-Icon ist ein echtes Kalenderblatt-Symbol statt
|
||||||
einer Checkbox.
|
einer Checkbox.
|
||||||
|
|
||||||
## GitHub Actions Build-Check
|
## 🔄 GitHub Actions Build-Check
|
||||||
|
|
||||||
`.github/workflows/build.yml` kompiliert das Projekt bei jedem Push, ohne
|
`.github/workflows/build.yml` kompiliert das Projekt bei jedem Push, ohne
|
||||||
echte Zugangsdaten zu benötigen. Es wird dort automatisch eine
|
echte Zugangsdaten zu benötigen. Es wird dort automatisch eine
|
||||||
Wegwerf-`secrets.h` aus `secrets.h.example` erzeugt, die nie ins Repo
|
Wegwerf-`secrets.h` aus `secrets.h.example` erzeugt, die nie ins Repo
|
||||||
gelangt.
|
gelangt.
|
||||||
|
|
||||||
## Git
|
---
|
||||||
|
|
||||||
Noch nicht initialisiert. Bei Bedarf: `git init && git add . && git commit -m "Initial"`.
|
Licensed under the [MIT License](LICENSE) - Copyright (c) 2026 Stefan Koelle (https://stefankoelle.de)
|
||||||
`include/secrets.h` und `.venv-platformio/` sind bereits in `.gitignore`.
|
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
// Copyright (c) 2026 Stefan Koelle (https://stefankoelle.de) - MIT License
|
||||||
#pragma once
|
#pragma once
|
||||||
#include <Arduino.h>
|
#include <Arduino.h>
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
// Copyright (c) 2026 Stefan Koelle (https://stefankoelle.de) - MIT License
|
||||||
#pragma once
|
#pragma once
|
||||||
#include <Arduino.h>
|
#include <Arduino.h>
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
// Copyright (c) 2026 Stefan Koelle (https://stefankoelle.de) - MIT License
|
||||||
#pragma once
|
#pragma once
|
||||||
#include <M5Stack.h>
|
#include <M5Stack.h>
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
# Copyright (c) 2026 Stefan Koelle (https://stefankoelle.de) - MIT License
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
cd "$(dirname "$0")/.."
|
cd "$(dirname "$0")/.."
|
||||||
VENV_DIR=".venv-platformio"
|
VENV_DIR=".venv-platformio"
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
# Copyright (c) 2026 Stefan Koelle (https://stefankoelle.de) - MIT License
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
cd "$(dirname "$0")/.."
|
cd "$(dirname "$0")/.."
|
||||||
VENV_DIR=".venv-platformio"
|
VENV_DIR=".venv-platformio"
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
// Copyright (c) 2026 Stefan Koelle (https://stefankoelle.de) - MIT License
|
||||||
#include "calendar_api.h"
|
#include "calendar_api.h"
|
||||||
#include "http_client.h"
|
#include "http_client.h"
|
||||||
#include "../../include/secrets.h"
|
#include "../../include/secrets.h"
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
// Copyright (c) 2026 Stefan Koelle (https://stefankoelle.de) - MIT License
|
||||||
#pragma once
|
#pragma once
|
||||||
#include <Arduino.h>
|
#include <Arduino.h>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
// Copyright (c) 2026 Stefan Koelle (https://stefankoelle.de) - MIT License
|
||||||
#include "departures_api.h"
|
#include "departures_api.h"
|
||||||
#include "http_client.h"
|
#include "http_client.h"
|
||||||
#include "../../include/secrets.h"
|
#include "../../include/secrets.h"
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
// Copyright (c) 2026 Stefan Koelle (https://stefankoelle.de) - MIT License
|
||||||
#pragma once
|
#pragma once
|
||||||
#include <Arduino.h>
|
#include <Arduino.h>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
// Copyright (c) 2026 Stefan Koelle (https://stefankoelle.de) - MIT License
|
||||||
#include "http_client.h"
|
#include "http_client.h"
|
||||||
#include <HTTPClient.h>
|
#include <HTTPClient.h>
|
||||||
#include <WiFi.h>
|
#include <WiFi.h>
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
// Copyright (c) 2026 Stefan Koelle (https://stefankoelle.de) - MIT License
|
||||||
#pragma once
|
#pragma once
|
||||||
#include <Arduino.h>
|
#include <Arduino.h>
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
// Copyright (c) 2026 Stefan Koelle (https://stefankoelle.de) - MIT License
|
||||||
#include "weather_api.h"
|
#include "weather_api.h"
|
||||||
#include "http_client.h"
|
#include "http_client.h"
|
||||||
#include "../../include/secrets.h"
|
#include "../../include/secrets.h"
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
// Copyright (c) 2026 Stefan Koelle (https://stefankoelle.de) - MIT License
|
||||||
#pragma once
|
#pragma once
|
||||||
#include <Arduino.h>
|
#include <Arduino.h>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
// Copyright (c) 2026 Stefan Koelle (https://stefankoelle.de) - MIT License
|
||||||
#pragma once
|
#pragma once
|
||||||
#include <M5Stack.h>
|
#include <M5Stack.h>
|
||||||
#include "theme.h"
|
#include "theme.h"
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
// Copyright (c) 2026 Stefan Koelle (https://stefankoelle.de) - MIT License
|
||||||
#include <M5Stack.h>
|
#include <M5Stack.h>
|
||||||
#include <WiFi.h>
|
#include <WiFi.h>
|
||||||
#include "../include/secrets.h"
|
#include "../include/secrets.h"
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
// Copyright (c) 2026 Stefan Koelle (https://stefankoelle.de) - MIT License
|
||||||
#include "calendar_detail_screen.h"
|
#include "calendar_detail_screen.h"
|
||||||
#include <M5Stack.h>
|
#include <M5Stack.h>
|
||||||
#include "../../include/theme.h"
|
#include "../../include/theme.h"
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
// Copyright (c) 2026 Stefan Koelle (https://stefankoelle.de) - MIT License
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
void renderCalendarDetailScreen(bool forceRefresh = false);
|
void renderCalendarDetailScreen(bool forceRefresh = false);
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
// Copyright (c) 2026 Stefan Koelle (https://stefankoelle.de) - MIT License
|
||||||
#include "home_screen.h"
|
#include "home_screen.h"
|
||||||
#include <M5Stack.h>
|
#include <M5Stack.h>
|
||||||
#include "../../include/theme.h"
|
#include "../../include/theme.h"
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
// Copyright (c) 2026 Stefan Koelle (https://stefankoelle.de) - MIT License
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
void renderHomeScreen(bool forceRefresh = false);
|
void renderHomeScreen(bool forceRefresh = false);
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
// Copyright (c) 2026 Stefan Koelle (https://stefankoelle.de) - MIT License
|
||||||
#include "mvg_screen.h"
|
#include "mvg_screen.h"
|
||||||
#include <M5Stack.h>
|
#include <M5Stack.h>
|
||||||
#include "../../include/theme.h"
|
#include "../../include/theme.h"
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
// Copyright (c) 2026 Stefan Koelle (https://stefankoelle.de) - MIT License
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
void renderMvgScreen(bool forceRefresh = false);
|
void renderMvgScreen(bool forceRefresh = false);
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
// Copyright (c) 2026 Stefan Koelle (https://stefankoelle.de) - MIT License
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
enum class ScreenId {
|
enum class ScreenId {
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
// Copyright (c) 2026 Stefan Koelle (https://stefankoelle.de) - MIT License
|
||||||
#include "weather_detail_screen.h"
|
#include "weather_detail_screen.h"
|
||||||
#include <M5Stack.h>
|
#include <M5Stack.h>
|
||||||
#include "../../include/theme.h"
|
#include "../../include/theme.h"
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
// Copyright (c) 2026 Stefan Koelle (https://stefankoelle.de) - MIT License
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
void renderWeatherDetailScreen(bool forceRefresh = false);
|
void renderWeatherDetailScreen(bool forceRefresh = false);
|
||||||
|
|||||||
Reference in New Issue
Block a user