Files
kidsbox/README.md
T
Claude 76b02b840c Add install.sh, setup.sh, and update README
install.sh: install ESP-IDF v5.2 + ESP-ADF v2.7, detect existing env,
  write .env file with IDF_PATH/ADF_PATH
setup.sh: prompt for WiFi creds, write sdkconfig.defaults, build,
  optionally flash and prepare SD card
README: rewrite to reflect current architecture (NFC URL streaming,
  web UI, no arduino-esp32), add roadmap and quick start

https://claude.ai/code/session_01MhAnh68DPNnTjcKqjNYDmk
2026-06-13 07:10:28 +00:00

125 lines
3.4 KiB
Markdown

# Kidsbox
A battery-powered, RFID/NFC-tag-controlled audio player for kids.
Place an NFC tag on the box — the mapped audio file or stream plays automatically.
Tags are programmed from a smartphone using any NFC writing app (e.g. NFC Tools).
The box streams from the URL written to the tag, caches it locally for offline play,
and exposes a web interface for playback control and storage management.
|Front|Side|
|-|-|
|![Frontal View](docs/img/front.jpeg)|![Side View](docs/img/side.jpeg)|
---
## Quick Start
### 1. Install the development environment
```bash
./install.sh
```
This installs **ESP-IDF v5.2** and **ESP-ADF v2.7** into `~/esp/` and writes a `.env` file.
Existing installations are detected automatically (via `$IDF_PATH` / `$ADF_PATH`).
### 2. Configure and build
```bash
source .env && source $IDF_PATH/export.sh
./setup.sh
```
`setup.sh` will:
- Prompt for your WiFi SSID and password
- Build the firmware (`idf.py build`)
- Optionally flash to the device
- Optionally prepare an SD card (create directories, copy web UI)
---
## How It Works
1. Write an audio URL to an NFC tag with a smartphone app (e.g. **NFC Tools**).
2. Place the tag on the box → the box reads the URL, streams the audio, and caches it.
3. Subsequent plays of the same tag use the local cache (no internet needed).
4. Removing the tag pauses playback; replacing it resumes.
Without an NDEF URL on a tag, the box falls back to a local mapping file at
`/sdcard/internal/<tag-id>` (plain text, one URL or file path per file).
---
## Web Interface
Once connected to WiFi, open `http://<device-ip>` in a browser.
| Section | What it does |
|---|---|
| Now Playing | Track URI, play/pause/stop, volume slider |
| Device Info | IP address, playback status, cache size, free heap |
| Storage | List and delete cached files |
| Bluetooth | Toggle BT speaker mode (stub — in progress) |
---
## Hardware
### Parts
| Part | Links |
|---|---|
| ESP32-LyraT 4.3 | [Mouser](https://www.mouser.de/ProductDetail/Espressif-Systems/ESP32-LyraT?qs=MLItCLRbWsxPzPCja546ZA%3D%3D) |
| RC522 RFID/NFC module | — |
| SD card (FAT32, any size) | — |
### DIP-Switch (LyraT 4.3)
| Switch | Position | Purpose |
|---|---|---|
| 1 | OFF | Disconnects GPIO 12 from SD-D2 |
| 2 | OFF | Disconnects GPIO 13 from SD-D3 |
| 3 | OFF | Connects GPIO 15 to SD CMD |
| 4 | ON | Connects GPIO 13 to JTAG header |
| 5 | ON | Connects GPIO 12 to JTAG header |
| 6 | OFF | Connects GPIO 13 to SD CLK |
| 7 | OFF | Disconnects GPIO 12 from AUX-in detection |
| 8 | OFF | — |
### RC522 Wiring
> MISO/MOSI pin names are **not** inverted between host and chip on this board.
| RC522 Pin | LyraT v4.3 Pin | GPIO |
|---|---|---|
| 3.3V | 3.3V | — |
| RST | 3.3V | — |
| GND | GND | — |
| SDA | I2C SDA | 18 |
| SCK | I2C SCL | 23 |
| MOSI | JTAG MTCK | 13 |
| MISO | JTAG MTDI | 12 |
### SD Card Layout
```
/sdcard/
www/ ← web interface files (copied by setup.sh)
internal/ ← tag-id → URL/path mapping files (manual)
cache/ ← downloaded audio files (managed automatically)
```
---
## Roadmap
- [x] RFID/NFC tag detection
- [x] NDEF URL reading from NFC tags
- [x] HTTP audio streaming
- [x] Local file cache
- [x] WiFi (native ESP-IDF, no Arduino dependency)
- [x] Web interface — playback controls, storage, device info
- [ ] Volume buttons (hardware)
- [ ] Playlists
- [ ] Bluetooth speaker mode (A2DP sink)