Skip to content

Get started with Pulse Width Modulation (PWM)

Lolin1

Summary

In this tutorial we will be experimenting with pulse width modulation. This pattern is used for controlling the current given to the board and you can set duration for high and low voltage.

Requirements

  • 1 x LOLIN D1 MINI PRO board
  • 1 x Micro USB
  • 2 x cables
  • 1 x Buzzer / piezo speaker

External Buzzer

Connect your board to your computer

This step should be easy if you completed the first tutorial.

  • Connect the one end of your micro usb on your board and the other end to your computer.

  • Open PuTTY and select Serial connection type.

  • Use the appropriate Serial Line COM5 (same you did on Tutorial 1, if you don't remember it you can find it through device manager) and speed 115200 and click open.

Ports

Putty

Create the following circuit

External buzzer

  • Use the following code to check that your buzzer works

    1
    2
    3
    4
    5
    6
    7
    from machine import Pin, PWM
    import time
    // you can set any freq you want up to 1000 to change the beeper sound
    beeper = PWM(Pin(14), freq=440, duty=512)
    time.sleep(0.5)
    // stops the buzzer
    beeper.deinit()
    
  • Now you can use the following code to see how you can play melodies with PWM changing the frequency of the voltage

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    from machine import Pin, PWM
    import time
    tempo = 5
    // tones different frequency
    tones = {
        'c': 262,
        'd': 294,
        'e': 330,
        'f': 349,
        'g': 392,
        'a': 440,
        'b': 494,
        'C': 523,
        ' ': 0,
    }
    
    beeper = PWM(Pin(14, Pin.OUT), freq=440, duty=512)
    melody = 'cdefgabCbagfedc'
    rhythm = [8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8]
    
    for tone, length in zip(melody, rhythm):
        beeper.freq(tones[tone])
        time.sleep(tempo/length)
    
    //stop the beeper
    beeper.deinit()
    

This is the end of Tutorial 6, you should now be able to control a buzzer and pwm.