๐๏ธ Di mana semuanya disimpan?
| Apa | Tempat | Ganti perlu flash ulang? |
|---|---|---|
| Gambar animasi | Firmware: firmware/assets/builtin/jpeg/<tema>/ (sumber GIF di assets/builtin/gif/<tema>/) | Ya |
| Suara animasi | Kartu SD DFPlayer: root 0001โ0048 (urutan salin, isi sd/mp3/) | Tidak, cukup ganti file |
| Lagu pemutar MP3 | Kartu SD: /01/001.mp3 โฆ | Tidak |
| Suara Chronos | Kartu SD root: 0041โ0048 | Tidak |
๐๏ธ Tambah animasi GIF
Animasi ditanam di firmware sebagai frame JPEG penuh warna. Alurnya: GIF โ impor โ daftarkan โ build & flash โ salin suara.
firmware/assets/builtin/gif/<tema>/<nama>.gif, mis. assets/builtin/gif/wajah/senyum.gif. Tema yang sudah ada: wajah, mobil, gundam; nama tema baru juga boleh.cd firmware python tools/import_jpeg_clip.py wajah senyum assets/builtin/gif/wajah/senyum.gif --quality 80Hasilnya
assets/builtin/jpeg/wajah/senyum.mjpeg + senyum.json. GIF bukan 240ร240? Tambahkan --resize 240x240 atau --crop 240x240."jpeg_clips" di firmware/assets/meta.json:
"jpeg_clips": [ โฆ, ["gundam", "pilot", "", 31], ["wajah", "senyum", ""] <- baris baru di akhir ]Kolom: tema, nama, peran, trek. Peran
"" = biasa, "dizzy" = diputar saat goyang, "heart" = diputar saat tahan. Trek boleh dikosongkan: otomatis nomor berikutnya (sekarang 41).pio run -e esp32-c3-dfplayer -t upload. Klip ditanam otomatis saat build. Perhatikan baris ANGGARAN kalau klip banyak (detail anggaran flash).python tools/daftar_trek.py, klip baru mendapat trek 0049 dst. Taruh suaranya sebagai 0049.mp3 dan salin setelah 0048 (lihat urutan salin).โ ๏ธ Jangan menambah baris di daftar "builtins". Nomor trek builtin = posisinya, jadi baris ke-19 akan memakai trek 19 yang sudah dipakai wajah/senyum_kedip, dan builtin GIF hanya diambil 6 frame.
โน๏ธ Klip satu tema selalu dikelompokkan: klip baru tema lama masuk setelah kelompok temanya. "boot_theme" di meta.json menentukan model saat nyala (sekarang wajah, klip senyum_kedip). "theme_order" mengatur urutan tema (sekarang wajah, mobil, gundam; tema yang tidak disebut di akhir). Pakai hanya media yang boleh kamu sebarkan.
๐ Suara animasi dan Chronos (root kartu, urutan salin)
Isi kartu siap pakai: folder sd/mp3/ di repo (48 file, 1,4 MB). DFPlayer memutar file root menurut urutan salin (file ke-N yang disalin), bukan nama.
0001.mp3 โฆ 0048.mp3 ke root, berurutan satu per satu (jangan seret sekaligus)./01 dan salin lagu 001.mp3, 002.mp3, โฆ untuk Pemutar MP3.# Linux (kartu di /media/SD)
for f in sd/mp3/*.mp3; do cp "$f" /media/SD/; sync; done
# Windows PowerShell (kartu di E:)
Get-ChildItem sd\mp3\*.mp3 | Sort-Object Name | ForEach-Object { Copy-Item $_.FullName E:\ }
| File (root) | Dipakai untuk | Suara di sd/mp3/ |
|---|---|---|
0001โ0018 | โ | hening 0,5 dtk (pengisi) |
0019 | model 1 wajah/senyum_kedip (saat nyala) | tawa kecil โhi-hi-hiโ + denting kedip, 8 dtk |
0020 | model 2 wajah/pusing (goyang) | nada goyang menurun + per โboingโ, 4,4 dtk |
0021 | model 4 wajah/sorot | desis lirik kiri-kanan + blip, 6 dtk |
0022 | model 5 wajah/sirine | sirine polisi naik-turun ร2, 3,8 dtk |
0023 | model 3 wajah/cinta (tahan) | detak jantung + arpeggio + kilau, 2,5 dtk |
0024โ0025 | โ | hening (pengisi) |
0026 | model 9 gundam/helm_hujan | hujan di helm + tetes + servo, 3 dtk |
0027 | model 10 gundam/helm_siaga (tahan) | servo + bip siaga, 1,6 dtk |
0028 | model 11 gundam/isyarat | sandi radio + statis, 2,6 dtk |
0029 | model 12 gundam/kokpit | dengung kokpit + blip komputer, 3 dtk |
0030 | model 13 gundam/kokpit_2 | sistem menyala + dengung, 3 dtk |
0031 | model 14 gundam/pilot | servo + kunci mekanis + bip, 2,6 dtk |
0032โ0033 | โ | hening (pengisi) |
0034 | model 7 mobil/lampu_sorot | klik lampu + desis sorot + mesin idle, 6,7 dtk |
0035โ0037 | โ | hening (pengisi) |
0038 | model 8 mobil/speedometer (tahan) | gas, pindah gigi, gas, 4,2 dtk |
0039 | โ | hening (pengisi) |
0040 | model 6 wajah/cinta_pipi | โuwuโ malu + lonceng kecil, 3 dtk |
0041 | Chronos notifikasi | ding-ding naik |
0042 | Chronos instruksi navigasi baru | tiga nada naik |
0043 | Chronos panggilan masuk (diulang) | trill dering |
0044 | Chronos cari perangkat (diulang, volume 30) | bip tinggi keras |
0045 | Chronos alarm (diulang) | bip-bip-bip-bip |
0046 | Chronos tersambung | dua nada naik |
0047 | Chronos terputus | dua nada turun |
0048 | Chronos navigasi selesai | arpeggio selesai |
- Suara model diputar sampai habis, lalu diulang selama animasi itu tampil (jeda hening di akhir file mengatur jarak ulang).
- Klip tahan dan goyang memutar suaranya sendiri, lalu suara model utama mulai lagi.
- Saat pemutar musik aktif (main atau jeda) atau layar Chronos tampil, animasi tanpa suara.
- Klip baru otomatis mendapat trek
0049dan seterusnya (0041โ0048 milik Chronos). Salin file itu setelah0048, sebelum/01.
- Nomor yang tidak dipakai berisi MP3 hening. Jangan dihapus: tanpa pengisi urutan bergeser dan suara tertukar.
- Ganti suara: timpa file bernama sama di
sd/mp3/, lalu format dan salin ulang berurutan. - Lagu di
/01harus bernomor berurutan tanpa lubang (001, 002, 003 โฆ). - Di macOS, hapus
._*dan.DS_Store(dot_clean); ikut terhitung sebagai file. - Cek kartu:
python firmware/tools/daftar_trek.py --sd /path/kartu. Buat ulang MP3:python3 sd/buat_suara.py.
Semua suara dibuat dari nol oleh sd/buat_suara.py (numpy, tanpa sampel luar, MIT). Opsi --pack mochi-themes.zip memakai WAV asli paket tema mochi-rzmong assets-v1 untuk 14 animasi (paket tanpa lisensi tertulis: untuk kartu sendiri). Build -DMOCHI_DF_MP3_FOLDER: file yang sama di /MP3/0001.mp3 โฆ, dicocokkan dari nama.
๐ก Suara tidak diulang? Kabel TX DFPlayer โ GPIO21 membawa pesan "trek selesai". Atau pasang BUSY ke GPIO5 + -DMOCHI_PIN_DF_BUSY=5.
๐ต Pemutar musik (/01)
/01/001.mp3, /01/002.mp3, โฆ (maks 255). Nomor harus berurutan tanpa lubang: "berikutnya" setelah lagu terakhir kembali ke 001.๐ Gerakan
| Layar | Ketuk 1ร | Ketuk 2ร | Tahan 0,4โ2 dtk | Tahan 2 dtk |
|---|---|---|---|---|
| Animasi | putar / berhenti | model berikutnya | klip "tahan" selama ditahan | buka menu |
| Menu | pindah ke item berikutnya | pilih item | โ | tutup menu |
| Pemutar MP3 | jalankan tombol yang disorot (langsung) | โ (dua ketukan = dua kali tombol) | lepas = sorot tombol berikutnya | kembali ke menu, musik tetap jalan |
Mode dan lagu terakhir tersimpan. Layar "folder /01 kosong" berarti tidak ada /01/001.mp3.
๐ฑ Chronos: layar dan suara (0041โ0048)
| Dari HP | Di perangkat | Suara | Sentuh |
|---|---|---|---|
| Tersambung / terputus | info 1,5 dtk | 0046 / 0047 | |
| Notifikasi | klip wajah/cinta_pipi ยฑ1,5 dtk, lalu aplikasi, judul, pesan (bergulir), 7โ30 dtk | 0041 | ketuk = tutup |
| Panggilan masuk | nama penelepon, berkedip | 0043 diulang | ketuk/tahan = tutup + bisukan |
| Navigasi | ikon arah, jarak, petunjuk, ETA | 0042 instruksi baru, 0048 selesai | ketuk = sembunyikan |
| Cari perangkat | layar berkedip 60 dtk | 0044 diulang, volume 30 | ketuk = berhenti |
| Alarm (dari aplikasi) | layar alarm 60 dtk | 0045 diulang | ketuk = berhenti |
| Cuaca, musik HP, baterai | layar Jam HP | Jam HP: ketuk = putar/jeda, 2ร = lagu berikutnya |
0041โ0048 ada di root (sudah termasuk di sd/mp3/).rzmong dfplayer.โน๏ธ Layar Chronos memotong musik; setelahnya lagu diulang dari awal trek. Notifikasi tidak memotong dering panggilan. Mode Jangan Ganggu di aplikasi membisukan suara notifikasi.
๐งฐ Cek kartu dan nomor trek
cd firmware python tools/daftar_trek.py # tabel model โ trek โ nama file python tools/daftar_trek.py --sd /media/SD # cek root 0001-0048, /01 dan sampah macOS
Skrip ini hanya membaca. Sumbernya include/jpeg_clips.h hasil build, atau assets/meta.json kalau belum build.
โ ๏ธ Di macOS, hapus file ._* dan .DS_Store dari kartu. DFPlayer bisa menghitungnya sebagai trek.