Cari Kode

AI menulis sebuah lagu dan ESP32 ini mengajarkan Anda untuk memainkannya

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.

Komposer dan Guru Musik AI berjalan di papan MaTouch AI ESP32-S3
Komposer dan Guru Musik AI berjalan di papan MaTouch AI ESP32-S3

Layarnya

Layar utama Musik AI di MaTouch AI ESP32-S3, menampilkan enam tombol
Layar utama Musik AI di MaTouch AI ESP32-S3, menampilkan enam tombol

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.

makerfabs_ESP32S3_cam_music_screen-10-

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.

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.

Mode LEARN pada MaTouch AI ESP32-S3 - satu tuts menyala, menunggu untuk ditekan
Mode LEARN pada MaTouch AI ESP32-S3 - satu tuts menyala, menunggu untuk ditekan

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.

Memutar ulang melodi dengan router dimatikan - melodi itu sekarang tersimpan di papan
Memutar ulang melodi dengan router dimatikan - melodi itu sekarang tersimpan di papan

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

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:

  1. Tekan dan tahan tombol BOOT.
  2. Sambil tetap menahan BOOT, tekan RESET dan lepaskan RESET.
  3. Sekarang lepaskan BOOT. Layar menjadi kosong — itu adalah bootloader yang menunggu.
  4. Klik Upload.
  5. 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

  1. 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.
  2. Simpan di tempat yang mudah Anda temukan lagi. Jangan ekstrak file ZIP-nya.
  3. Di Arduino IDE, klik SketchInclude LibraryAdd .ZIP Library.
  4. Cari file ZIP yang Anda unduh dan klik Open.
  5. IDE akan menginstalnya dan mengonfirmasi di bagian bawah jendela. Jika Anda sudah menginstal versi 1.6, hapus folder tersebut dari Documents/Arduino/libraries terlebih 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.

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.

  1. Buka platform.deepseek.com dan buat akun.
  2. Buka API keys di menu dan klik Create new API key.
  3. Salin segera. Kunci hanya ditampilkan sekali dan tidak akan pernah lagi - jika hilang, hapus kunci tersebut dan buat yang baru.
  4. 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-.

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.

Gambar

makerfabs_ESP32S3_cam_music_screen-1-
makerfabs_ESP32S3_cam_music_screen-1-
makerfabs_ESP32S3_cam_music_screen-4-
makerfabs_ESP32S3_cam_music_screen-4-
makerfabs_ESP32S3_cam_music_screen-10-
makerfabs_ESP32S3_cam_music_screen-10-
Tidak ada kode terlampir.

Sumber daya & referensi

Berkas📁

Kode Arduino (.ino)

Lembar Data (pdf)