Using a Piezoelectric Speak with ESP8266
These small speakers are passive,( they dont need an amplifier), so are easy to use.
To buy- just search for "piezoelectric speaker" on ebay
I found that the speaker would work with just GND and D2 connected, but at higher volumes would just glitch out. Connecting the 3.3V may be better as it can allow a higher current, although I dodnt notice any issues.
https://techtutorialsx.com/2016/05/07/esp826-controlling-a-buzzer/
Connecting the signal wire to D3 (GPIO 0) or D4 (GPIO 2) will cause errors on starting the module in some cases , so best avoid these depending on your module.
The ESP has the ability do do Pulse Width Modulation on all IO pins.
https://circuits4you.com/2017/12/21/esp8266-pwm-example/
This allows the generation of square waves of different frequencies and amplitude.
This code should play some mario inspired sounds.
CODE: xxxx.bas
'Peizo Speaker demo
D0=16:D1=5:D2=4:D3=0:D4=2:D5=14:D6=12:D7=13:D8=15:D9=3:D10=1
' Use D2 (GPIO 4) for PWM
'The sound data, in format length of note, frequency
Data 12,2637,12, 2637,12, 0,12, 2637,12,0, 12,2093,12, 2637,12, 0,12,3136,12, 0,12, 0,12, 0,12,1568,12, 0,12, 0,12, 0
data 12,2093,12, 0,12, 0,12, 1568,12,0,12, 0,12, 1319,12, 0,12,0,12, 1760,12, 0,12, 1976,12,0,12, 1865,12, 1760,12, 0
data 9,1568,9, 2637,9, 3136,12,3520,12, 0,12, 2794,12, 3136,12,0,12, 2637,12, 0,12, 2093,12,2349,12, 1976,12, 0,12, 0
data 12,2093,12, 0,12, 0,12, 1568,12,0,12, 0,12, 1319,12, 0,12,0,12, 1760,12, 0,12, 1976,12,0,12, 1865,12, 1760,12, 0
data 9,1568,9, 2637,9, 3136,12,3520,12, 0,12, 2794,12, 3136,12,0,12, 2637,12, 0,12, 2093,12,2349,12, 1976,12, 0,12, 0
data 12,262,12, 523,12, 220,12, 440,12,233,12, 466,6, 0,3, 0,12,262,12, 523,12, 220,12, 440,12, 233,12, 466,6 0,3,0
data 12,175,12, 349,12, 147,12, 294,12,156,12, 311,6, 0,3,0,12,175,12, 349,12, 147,12, 294,12,156,12, 311,6, 0
data 6,0,18, 311,18, 277,18, 294,6,277,6, 311,6, 311,6, 208,6,196,6, 277,18,262,18 ,370,18, 349,18, 165,18, 466,18, 440
data 10,415,10, 311,10, 247,10,233,10, 220,10, 208,3,0,3, 0,3,0,12,-1
do
read l,f 'Get length and frequency of note
if f > -1 then ' if a is -1 then thats the last note, ans stop
if f = 0 then
pwm(D2)=0 ' if frequency zero then set output to zero as we cant do a pwmfreq of zero as it may cause a crash.likely to be fixed in later versions.
else
option.pwmfreq f 'set the PWM frequency
pwm(D2) = 100 ' this is volume 0 to 1023 , 1023 being the loudest .I found at about 100 I got a loud sound and going high made little difference, ocer 950 started getting quieter.
end if
end if
pause (15*l) 'pause for 15 milliseconds * l (length of note). Reducing 15 will make it play faster.
loop until f = -1
end
Č