TungNT (Blue)

tungnt.blue@gmail.com

User Tools

Site Tools


development:python:micropython:buzzer

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
development:python:micropython:buzzer [2024/08/23 13:26] tungntdevelopment:python:micropython:buzzer [2024/08/23 14:34] (current) tungnt
Line 6: Line 6:
  
 {{ :development:python:micropython:xp4dft32nduxyr6tmuz4wg-970-80.png |}} {{ :development:python:micropython:xp4dft32nduxyr6tmuz4wg-970-80.png |}}
 +
 +<file python boot.py>
 +from machine import Pin, PWM
 +from utime import sleep
 +from time import sleep_ms
 +from song import Song
 +from buzzer import Buzzer, BuzzerLib
 +
 +bz = PWM(Pin(23))
 +
 +# Programming the Buzzer 
 +
 +bz.freq(500) # volumne = 500
 +bz.duty_u16(1000)
 +sleep(1)
 +bz.duty_u16(0)
 +
 +# Playing Music with a Buzzer
 +
 +_song = Song(23)
 +
 +_song.play_song_test()
 +sleep(1)
 +_song.play_song_mario()
 +sleep(1)
 +_song.play_song_jingle()
 +
 +# Other Lib
 +
 +bz = Buzzer(23)
 +
 +print("Playing mario.")
 +bz.play(BuzzerLib.mario, 150, 32767)
 +sleep_ms(1000)
 +
 +print("Playing jingle bells.")
 +bz.play(BuzzerLib.jingle, 250, 32767)
 +sleep_ms(1000)
 +
 +print("Playing twinkle, twinkle little star.")
 +bz.play(BuzzerLib.twinkle, 600, 32767)
 +</file>
 +
 +<file python music.py>
 +class Music:
 +    def __init__(self):
 +        pass
 +    
 +    def tones():
 +        return {
 +            "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
 +        }
 +</file>
 +
 +<file python song.py>
 +from machine import Pin, PWM
 +from time import sleep_ms
 +from music import Music
 +
 +class Song:
 +    def __init__(self, sig_pin):
 +        self.buzzer = PWM(Pin(sig_pin), duty_u16=0)  
 +        self.tones = Music.tones()
 +    
 +    def test():
 +        # Create a list of notes for your song. Use the letter P to represent pauses in the music
 +        return ["E5","G5","A5","P","E5","G5","B5","A5","P","E5","G5","A5","P","G5","E5"]
 +
 +    # Function called playtone that will take any frequency and play it at full volume
 +    def playtone(self, frequency, duty):
 +        self.buzzer.duty_u16(duty)
 +        self.buzzer.freq(frequency)
 +
 +    # Function called bequiet that will silence the buzzer by change duty_u16 to 0
 +    def bequiet(self):
 +        self.buzzer.duty_u16(0)        
 +
 +    def play_song(self, song, wait=150, duty=32767):
 +        for i in range(len(song)):
 +            if (song[i] == "P"):
 +                self.bequiet()
 +            else:
 +                self.playtone(self.tones[song[i]], duty)
 +            sleep_ms(wait)
 +            
 +        self.bequiet()   
 +
 +    def play_song_test(self):        
 +        song = ["E5","G5","A5","P","E5","G5","B5","A5","P","E5","G5","A5","P","G5","E5"]
 +
 +        self.play_song(song)
 +
 +    def play_song_jingle(self):        
 +        song = [
 +            'E7', 'E7', 'E7', "P",
 +            'E7', 'E7', 'E7', "P",
 +            'E7', 'G7', 'C7', 'D7', 'E7', "P",
 +            'F7', 'F7', 'F7', 'F7', 'F7', 'E7', 'E7', 'E7', 'E7', 'D7', 'D7', 'E7', 'D7', "P", 'G7', "P",
 +            'E7', 'E7', 'E7', "P",
 +            'E7', 'E7', 'E7', "P",
 +            'E7', 'G7', 'C7', 'D7', 'E7', "P",
 +            'F7', 'F7', 'F7', 'F7', 'F7', 'E7', 'E7', 'E7', 'G7', 'G7', 'F7', 'D7', 'C7', "P" 
 +        ]
 +
 +        self.play_song(song)
 +
 +    def play_song_mario(self):        
 +        song = [
 +            'E7', 'E7',  "P", 'E7',  "P", 'C7', 'E7',  "P",
 +            'G7',  "P",  "P",  "P", 'G6',  "P",  "P",  "P",
 +            'C7',  "P",  "P", 'G6',  "P",  "P", 'E6',  "P",
 +            "P", 'A6',  "P", 'B6',  "P", 'AS6', 'A6',  "P",
 +            'G6', 'E7',  "P", 'G7', 'A7',  "P", 'F7', 'G7',
 +            "P", 'E7',  "P", 'C7', 'D7', 'B6',  "P",  "P",
 +            'C7',  "P",  "P", 'G6',  "P",  "P", 'E6',  "P",
 +            "P", 'A6',  "P", 'B6',  "P", 'AS6', 'A6',  "P",
 +            'G6', 'E7',  "P", 'G7', 'A7', "P", 'F7', 'G7',
 +            "P", 'E7',  "P", 'C7', 'D7', 'B6',  "P",  "P",
 +        ]
 +
 +        self.play_song(song)
 +</file>
 +
 +<file python buzzer.py>
 +from machine import Pin
 +from machine import PWM
 +from time import sleep_ms
 +
 +# Notes and its equivalent frequency
 +           # Octave 0 ********************
 +B0  = 31   # B
 +           # Octave 1 ********************
 +C1  = 33   # C
 +CS1 = 35   # C#/Db
 +D1  = 37   # D
 +DS1 = 39   # D#/Eb
 +E1  = 41   # E
 +F1  = 44   # F
 +FS1 = 46   # F#/Gb
 +G1  = 49   # G
 +GS1 = 52   # G#/Ab
 +A1  = 55   # A
 +AS1 = 58   # A#/Bb
 +B1  = 62   # B
 +           # Octave 2 ********************
 +C2  = 65   # C
 +CS2 = 69   # C#/Db
 +D2  = 73   # D
 +DS2 = 78   # D#/Eb
 +E2  = 82   # E
 +F2  = 87   # F
 +FS2 = 93   # F#/Gb
 +G2  = 98   # G
 +GS2 = 104  # G#/Ab
 +A2  = 110  # A
 +AS2 = 117  # A#/Bb
 +B2  = 123  # B
 +           # Octave 3 ********************
 +C3  = 131  # C
 +CS3 = 139  # C#/Db
 +D3  = 147  # D
 +DS3 = 156  # D#/Eb
 +E3  = 165  # E
 +F3  = 175  # F
 +FS3 = 185  # F#/Gb
 +G3  = 196  # G
 +GS3 = 208  # G#/Ab
 +A3  = 220  # A
 +AS3 = 233  # A#/Bb
 +B3  = 247  # B
 +           # Octave 4 ********************
 +C4  = 262  # C
 +CS4 = 277  # C#/Db
 +D4  = 294  # D
 +DS4 = 311  # D#/Eb
 +E4  = 330  # E
 +F4  = 349  # F
 +FS4 = 370  # F#/Gb
 +G4  = 392  # G
 +GS4 = 415  # G#/Ab
 +A4  = 440  # A
 +AS4 = 466  # A#/Bb
 +B4  = 494  # B
 +           # Octave 5 ********************
 +C5  = 523  # C
 +CS5 = 554  # C#/Db
 +D5  = 587  # D
 +DS5 = 622  # D#/Eb
 +E5  = 659  # E
 +F5  = 698  # F
 +FS5 = 740  # F#/Gb
 +G5  = 784  # G
 +GS5 = 831  # G#/Ab
 +A5  = 880  # A
 +AS5 = 932  # A#/Bb
 +B5  = 988  # B
 +           # Octave 6 ********************
 +C6  = 1047 # C
 +CS6 = 1109 # C#/Db
 +D6  = 1175 # D
 +DS6 = 1245 # D#/Eb
 +E6  = 1319 # E
 +F6  = 1397 # F
 +FS6 = 1480 # F#/Gb
 +G6  = 1568 # G
 +GS6 = 1661 # G#/Ab
 +A6  = 1760 # A
 +AS6 = 1865 # A#/Bb
 +B6  = 1976 # B
 +           # Octave 7 ********************
 +C7  = 2093 # C
 +CS7 = 2217 # C#/Db
 +D7  = 2349 # D
 +DS7 = 2489 # D#/Eb
 +E7  = 2637 # E
 +F7  = 2794 # F
 +FS7 = 2960 # F#/Gb
 +G7  = 3136 # G
 +GS7 = 3322 # G#/Ab
 +A7  = 3520 # A
 +AS7 = 3729 # A#/Bb
 +B7  = 3951 # B
 +           # Octave 8 ********************
 +C8  = 4186 # C
 +CS8 = 4435 # C#/Db
 +D8  = 4699 # D
 +DS8 = 4978 # D#/Eb
 +
 +class BuzzerLib: 
 +
 +    # This is the list of notes for mario theme
 +    # 0 denotes rest notes
 +    mario = [
 +         E7, E7,  0, E7,  0, C7, E7,  0,
 +         G7,  0,  0,  0, G6,  0,  0,  0,
 +         C7,  0,  0, G6,  0,  0, E6,  0,
 +          0, A6,  0, B6,  0,AS6, A6,  0,
 +         G6, E7,  0, G7, A7,  0, F7, G7,
 +          0, E7,  0, C7, D7, B6,  0,  0,
 +         C7,  0,  0, G6,  0,  0, E6,  0,
 +          0, A6,  0, B6,  0,AS6, A6,  0,
 +         G6, E7,  0, G7, A7,  0, F7, G7,
 +          0, E7,  0, C7, D7, B6,  0,  0,
 +    ]
 +
 +    # This is the list of notes for jingle bells
 +    jingle = [
 +        E7, E7, E7, 0,
 +        E7, E7, E7, 0,
 +        E7, G7, C7, D7, E7, 0,
 +        F7, F7, F7, F7, F7, E7, E7, E7, E7, D7, D7, E7, D7, 0, G7, 0,
 +        E7, E7, E7, 0,
 +        E7, E7, E7, 0,
 +        E7, G7, C7, D7, E7, 0,
 +        F7, F7, F7, F7, F7, E7, E7, E7, G7, G7, F7, D7, C7, 0 
 +    ]
 +
 +    # This is the list of notes for Twinkle, Twinkle Little Star
 +    twinkle = [
 +        C6, C6, G6, G6, A6, A6, G6, 0,
 +        F6, F6, E6, E6, D6, D6, C6, 0,
 +        G6, G6, F6, F6, E6, E6, D6, 0,
 +        G6, G6, F6, F6, E6, E6, D6, 0,
 +        C6, C6, G6, G6, A6, A6, G6, 0,
 +        F6, F6, E6, E6, D6, D6, C6, 0,
 +    ]
 +
 +class Buzzer: 
 +    def __init__(self, sig_pin):
 +        self.pwm = PWM(Pin(sig_pin),duty_u16=0)      
 +        
 +    def play(self, melodies, wait, duty=32767):
 +        for note in melodies:
 +            if note != 0:
 +                self.pwm.freq(note)
 +            self.pwm.duty_u16(duty)
 +            sleep_ms(wait)
 +        # Disable the pulse, setting the duty to 0
 +        self.pwm.duty_u16(0)
 +        # Disconnect the pwm driver
 +        #self.pwm.deinit() # remove to play the next melodies
 +        
 +    def tone(self, notes, wait, duty=32767):
 +        self.pwm.freq(notes)
 +        self.pwm.duty_u16(duty)
 +        sleep_ms(wait)
 +        self.pwm.duty_u16(0)
 +
 +
 +"""
 +bz = Buzzer(23)
 +
 +print("Playing mario.")
 +bz.play(mario, 150, 32767)
 +sleep_ms(1000)
 +
 +print("Playing jingle bells.")
 +bz.play(jingle, 250, 32767)
 +sleep_ms(1000)
 +
 +print("Playing twinkle, twinkle little star.")
 +bz.play(twinkle, 600, 32767)
 +"""
 +</file>
 +
development/python/micropython/buzzer.1724419571.txt.gz · Last modified: 2024/08/23 13:26 by tungnt

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki