Compare commits
7 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| d9628ba98a | |||
| 2960d354a2 | |||
| a23ac51a94 | |||
|
|
fece0359bc | ||
|
|
02a15c01f1 | ||
|
|
022232868b | ||
| 4b49539b3c |
20
README.md
20
README.md
@@ -2,13 +2,17 @@
|
||||
|
||||
Fabula is an open source and open hardware storyteller for children 1 to 8 yo.
|
||||
|
||||

|
||||

|
||||

|
||||
|
||||
|
||||
It's a box with an inset where a plastic character can be snapped in place.
|
||||
When a character is snapped in place, Fabula starts playing the corresponding audio track(s).
|
||||
When the character is removed, the playback stops.
|
||||
There's a status led that provides some informations about the player (i.e. the battery level).
|
||||
|
||||

|
||||

|
||||
|
||||
The toy has an internal lithium-ion battery that can be charged via USB-C and provides 12h playback.
|
||||
It can also be monitored and controlled via Home Assistant or with a web interface in local network.
|
||||
It is privacy-friendly: it works completely localy and sends no data to any external service.
|
||||
@@ -53,11 +57,21 @@ Then, model the character:
|
||||
- Start the print, wait the printer to pause and insert an NFC tag in the compartment. Stick it using the adhesive side so the 3D printer cooling fan does not displace it during the print.
|
||||
- Restart the print and let it finish.
|
||||
|
||||
### Add the MP3 file to the SDCard
|
||||
|
||||
Add the MP3 file to the sdcard, in a directory named like the integer you placed in the tag, with **a single** leading zero.
|
||||
The folder to be played is selected based on the TAG content, but may contain more than one MP3 file. In that case, the files must be named as integers with **two leading zeros**, from `001.mp3` to `999.mp3`.
|
||||
|
||||
## NFC Tag format
|
||||
|
||||
I used Mifare ultralight tags.
|
||||
A valid tag should contain a single text field containing the name of the directory to play (a number between 01 and 99).
|
||||
|
||||
## Debugging
|
||||
|
||||
Turn on Fabula keeping the Volume Down key pressed for some seconds, until the status led turns white. The WIFI is now enabled on the ESP8266 and logs can be accessed via ESPHome:
|
||||
`esphome logs Fabula/esphome/fabula.yaml`
|
||||
|
||||
# Contributions
|
||||
|
||||
## Why isn't this hosted on GitHub?
|
||||
@@ -70,7 +84,7 @@ I didn't find a better option, BTW the Gitea project is working on implementing
|
||||
The project is open to contribution, but with some limits:
|
||||
|
||||
- I'm sorry I can't accept AI-generated contributions. Reviewing a contribution requires time and effort from my side, while generating code with AI requires very little time and produces non reliable code that must be reviewed in detail. This is effectively shifting the work on my side, and in a forced way. If you feel you need a feature but you're not able to implement it by yourself, I prefer you to create an issue in the repository so I can implement it when I can, in a more mantainable way.
|
||||
- I prefer to make project-wide changes (i.e. updating Android target, app name and icon, release number...) by myself.
|
||||
- Before implementing a big change, please contact me to ensure it goes in the project's direction.
|
||||
|
||||
To contribute, you'll have to create an account on this git instance. Unfortunately, I had to disable registration to avoid huge waves of fake accounts created by bots.
|
||||
You can request an account writing to daniele.verducci@ichibi.eu
|
||||
|
||||
2
accessories/.gitignore
vendored
Normal file
2
accessories/.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
*.stl
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
use <character_retainer_platform.scad>;
|
||||
|
||||
character_retainer_platform();
|
||||
|
||||
scale([0.65, 0.65, 0.65])
|
||||
translate([-56, -60, 2])
|
||||
import("/home/danieleverducci/Scaricati/GustavTheTurtle.stl");
|
||||
@@ -1,6 +1,16 @@
|
||||
# NOTE: This program does NOT log via UART, but only via network socket (esphome logs...)
|
||||
|
||||
|
||||
|
||||
|
||||
# ---------------------- Global variables ----------------------
|
||||
|
||||
globals:
|
||||
- id: current_folder
|
||||
type: int
|
||||
restore_value: no
|
||||
initial_value: '0'
|
||||
|
||||
# ---------------------- Global config ----------------------
|
||||
|
||||
esphome:
|
||||
@@ -8,13 +18,27 @@ esphome:
|
||||
on_boot:
|
||||
- priority: 300
|
||||
then:
|
||||
- dfplayer.set_volume: 10
|
||||
- light.turn_on:
|
||||
id: status_led
|
||||
brightness: 60%
|
||||
red: 80%
|
||||
green: 0%
|
||||
blue: 100%
|
||||
- delay: 1s
|
||||
- dfplayer.set_volume: 6
|
||||
- if:
|
||||
condition:
|
||||
binary_sensor.is_on: vol_down
|
||||
then:
|
||||
- wifi.enable:
|
||||
- light.turn_on:
|
||||
id: status_led
|
||||
brightness: 100%
|
||||
red: 100%
|
||||
green: 100%
|
||||
blue: 100%
|
||||
else:
|
||||
- wifi.disable:
|
||||
- light.turn_on:
|
||||
id: status_led
|
||||
brightness: 60%
|
||||
red: 80%
|
||||
green: 0%
|
||||
blue: 100%
|
||||
|
||||
esp8266:
|
||||
board: d1_mini_lite
|
||||
@@ -30,15 +54,8 @@ ota:
|
||||
wifi:
|
||||
ssid: "Pew"
|
||||
password: "SediaChinita@Terrazzo2017"
|
||||
|
||||
|
||||
# ---------------------- Global variables ----------------------
|
||||
|
||||
globals:
|
||||
- id: current_folder
|
||||
type: int
|
||||
restore_value: no
|
||||
initial_value: '0'
|
||||
reboot_timeout: 0s
|
||||
#enable_on_boot: False
|
||||
|
||||
|
||||
# ---------------------- PN532 NFC Reader ----------------------
|
||||
@@ -247,6 +264,7 @@ api:
|
||||
# "folder": 2,
|
||||
# "file": 1
|
||||
# }
|
||||
reboot_timeout: 0s
|
||||
|
||||
actions:
|
||||
- action: dfplayer_next
|
||||
|
||||
BIN
images/assembled.jpg
Normal file
BIN
images/assembled.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 35 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 80 KiB After Width: | Height: | Size: 21 KiB |
@@ -1 +0,0 @@
|
||||
{"hostname":"slimpenguin","username":"danieleverducci"}
|
||||
Reference in New Issue
Block a user