48 lines
1.9 KiB
Markdown
48 lines
1.9 KiB
Markdown
# KodeDot FTP Explorer — Agent Memory
|
|
|
|
## Project Overview
|
|
FTP server for Kode Dot (ESP32-S3) that serves the microSD card over Wi-Fi.
|
|
Reads Wi-Fi credentials from `SD:/Wi-Fi.json`, syncs time via NTP (Vienna), displays status on AMOLED via LVGL.
|
|
|
|
## Hardware
|
|
| Feature | Detail |
|
|
|---------|--------|
|
|
| MCU | ESP32-S3, 240 MHz dual-core, 32 MB flash, 8 MB PSRAM |
|
|
| Display | AMOLED 2.13" 410x502 (CO5300 QSPI + CST820 I2C touch) |
|
|
| SD Card | SDMMC 1-bit: CMD=GPIO5, CLK=GPIO6, D0=GPIO7, CD=EXP14 |
|
|
| IO Exp | TCA9555 @ 0x20 (buttons, SD detect, interrupts) |
|
|
| LED | NeoPixel GPIO4 (1 LED, GRB 800 kHz) |
|
|
| Partition | App at 0x400000 (8 MB). KodeOS bootloader below — DO NOT TOUCH |
|
|
| Port | COM10 |
|
|
|
|
## Key APIs
|
|
- `DisplayManager` — `init()`, `update()`, `setBrightness()`, `getTouchCoordinates()`
|
|
- `SD_MMC` — `setPins(clk=6, cmd=5, d0=7)`, `begin("/sdcard", 1)` (1-bit mode)
|
|
- `SimpleFTPServer` — `FtpServer ftpSrv; ftpSrv.begin("user","pass"); ftpSrv.handleFTP();`
|
|
- `ArduinoJson` — parse `[{"ssid":"...","pass":"..."}]` from SD
|
|
- NTP — `configTzTime("CET-1CEST,M3.5.0,M10.5.0/3", "pool.ntp.org")`
|
|
|
|
## Build Notes
|
|
- Build flag `-DDEFAULT_STORAGE_TYPE_ESP32=STORAGE_SD_MMC` overrides FtpServerKey.h
|
|
- Flash: `esptool --chip esp32s3 ... write-flash 0x400000 <bin>` (preserves bootloader)
|
|
- Upload speed: 460800 baud
|
|
|
|
## Git Remote
|
|
- Host: git.lago.dev
|
|
- Repo: KodeDot-FTP-Explorer
|
|
- Auth: service key token
|
|
|
|
## Findings & Notes
|
|
- SimpleFTPServer v3.0.2 supports SD_MMC on ESP32, passive mode, single session
|
|
- SFTP not feasible on ESP32 (crypto overhead too high)
|
|
- Vienna timezone string: `CET-1CEST,M3.5.0,M10.5.0/3`
|
|
- FTP credentials: `kode`/`kode`
|
|
- SD card uses `SD_MMC.begin("/sdcard", 1)` — the `1` means 1-bit bus width
|
|
- LVGL v8.3.x API (not v9) — uses `lv_disp_drv_t`, `lv_label_create`, etc.
|
|
|
|
## Status
|
|
- [ ] Phase 1: Project setup & git
|
|
- [ ] Phase 2: Backend (Wi-Fi + SD + FTP + NTP)
|
|
- [ ] Phase 3: Frontend (LVGL UI)
|
|
- [ ] Phase 4: Integration & polish
|