Programmieren mit MicroPython #5: Piezo Buzzer am ESP32 betreiben

In diesem Beitrag erfährst du, wie man einen passiven Piezo Buzzer am ESP32 mit MicroPython programmiert.

Piezo Buzzer
Piezo Buzzer

Einen Piezo Buzzer steuerst du mit einem PWM Signal. Und wie du ein PWM Signal am ESP32 erzeugst hast du bestimmt schon im letzten Beitrag Programmieren mit MicroPython #2: steuern von Leuchtdioden (LED) gelesen. 

benötigte Bauteile

Für den Nachbau benötigst du:

Aufbau der Schaltung

Die Schaltung ist relativ einfach, denn der passive Piezo Buzzer wird lediglich mit einem GPIO Pin sowie dem Pin „G“ (steht für GND, Minuspol) verbunden.

Schaltung - passiver Piezo Buzzer am ESP32
Schaltung – passiver Piezo Buzzer am ESP32

An meinem ESP32 vom Typ LOLIN32 habe ich den passiven Piezo Buzzer an GND (schwarzes Kabel) sowie dem GPIO Pin 4 (gelbes Kabel) angeschlossen.

ESP32 mit passiven Piezo Buzzer
ESP32 mit passiven Piezo Buzzer

Programmieren

Das nachfolgende Beispiel habe ich von der Seite Micropython on ESP8266 Workshop übernommen.

Der passive Piezo Buzzer wird über ein PWM Signal gesteuert. Zuerst müssen wir uns also die benötigten Module importieren.
Es wird das Pin sowie PWM aus der Bibliothek „machine“ importiert.

from machine import Pin, PWM

Des Weiteren benötigen wir für die Pausen zwischen den einzelnen Tönen die Funktion „sleep“ diese finden wir im Modul „time“ welches wir ebenso importieren.

from time import sleep

Definieren wir nun zunächst unseren Buzzer Pin

buzzer = PWM(Pin(4, Pin.OUT), freq=440, duty=512)

Für das abspielen der Tonleiter definieren wir ein Dictionary mit den Keys der Buchstaben der Töne und den Values der jeweiligen Frequenz.

tones = {
    'c': 262,
    'd': 294,
    'e': 330,
    'f': 349,
    'g': 392,
    'a': 440,
    'b': 494,
    'C': 523,
    ' ': 0,
}

Die Maximale Frequenz eines PWM Signales liegt bei 1000 Hz.

Nun definieren wir die Tonfolge / Melodie und den Takt welcher auf dem Buzzer abgespielt werden soll.

melody = 'cdefgabC'
rhythm = [8, 8, 8, 8, 8, 8, 8, 8]

Zunächst definieren wir unser Tempo fest.

tempo = 5

Um nun die Tonfolge abzuspielen durchlaufen wir die Zeichenfolge „melody“ und des Rytmus („Rhythm“).
Mit der Funktion „freq“ geben wir eine bestimmte Frequenz auf dem Buzzer wieder und mit der darauffolgenden Funktion „sleep“ pausieren wir somit haben wir den Tone in einer bestimmten länge abgespielt.

Dieses machen wir für jeden Ton in der Zeichenkette „melody“.

for tone, length in zip(melody, rhythm):
    buzzer.freq(tones[tone])
    sleep(tempo/length)
beeper.deinit()

Hier nun das gesamte Programm:

from machine import Pin, PWM
from time import sleep

buzzer = PWM(Pin(4, Pin.OUT), freq=440, duty=512)

tones = {
    'c': 262,
    'd': 294,
    'e': 330,
    'f': 349,
    'g': 392,
    'a': 440,
    'b': 494,
    'C': 523,
    ' ': 0,
}

melody = 'cdefgabC'
rhythm = [8, 8, 8, 8, 8, 8, 8, 8]

tempo = 5

for tone, length in zip(melody, rhythm):
    buzzer.freq(tones[tone])
    sleep(tempo/length)
beeper.deinit()

Video

Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert