AI menulis sebuah lagu dan ESP32 ini mengajarkan Anda untuk memainkannya
Minta AI untuk menulis sebuah lagu, dengarkan dimainkan, lalu biarkan papan mengajari Anda memainkannya
Pilih suasana hati, ketuk TULIS, dan AI menggubah melodi pendek. Papan memainkannya, menyalakan setiap tuts saat berjalan. Lalu ketuk BELAJAR dan berubah menjadi guru: papan menyalakan satu tuts pada satu waktu dan menunggu Anda menekannya, nada demi nada, sampai Anda memainkan seluruh lagu sendiri.
922-Ini adalah Artikel Musik AI (artikel saat ini)
923-Piano proyeknya ada di sini.
Ini tetap piano 21 tuts penuh kapan saja - cukup mainkan.
Robojax_Makerfab saat checkout di halaman produk MaTouch AI ESP32-S3. Tidak ada biaya untuk menggunakannya, dan ini membantu mendukung kode dan tutorial gratis di sini.Layarnya

Enam tombol di bagian atas, lalu keyboard 21 tuts - tiga baris tujuh, C3 hingga B5. Tidak seperti proyek piano, tidak ada tata letak hitam-putih di sini, karena AI dibatasi pada tujuh nada alami dan grid adalah seperti apa nada-nada itu terlihat.
| Tombol | Fungsinya |
|---|---|
| GAYA | Mengganti suasana hati: SENANG, SEDIH, SERAM, RAKYAT, NINABOBO. Ini yang dikirim ke AI. |
| TULIS | Meminta AI untuk membuat melodi dalam suasana hati itu. Menampilkan TUNGGU saat berpikir, lalu memainkan apa yang kembali. |
| MAIN | Memutar ulang melodi yang sedang dimuat. Ketuk lagi untuk berhenti. |
| BELAJAR | Mode mengajar - menyalakan satu tuts dan menunggu Anda. |
| GELOMBANG | Warna nada: LEMBUT, ORGAN atau TERANG. |
| VOL | Ketuk untuk menaikkan volume 1 hingga 5. Label menunjukkan levelnya. |
Volume saat papan mulai diatur oleh #define VOLUME di dekat bagian atas sketsa, sehingga Anda dapat mengompilasi level yang Anda sukai dan tetap mengubahnya secara langsung.
Apa yang sebenarnya dihasilkan AI
Ini bagian yang perlu diperjelas, karena mudah untuk melebih-lebihkan. AI tidak menghasilkan audio. Menghasilkan bentuk gelombang yang sebenarnya membutuhkan model besar dan kartu grafis; tidak ada mikrokontroler yang melakukan itu, dan siapa pun yang mengklaim sebaliknya sedang memutar file yang dirender di tempat lain.
Yang dihasilkan adalah daftar nada, sebagai teks biasa:
[{"n":"C4","ms":300},{"n":"E4","ms":300},{"n":"G4","ms":600}]
Papan mengurai itu dengan ArduinoJson dan memainkannya menggunakan synthesizer yang sama dengan proyek piano. Satu permintaan teks pendek berbiaya sebagian kecil sen, dan setelah melodi tiba, melodi itu dapat diputar ulang selamanya dengan internet dicabut.
Mengapa prompt membatasi AI
Permintaan memberi tahu model bahwa ia hanya boleh menggunakan 21 nada yang secara fisik ada di keyboard ini - nada alami dari C3 hingga B5, tanpa kres atau mol. Itu bukan keterbatasan synthesizer, yang dapat memainkan frekuensi apa pun. Itu ada karena dua alasan bagus:
- setiap nada yang ditulisnya adalah nada yang benar-benar dapat diajarkan oleh mode BELAJAR kepada Anda, karena ada tuts untuk itu
- tetap dalam satu kunci berarti hasilnya selalu terdengar musikal, bahkan ketika model sedang tidak inspiratif
Mengurai jawaban dari model bahasa
Model suka membantu, yang di sini berarti membungkus jawaban dalam pagar markdown dan menambahkan kalimat ramah tentang apa yang mereka tulis. Sketsa meminta dengan tegas JSON polos dan kemudian secara defensif mengambil semua yang ada di antara [ pertama dan ] terakhir. Nada apa pun yang tidak dapat ditempatkan di keyboard dilewati, dan hasilnya hanya diterima jika setidaknya empat nada yang dapat digunakan selamat. Toleran terhadap keluaran yang tidak sempurna adalah sebagian besar pekerjaan dalam proyek apa pun yang mengurai teks AI.
Balasan kosong, dan cara menghindarinya
Satu hal akan mengecoh Anda jika Anda mengubah model atau prompt. DeepSeek bernalar sebelum menjawab, dan pemikiran itu ditagih ke anggaran max_tokens yang sama dengan jawabannya. Tanyakan sesuatu yang sulit dan ia dapat menghabiskan seluruh anggaran untuk berpikir, lalu mengembalikan balasan kosong - permintaan yang berhasil tetapi tidak berisi apa pun.
Pada proyek ini, hal itu muncul sebagai suasana yang lebih sulit gagal sementara yang mudah berhasil. SPOOKY dan LULLABY menginginkan nada minor, yang benar-benar sulit ketika setiap kres dan mol dilarang, sehingga model merenung - dan kehabisan waktu. HAPPY dalam C mayor menjawab segera.
Ada dua perbaikan dan sketsa ini menggunakan keduanya. Permintaan mengirim "thinking": {"type": "disabled"}, yang mematikan penalaran sepenuhnya sehingga seluruh anggaran digunakan untuk jawaban dan balasan datang jauh lebih cepat. Dan prompt sekarang memberi tahu model bagaimana menghasilkan nada minor tanpa kres - pusatkan melodi pada A atau E, yang menggunakan nada yang sama.
finish_reason. length berarti ia kehabisan anggaran - naikkan MELODY_TOKENS. stop berarti model memilih untuk tidak mengatakan apa pun, yang merupakan masalah prompt.Mode pembelajaran
Ketuk LEARN dan satu tuts berubah hijau. Tekan dan papan maju ke nada berikutnya. Tekan tuts yang salah dan ia tetap berbunyi - ini piano, bagaimanapun juga - tetapi tidak melanjutkan. Bilah status menghitung kemajuan Anda, dan ketika Anda mencapai akhir, ia memberi tahu Anda.
Tidak ada tekanan waktu dan tidak ada skor. Ia menunggu Anda selama yang Anda butuhkan, yang membuatnya benar-benar berguna untuk mempelajari frasa, bukan sekadar hal baru.
Ini juga berfungsi tanpa WiFi
Sebuah lagu tertanam di dalam sketsa, sehingga PLAY dan LEARN berfungsi tanpa jaringan sama sekali. Hanya WRITE yang membutuhkan internet - dan hanya membutuhkan kunci DeepSeek. Tidak diperlukan akun Azure atau OpenAI untuk proyek ini.
Saat Anda menguji, ketuk PLAY terlebih dahulu: itu mengonfirmasi jalur audio dan keyboard sebelum jaringan terlibat, sehingga jika WRITE gagal nanti, Anda sudah tahu harus melihat ke mana.
Ide untuk dikembangkan lebih lanjut
- Minta melodi "dengan gaya shanty laut" dengan mengedit daftar gaya.
- Minta ia menulis frasa kedua yang menjawab frasa pertama.
- Simpan melodi ke kartu SD sehingga papan mengumpulkan buku lagu seiring waktu.
- Tambahkan mikrofon dari proyek asisten suara sehingga Anda dapat mengucapkan permintaan alih-alih mengetuk preset.
Tentang papan MaTouch AI ESP32-S3 2.8"
Setiap proyek di halaman ini berjalan pada MaTouch AI ESP32-S3 2.8" TFT ST7789V dari Makerfabs. Ini adalah papan serba bisa: layar sentuh berwarna, kamera 3 megapiksel, dua mikrofon, dan amplifier speaker sungguhan, semuanya digerakkan oleh ESP32-S3 dengan 8 MB PSRAM. Kombinasi itulah yang memungkinkan proyek AI ini berjalan di satu papan tanpa perangkat tambahan lain.
8 MB PSRAM lebih penting daripada angka lainnya di sini. Itulah yang memungkinkan papan menyimpan bingkai kamera, beberapa detik audio rekaman, atau foto berenkode base64 dalam memori secara bersamaan - tidak ada yang muat di RAM normal ESP32’s.
Dokumentasi pabrikan: Halaman wiki Makerfabs.
Setiap proyek lain untuk papan ini - kamera, pengenalan wajah offline, asisten suara AI, visi AI, dan proyek menggambar - memiliki tutorialnya sendiri. Tautan ke semuanya ada di bawah artikel ini.
Spesifikasi utama
- Prosesor: ESP32-S3, dual core 240 MHz, WiFi 2.4 GHz + Bluetooth 5.0
- Memori: 16 MB flash, 8 MB PSRAM (diperlukan oleh hampir semua proyek di sini)
- Layar: 2.8" IPS, 320×240, driver ST7789V, SPI
- Sentuh: GT911 kapasitif, melacak 5 jari sekaligus
- Kamera: OV3660, 3 megapiksel, hingga 2048×1536
- Mikrofon: dua INMP441 I2S digital (pasangan stereo asli)
- Speaker: amplifier kelas-D MAX98357A, 3.2 W ke 4 Ω
- Penyimpanan: slot kartu microSD (mode SPI)
- Daya: USB-C, konektor baterai JST, pengisi daya TP4056, sakelar daya
- Juga di papan: LED RGB WS2812B, jam waktu nyata bertenaga baterai PCF8563T, dan pengukur baterai MAX17048 yang tidak tercantum dalam spesifikasi resmi
USB CDC On Boot ke Disabled. Menggunakan port yang salah akan membuat audio bermasalah atau unggahan gagal.Memberi daya dari baterai? Kedua soket USB-C, pengisi daya TP4056, dan sakelar daya dijelaskan secara lengkap, beserta skematiknya, di artikel pengujian board — termasuk soket mana yang mengisi daya dan apakah sakelar harus dalam keadaan menyala atau mati.
Pengaturan Arduino IDE
Pengaturan ini penting. Sebagian besar masalah yang dilaporkan orang dengan board ini adalah salah satu dari pengaturan ini yang salah, dan pengaturan tersebut akan kembali ke default saat Anda mengubah versi inti, jadi periksa lagi setelah perubahan apa pun.
| Pengaturan | Nilai |
|---|---|
| Board | ESP32S3 Dev Module |
| Versi inti ESP32 | 2.0.17 |
| PSRAM | OPI PSRAM |
| Ukuran Flash | 16MB (128Mb) |
| Skema Partisi | 16M Flash (3MB APP/9.9MB FATFS) |
| USB CDC On Boot | Disabled |
| Kecepatan Unggah | 921600 |
| Hapus Semua Flash Sebelum Unggah | Disabled |
| Port | port USB-C CH340K |
Jika unggahan gagal: memasukkan board ke mode unduh secara manual
Sebagian besar waktu Anda cukup menekan Upload dan itu berhasil. Kadang tidak — IDE berhenti di Connecting...... lalu menyerah dengan Failed to connect to ESP32-S3: No serial data received.
Itu terjadi karena IO0 melakukan tiga tugas sekaligus di board ini: ia adalah tombol BOOT, ia adalah jalur reset otomatis dari CH340K, dan ia adalah jalur data untuk LED RGB. Ketika sketsa yang sudah berjalan di board menggerakkan LED tersebut, ia dapat melawan reset otomatis, sehingga chip restart ke sketsa lama Anda alih-alih ke bootloader.
Perbaikannya hanya butuh lima detik. Masukkan ke mode unduh sendiri:
- Tekan dan tahan tombol BOOT.
- Sambil tetap menahan BOOT, tekan RESET dan lepaskan RESET.
- Sekarang lepaskan BOOT. Layar menjadi kosong — itu adalah bootloader yang menunggu.
- Klik Upload.
- Saat selesai, tekan RESET sekali untuk menjalankan sketsa baru.
Jika masih tidak bisa terhubung, turunkan Upload Speed ke 115200 dan coba lagi. Dan periksa sakelar daya board dalam keadaan menyala — CH340K akan ter-enumerasi dan memberi Anda port COM bahkan ketika board itu sendiri dimatikan, yang sering menipu orang.
Pustaka yang diperlukan
Proyek ini membutuhkan setiap pustaka dalam tabel di bawah — tidak lebih, tidak kurang. Sebagian besar diinstal langsung dari Tools → Manage Libraries di Arduino IDE, tetapi GFX Library for Arduino harus diinstal dari file ZIP. Nomor versi penting, jadi gunakan persis seperti yang tercantum.
| Pustaka | Versi | Penulis | Instal dari |
|---|---|---|---|
| GFX Library for Arduino | 1.5.6 | moononournation | File ZIP — lihat di bawah |
| bb_captouch | 1.3.1 | Larry Bank | Library Manager |
| ArduinoJson | 7.x | Benoit Blanchon | Library Manager |
| Adafruit NeoPixel | versi terbaru apa pun | Adafruit | Library Manager |
Menginstal pustaka GFX dari file ZIP
- Unduh ZIP-nya. File ini sudah termasuk dalam unduhan proyek ini, atau Anda bisa mendapatkannya dari repositori Arduino_GFX - klik tombol hijau Code, lalu Download ZIP.
- Simpan di tempat yang mudah Anda temukan lagi. Jangan ekstrak file ZIP-nya.
- Di Arduino IDE, klik Sketch → Include Library → Add .ZIP Library.
- Cari file ZIP yang Anda unduh dan klik Open.
- IDE akan menginstalnya dan mengonfirmasi di bagian bawah jendela. Jika Anda sudah menginstal versi 1.6, hapus folder tersebut dari
Documents/Arduino/librariesterlebih dahulu, jika tidak keduanya akan bertentangan.
Menyiapkan secrets.h
Detail WiFi dan kunci API Anda dimasukkan ke dalam secrets.h, yang sudah termasuk dalam unduhan dengan nilai placeholder. Buka tab tersebut di Arduino IDE dan ganti dengan milik Anda sendiri.
secrets.h.Mendapatkan kunci API Anda
Proyek ini terhubung ke layanan AI cloud, jadi Anda memerlukan kunci sendiri. Jika Anda belum pernah melakukannya, jangan khawatir - ini sama seperti kata sandi yang mengidentifikasi akun Anda ke layanan tersebut. Hanya butuh beberapa menit, sekali saja.
DeepSeek - bagian berpikir
DeepSeek adalah model bahasa yang sebenarnya menjawab pertanyaan Anda. Harganya murah - beberapa dolar kredit cukup untuk ribuan balasan.
- Buka platform.deepseek.com dan buat akun.
- Buka API keys di menu dan klik Create new API key.
- Salin segera. Kunci hanya ditampilkan sekali dan tidak akan pernah lagi - jika hilang, hapus kunci tersebut dan buat yang baru.
- Tambahkan sejumlah kecil kredit di bawah Top up. Tidak ada paket gratis, tetapi isi ulang terkecil pun bertahan sangat lama dengan pemakaian seperti ini.
Masukkan kunci ke secrets.h sebagai DEEPSEEK_KEY. Kunci dimulai dengan sk-.
deepseek-chat dan deepseek-reasoner yang lama sudah pensiun, jadi sebagian besar tutorial yang Anda temukan online akan gagal dengan error 400. Gunakan deepseek-v4-flash, yang sudah diatur oleh proyek-proyek ini.Berapa biaya untuk menjalankannya
Sangat sedikit, tetapi tidak gratis, dan Anda harus tahu kira-kira berapa yang Anda keluarkan sebelum membiarkan proyek berjalan.
| Layanan | Perkiraan biaya |
|---|---|
| DeepSeek | sebagian kecil sen per jawaban - ribuan balasan hanya dengan beberapa dolar |
Harga bisa berubah, jadi anggap ini sebagai panduan, bukan penawaran resmi. Setiap layanan ini memiliki halaman pemakaian untuk memantau pengeluaran Anda, dan semuanya memungkinkan Anda menetapkan batas pengeluaran - yang sebaiknya dilakukan sejak hari pertama.
Pemecahan Masalah
| Gejala | Penyebab dan perbaikan |
|---|---|
| Layar tetap hitam | Versi library GFX salah (gunakan 1.5.6) atau pengaturan board salah. |
PSRAM alloc failed |
Tools → PSRAM tidak diatur ke OPI PSRAM. |
| Tidak ada yang terunggah / tidak ada port COM | Port USB-C salah, atau driver CH340 belum terinstal. |
Hal-hal yang mungkin Anda butuhkan
Sumber daya & referensi
-
DokumentasiMakerfabs MaTouch ESP32-S3 2.8" Camera and Touchscreen: User's Manualwiki.makerfabs.com
-
Dokumentasi
-
EksternalMakerfabs websitemakerfabs.com
Berkas📁
Kode Arduino (.ino)
-
Sketsa Arduino makerfabs_ESP32S3_Draw_AI.ziptermasuk file header pin dan header rahasia .h
makerfabs_ESP32S3_Draw_AI.zip0.02 MB
Lembar Data (pdf)
-
Lembar Data ESP32-S3 Bahasa Inggris
esp32-s3_datasheet_en[1].pdf1.05 MB