ESP32 Tutorijal 14/55 - Sviranje prilagođene muzičke note koristeći SunFounder ESP32 IoT Learning kit
U ovom tutorijalu naučit ćemo kako koristiti SunFounder ESP32 mikrokontroler za sviranje muzičkih nota pomoću pasivnog zujalice i tranzistora. Cilj projekta je demonstrirati kako generirati zvuk s određenim frekvencijama kontroliranjem zujalice putem GPIO pinova ESP32-a.

Povezat ćemo pasivni zujalicu na ESP32, što će nam omogućiti da proizvedemo različite muzičke note na osnovu frekvencije koju pružimo. Ova postavka uključuje korištenje tranzistora za uključivanje i isključivanje zujalice velikom brzinom, stvarajući zvučne valove koje možemo čuti. Za dodatna pojašnjenja o projektu, svakako pogledajte video (u videu na 00:30).
Objašnjenje hardvera
Glavne komponente korištene u ovom projektu uključuju SunFounder ESP32 mikrokontroler, pasivni zujalicu i NPN tranzistor (2N8050). ESP32 je moćna razvojna ploča s ugrađenim Wi-Fi i Bluetooth mogućnostima, što je čini svestranom za različite IoT aplikacije. U ovom slučaju, generirat će signale za kontrolu zujalice.
Pasivni zujalica radi tako što generira zvuk kada se na njega primijeni izmjenični napon. Za razliku od aktivnih zujalica, koje imaju ugrađeni oscilator, pasivne zujalice zahtijevaju vanjski signal za proizvodnju zvuka. Tranzistor djeluje kao prekidač, omogućavajući ESP32-u da kontrolira zujalicu bez direktnog napajanja, osiguravajući da se ne prekorači strujna vrijednost mikrokontrolera.
Detalji iz tehničke dokumentacije
| Proizvođač | SunFounder |
|---|---|
| Broj dijela | Pasivni zujalica |
| Radni napon | 3.3 V - 5 V |
| Rezonantna frekvencija | 2 kHz - 4 kHz |
| Potrošnja struje | ≤ 30 mA |
| Nivo zvučnog pritiska | ≥ 70 dB |
| Pakovanje | Kroz rupu (Through-hole) |
| Napomene / varijante | Nema |
- Osigurajte ispravnu polarizaciju prilikom povezivanja zujalice.
- Koristite otpornik za ograničenje struje za bazu tranzistora.
- Spojite zujalicu na napajanje kompatibilno s njegovim naponskim nazivom.
- Pazite da ne prekoračite maksimalnu strujnu vrijednost tranzistora.
- Držite ožičenje urednim kako biste izbjegli kratke spojeve.
- Testirajte krug prije učitavanja koda kako biste izbjegli oštećenje komponenti.
- Koristite breadboard za lakše povezivanje komponenti.
- Obavezno izvršite debouncing ulaza ako koristite dugmad.
- Razmotrite dodavanje hladnjaka za tranzistor ako se koristi pri visokoj struji.
Upute za povezivanje

Za povezivanje komponenti, počnite spajanjem pozitivnog terminala pasivnog zujalice na 3.3V pin na ESP32-u. Negativni terminal zujalice treba spojiti na kolektor NPN tranzistora. Emiter pin tranzistora treba spojiti na uzemljenje (GND) ESP32-a.
Zatim spojite otpornik od 1 kΩ od baze tranzistora na GPIO pin 14 na ESP32-u. Ovaj otpornik ograničava struju koja teče u bazu tranzistora. Na kraju, osigurajte da su sve veze uzemljenja povezane zajedno kako bi se pružila zajednička referenca za krug.
Primjeri koda i objašnjenje
const int buzzerPin = 14; // pin zujalice
void setup()
{
pinMode(buzzerPin, OUTPUT); // Postavi kao izlaz
}
U kodu definiramo konstantnu varijablu buzzerPin koja je postavljena na 14, označavajući GPIO pin spojen na bazu tranzistora. U funkciji setup(), postavljamo ovaj pin kao IZLAZ, omogućavajući ESP32-u da kontrolira zujalicu.
void loop()
{
for (int i = 0; i < 50; i++) // Petlja 50 puta i svaki put svira kratki ton
{
digitalWrite(buzzerPin, HIGH); // Postavi na HIGH da zujalica zazvoni
delay(3); // Čekaj 3 milisekunde
digitalWrite(buzzerPin, LOW); // LOW da isključi zujalicu
delay(3); //
}
delay(1000); // Čekaj 1s prije početka sljedeće petlje
}
Funkcija loop() sadrži for petlju koja se izvodi 50 puta. Svaka iteracija brzo uključuje i isključuje zujalicu, proizvodeći ton. Kašnjenja od 3 milisekunde kontroliraju koliko dugo je zujalica aktivirana i deaktivirana, dok kašnjenje od 1 sekunde na kraju petlje pruža pauzu prije ponavljanja.
Demonstracija / Šta očekivati
Nakon što je povezivanje završeno i kod učitan, trebali biste čuti niz kratkih tonova koje proizvodi zujalica. Ako zujalica ne zvoni, provjerite svoje veze, posebno orijentaciju tranzistora i vrijednost otpornika. Osigurajte da je ispravan pin korišten u kodu i da je ESP32 pravilno napajan.
Tokom demonstracije, ako naiđete na probleme, to može biti zbog pogrešnog povezivanja ili korištenja pogrešnog pina za zujalicu. Provjerite povezivanje prema uputama i osigurajte da je napajanje adekvatno (u videu na 08:15).
Vremenske oznake videa
- 00:00 Početak
- 1:52 Uvod u projekt
- 4:11 Objašnjenje povezivanja
- 8:11 Odabir ESP32 ploče i COM porta u Arduino IDE-u
- 9:53 Objašnjenje Arduino koda
- 13:17 Demonstracija projekta
- 13:58 Kod i demonstracija projekta 2
const int buzzerPin = 14; //buzzer pin
const int resolution = 8;
// Frequencies of the 7 musical notes (in Hz)
int frequencies[] = {262, 294, 330, 349, 392, 440, 494};
// Function to play a frequency on the buzzer for a given duration
void playFrequency(int frequency, int duration) {
ledcWriteTone(buzzerPin, frequency); // Start the tone
delay(duration); // Wait for the specified duration
ledcWriteTone(buzzerPin, 0); // Stop the buzzer
}
void setup() {
ledcAttach(buzzerPin, 2000, 8); // Set up the PWM pin
}
void loop() {
for (int i = 0; i < 7; i++) {
playFrequency(frequencies[i], 300); // Play each note for 300ms
delay(50); // Add a brief pause between the notes
}
delay(1000); // Wait for 1 second before replaying the sequence
}
Common Course Links
Common Course Files
Resources & references
-
DocumentationESP32 Tutorial 14/55- SunFounder Resources page for custom tonedocs.sunfounder.com
Files📁
Datasheet (pdf)
-
Buzzer MB12A05 C96093 datasheet
Buzzer_MB12A05_C96093_datasheet.pdf0.97 MB -
NPN Epitaxial Silicon Transistor SS8050 datasheet
SS8050-datasheet.pdf0.19 MB