Raspberry Pi Pico
Using A Buzzer
I wanted to recreate the functionality with the buzzer that I had managed with MicroPython. That meant writing a library to play tunes. I delieberately chose not to look for one before trying to do a simple conversion of my MicroPython library. CircuitPython plays tunes in a very similar way. Clearly, you could look to download a better one or make some improvements to what I have done here.
The idea was to have a notation that I could use for describing a tune. I loosely based it on the way that it is done for the micro:bit.
The buzzer has two pins. One of them is connected to GND (directly in this photograph). The other pin is connected to GP16.

This is the library that I saved to the libraries folder as music.py
from pwmio import PWMOut
from time import sleep
# the duty cycle to use when the note is on
on = 32768
# the silence after a note is played
artic = 0.01
# dictionary of notes
notes = {
"B0": 31,
"C1": 33,
"CS1": 35,
"D1": 37,
"DS1": 39,
"E1": 41,
"F1": 44,
"FS1": 46,
"G1": 49,
"GS1": 52,
"A1": 55,
"AS1": 58,
"B1": 62,
"C2": 65,
"CS2": 69,
"D2": 73,
"DS2": 78,
"E2": 82,
"F2": 87,
"FS2": 93,
"G2": 98,
"GS2": 104,
"A2": 110,
"AS2": 117,
"B2": 123,
"C3": 131,
"CS3": 139,
"D3": 147,
"DS3": 156,
"E3": 165,
"F3": 175,
"FS3": 185,
"G3": 196,
"GS3": 208,
"A3": 220,
"AS3": 233,
"B3": 247,
"C4": 262,
"CS4": 277,
"D4": 294,
"DS4": 311,
"E4": 330,
"F4": 349,
"FS4": 370,
"G4": 392,
"GS4": 415,
"A4": 440,
"AS4": 466,
"B4": 494,
"C5": 523,
"CS5": 554,
"D5": 587,
"DS5": 622,
"E5": 659,
"F5": 698,
"FS5": 740,
"G5": 784,
"GS5": 831,
"A5": 880,
"AS5": 932,
"B5": 988,
"C6": 1047,
"CS6": 1109,
"D6": 1175,
"DS6": 1245,
"E6": 1319,
"F6": 1397,
"FS6": 1480,
"G6": 1568,
"GS6": 1661,
"A6": 1760,
"AS6": 1865,
"B6": 1976,
"C7": 2093,
"CS7": 2217,
"D7": 2349,
"DS7": 2489,
"E7": 2637,
"F7": 2794,
"FS7": 2960,
"G7": 3136,
"GS7": 3322,
"A7": 3520,
"AS7": 3729,
"B7": 3951,
"C8": 4186,
"CS8": 4435,
"D8": 4699,
"DS8": 4978
}
# buzzer, frequency, duration
def tone(buzzer, frequency, duration):
buzzer.duty_cycle = on
buzzer.frequency = frequency
sleep(duration)
buzzer.duty_cycle = 0
# buzzer, frequency - until stopped
def note_on(buzzer, frequency):
buzzer.duty_cycle = on
buzz.frequency = frequency
# stop the noise
def note_off(buzzer):
buzzer.duty_cycle = 0
def play_tune(buzzer, melody):
for itm in melody:
n,d = tuple(itm.split(":"))
d = float(d)
n = notes.get(n,0)
if n==0:
sleep(d)
else:
tone(buzzer,n,d)
sleep(artic)
And here is a short program defining a tune to play.
import board from time import sleep from pwmio import PWMOut from music import play_tune # set up buzzer with variable frequency buzzer = PWMOut(board.GP16, variable_frequency = True) tune = [ 'FS4:0.2','G4:0.2','A4:0.2','B4:0.6','A4:0.2','B4:0.2','E5:0.2', 'D5:0.2','B4:0.2','A4:0.2','G4:0.2','E4:0.6','G4:0.2','B4:0.2', 'C5:0.2','D5:0.6','E5:0.2','D5:0.2','B4:0.2','G4:0.2','B4:0.2', 'A4:0.8','R:0.2','FS4:0.2','G4:0.2','A4:0.2','B4:0.6','A4:0.2', 'B4:0.2','E5:0.2','D5:0.2','B4:0.2','A4:0.2','G4:0.2','E4:0.6', 'FS4:0.2','G4:0.2','A4:0.2','B4:0.6','C5:0.2','B4:0.2','A4:0.2', 'G4:0.2','A4:0.2','G4:0.8','R:0.2','D5:0.2','E5:0.2','FS5:0.2', 'G5:0.6','FS5:0.2','FS5:0.2','E5:0.2','D5:0.2','E5:0.2','D5:0.2', 'B4:0.2','G4:0.6','D5:0.2','E5:0.2','FS5:0.2','G5:0.6','FS5:0.2', 'FS5:0.2','E5:0.2','D5:0.2','B4:0.2','A4:0.8','R:0.2','D5:0.2', 'D5:0.2','D5:0.2','B5:0.6','A5:0.2','A5:0.2','G5:0.2','E5:0.2', 'G5:0.2','D5:0.2','B4:0.2','G4:0.6','FS4:0.2','G4:0.2','A4:0.2', 'B4:0.2','E5:0.2','D5:0.2','B4:0.2','A4:0.2','G4:0.2','E4:0.2', 'FS4:0.2','G4:0.8','R:0.2'] play_tune(buzzer, tune)

