feat: moods, emotions, needs

This commit is contained in:
2026-06-05 13:35:41 +02:00
parent 65bd552aec
commit 7f66b93edb
7 changed files with 765 additions and 210 deletions
+52 -37
View File
@@ -164,13 +164,19 @@ Content-Type: application/json
### Konfiguracja WiFi
Dane sieci są na razie hardcoded w `src/main.cpp`:
Dane sieci przechowywane są w pliku `data/config.json` na LittleFS (osobny obszar flash). Plik **nie jest commitowany do repozytorium** (`.gitignore`).
```cpp
const char *WIFI_SSID = "twoja_siec";
const char *WIFI_PASS = "twoje_haslo";
```json
{
"wifi": {
"ssid": "twoja_siec",
"password": "twoje_haslo"
}
}
```
Plik wgrywany jest osobnym poleceniem (`task uploadfs`) — zmiana WiFi nie wymaga rekompilacji firmware.
---
## Instalacja i build
@@ -178,13 +184,36 @@ const char *WIFI_PASS = "twoje_haslo";
### Wymagania
- [PlatformIO](https://platformio.org/) (CLI lub VS Code extension)
- [Task](https://taskfile.dev/) (`brew install go-task`)
### Build i upload
### Pierwsze uruchomienie
```bash
cd esp32-c6
pio run --target upload
pio device monitor
cp data/config.json.example data/config.json # lub edytuj ręcznie
# uzupełnij ssid i password w data/config.json
task flash-monitor # uploadfs + upload + monitor
```
### Typowe komendy
| Komenda | Opis |
|---------|------|
| `task build` | Tylko kompilacja |
| `task flash` | Wgraj filesystem + firmware |
| `task upload` | Wgraj tylko firmware |
| `task uploadfs` | Wgraj tylko `data/config.json` |
| `task monitor` | Monitor portu szeregowego |
| `task flash-monitor` | Pełne wgranie + monitor |
| `task config-upload` | Edytuj config WiFi + wgraj FS |
| `task erase-flash` | Skasuj flash i wgraj od nowa |
| `task` | Lista wszystkich zadań |
### Zmiana WiFi bez rekompilacji
```bash
# Edytuj data/config.json, potem:
task uploadfs
```
### Zależności (pobierane automatycznie)
@@ -196,46 +225,32 @@ bblanchon/ArduinoJson@^7.2.1
mathieucarbou/ESPAsyncWebServer@^3.3.12
```
### platformio.ini
```ini
[env:esp32-c6]
platform = https://github.com/pioarduino/platform-espressif32/releases/download/stable/platform-espressif32.zip
board = seeed_xiao_esp32c6
framework = arduino
lib_deps =
olikraus/U8g2
acrandal/RevEng PAJ7620
bblanchon/ArduinoJson@^7.2.1
mathieucarbou/ESPAsyncWebServer@^3.3.12
build_flags = -std=gnu++17
```
---
## Architektura kodu
Cały projekt mieści się w jednym pliku `src/main.cpp` (~650 linii).
Cały projekt mieści się w jednym pliku `src/main.cpp` (~700 linii).
```
setup()
Wire.begin(22, 23) ← I2C0 HP dla obu urządzeń
u8g2.begin() SSD1306 HW I2C
sensor.begin(&Wire) ← PAJ7620 HW I2C
loadWiFiConfig() ← LittleFS /config.json → WIFI_SSID/PASS
Wire.begin(22, 23)I2C0 HP dla obu urządzeń
u8g2.begin() ← SSD1306 HW I2C
sensor.begin(&Wire) ← PAJ7620 HW I2C
connectWiFi()
configTzTime(...) ← NTP sync
setupHttpServer() ← AsyncWebServer port 80
configTzTime(...) ← NTP sync
setupHttpServer() ← AsyncWebServer port 80
loop() ← ~200 fps bez rysowania
sensor.readGesture() ← polling co 500 ms
loop() ← ~200 fps bez rysowania
sensor.readGesture() ← polling co 500 ms
handleGesture()
executeAction() ← overlay na OLED
fireWebhook() ← FreeRTOS task (async)
executeAction() ← overlay na OLED
fireWebhook() ← FreeRTOS task (async)
setBuddyMood()
updateBuddyAnim() ← tick co 50 ms (stan)
showBuddyScreen() ← rysowanie co 50 ms (~20 fps)
showDateTimeScreen() ← overlay jeśli aktywny
showWiFiStatusScreen() ← overlay jeśli aktywny
updateBuddyAnim() ← tick co 50 ms (stan)
showBuddyScreen() ← rysowanie co 50 ms (~20 fps)
showDateTimeScreen() ← overlay jeśli aktywny
showWiFiStatusScreen() ← overlay jeśli aktywny
```
### Kluczowe decyzje techniczne