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:25] tungntdevelopment:python:micropython:buzzer [2024/08/23 14:34] (current) tungnt
Line 5: Line 5:
   * [[https://www.blackghostaudio.com/blog/basic-music-theory-for-beginners|Basic Music Theory for Beginner Music Producers]]   * [[https://www.blackghostaudio.com/blog/basic-music-theory-for-beginners|Basic Music Theory for Beginner Music Producers]]
  
-{{ :development:python:micropython:8ibtpr5ngxdomdjdwp2nrb-650-80.png.webp |}}+{{ :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.1724419525.txt.gz · Last modified: 2024/08/23 13:25 by tungnt

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki