Tutorial Belanja komponen

Tutorial › Suara & Bunyi

Mainkan Nada dari Dashboard (Buzzer Pasif)

ESP32-WROOM-32D23D22TX0RX0D21D19D18D5TX2RX2D4D2D15GND3V3ENVPVND34D35D32D33D25D26D27D14D12D13GNDVIN+S+−Modul buzzer pasif

Ketik not lagu di HP, misalnya ccggaag-ffeeddc (Twinkle Twinkle), dan ESP32 memainkannya lewat buzzer pasif. Proyek ini mengenalkan frekuensi suara dan cara menulis melodi sebagai teks.

Buzzer pasif tidak punya osilator, jadi ESP32 yang membuat getarannya dengan tone(), yaitu gelombang kotak pada frekuensi tertentu. Nada A = 440 Hz, C tengah = 262 Hz. Teks dari widget Text Input dibaca huruf demi huruf, setiap huruf diubah menjadi frekuensi, lalu dimainkan 250 ms dengan jeda 50 ms. Tanda - berarti diam satu ketukan.

Komponen

KomponenQtyHarga
ESP32 DOIT DevKit V1 30 pin1Rp75.000
Modul buzzer pasif1Rp7.500
Kabel jumper female-female 10 cm (isi 10)isi 10, terpakai 31Rp3.500
Kabel micro USB data 30 cmopsional, kalau belum punya kabel micro USB data1Rp11.700
Total (tanpa opsional)Rp86.000
Daftar komponen proyek ini otomatis masuk ke pesan. Hapus yang sudah kamu punya sebelum dikirim.

Langkah 1: Rangkai komponen

Sambungkan kabel sesuai gambar di atas. Kalau gambar dan tabel terlihat berbeda, ikuti tabel.

DariKeKabel
Modul buzzer pasif S→D26 GPIO26biru
Modul buzzer pasif +→3V3merah
Modul buzzer pasif −→GNDhitam

Langkah 2: Siapkan dashboard Klenik

Tulis Laguichibot/budi1234/p052/lagu
ccggaag-ffeeddc
Belum pernah dikirim
Diputarichibot/budi1234/p052/log
Memainkan: ccggaag-ffeeddc
Memainkan: egCgecd
0 detik lalu

Cara cepat: unduh p052.json, ganti budi1234 dengan KODE-mu, lalu import di Klenik (menu titik tiga → Export / Import → Import → Ganti total). Langkah lengkapnya ada di Panduan Klenik.

WidgetTopicSetting
TEXT_INPUT
Tulis Lagu
ichibot/KODE/p052/laguteks bebas
Text Log
Diputar
ichibot/KODE/p052/logmenampilkan teks masuk

Langkah 3: Upload kode

Library: PubSubClient (Nick O'Leary). Board di Arduino IDE: ESP32 Dev Module. Isi dulu nama WiFi dan password di bagian ISI DULU, lalu ganti budi1234 di baris topic dengan KODE-mu, lalu upload dan buka Serial Monitor (115200).

p052.inoUnduh .ino
// Proyek 052 - Mainkan Nada dari Dashboard (Buzzer Pasif)
// Board: ESP32 DOIT DevKit V1 | Dashboard: klenik.ichibot.id
#include <WiFi.h>
#include <PubSubClient.h>

// ===== ISI DULU =====
const char* WIFI_NAMA = "nama-wifi-kamu";
const char* WIFI_PASS = "password-wifi-kamu";

// topic MQTT: ganti budi1234 dengan KODE-mu (sama dengan di dashboard Klenik)
const char* TOPIK_LAGU = "ichibot/budi1234/p052/lagu";
const char* TOPIK_LOG  = "ichibot/budi1234/p052/log";

const char* BROKER = "mqtt.ichibot.id";
WiFiClient wifi;
PubSubClient mqtt(wifi);
const int BUZZER = 26;                // buzzer PASIF: butuh frekuensi, tidak bisa sekadar HIGH
String antre = "";                    // lagu yang menunggu dimainkan

// Not: c d e f g a b (oktaf tengah), C = c tinggi, '-' = diam. Contoh: "ccggaag-ffeeddc"
int frek(char n) {
  switch (n) {
    case 'c': return 262; case 'd': return 294; case 'e': return 330; case 'f': return 349;
    case 'g': return 392; case 'a': return 440; case 'b': return 494; case 'C': return 523;
  }
  return 0;
}

void pesanMasuk(char* t, byte* isi, unsigned int panjang) {
  antre = "";
  for (unsigned int i = 0; i < panjang; i++) antre += (char)isi[i];
}

void langganan() {
  mqtt.subscribe(TOPIK_LAGU);
}

void mainkan(String lagu) {
  mqtt.publish(TOPIK_LOG, ("Memainkan: " + lagu).c_str());
  for (unsigned int i = 0; i < lagu.length(); i++) {
    int f = frek(lagu[i]);
    if (f) tone(BUZZER, f, 250);
    delay(300);                       // durasi satu ketukan + jeda
    mqtt.loop();                      // tetap jaga koneksi selama lagu
  }
  noTone(BUZZER);
}

sambungWiFi() dan sambungMQTT(): sama di semua proyek (klik untuk lihat)void sambungWiFi() { WiFi.begin(WIFI_NAMA, WIFI_PASS); Serial.print("WiFi"); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(" OK, IP " + WiFi.localIP().toString()); } void sambungMQTT() { while (!mqtt.connected()) { if (mqtt.connect(WiFi.macAddress().c_str())) { Serial.println("Terhubung ke Klenik"); langganan(); } else { Serial.println("Broker gagal, coba lagi 3 detik"); delay(3000); } } }
void setup() { Serial.begin(115200); sambungWiFi(); mqtt.setServer(BROKER, 1883); mqtt.setCallback(pesanMasuk); } void loop() { if (!mqtt.connected()) sambungMQTT(); mqtt.loop(); if (antre.length()) { String lagu = antre; antre = ""; mainkan(lagu); } }

Langkah 4: Pahami kodenya

  1. Tabel huruf ke frekuensi (Hz) untuk satu oktaf, ditambah C tinggi. Tambahkan huruf lain untuk oktaf berikutnya (frekuensinya dikali 2).
  2. tone(pin, frekuensi, durasi). Buzzer aktif tidak bisa dipakai di sini, karena bunyinya selalu satu nada.
  3. Lagu panjang memakai delay(). Memanggil mqtt.loop() di setiap not menjaga koneksi ke broker tetap hidup.