mirror of
https://github.com/sweidac/kidsbox.git
synced 2026-10-27 22:52:57 +01:00
A printable reimagining of the wooden Kidsbox: rectangular cabinet with two front speakers, removable top lid (NFC tag rests there, reader mounts beneath), and swappable speaker mounts. - kidsbox.scad: master model + part dispatcher (body/lid/speaker_adapter/grill) - params.scad: all tunable dimensions in one place - lib.scad: helper modules (rounded shell, bosses, bolt circles) - Fixed front-panel speaker interface + swappable adapter so any driver fits by printing a new adapter (edit spk_* params, re-export) - Internal mounts: 2x18650 cradle, ESP32-LyraT standoffs, RC522 under lid, 3 buttons on lid, USB/charge + power-switch side ports, back-wall vents - Snap-in speaker grills - Makefile to export STLs and render previews (headless via xvfb) - Exported STLs and preview renders included - Link enclosure from main README Dimensions are sensible defaults from the reference photos and common parts; README flags the fit-critical values to verify before mass-printing. https://claude.ai/code/session_01MhAnh68DPNnTjcKqjNYDmk
136 lines
3.7 KiB
Markdown
136 lines
3.7 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|
|
|
|-|-|
|
|
|||
|
|
|
|
---
|
|
|
|
## 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) |
|
|
|
|
---
|
|
|
|
## Enclosure
|
|
|
|
A parametric, fully 3D-printable enclosure lives in [`enclosure/`](enclosure/) —
|
|
a rectangular cabinet with two front speakers and a removable top where the NFC tag
|
|
rests, with **swappable speaker mounts** so you can print an adapter to fit your
|
|
drivers. See [`enclosure/README.md`](enclosure/README.md).
|
|
|
|

|
|
|
|
---
|
|
|
|
## 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)
|