***Question***

How can PicoW read MEMS digital microphone output?

---

***Answer***

Introduction

*1. Overview.*

We can connect the MEMS microphone output pin to a PicoW GPIO pin and read signal, into a list for later processing.

---

*2. Simulation*

For prototyping, we can simulate the microphone output signal as a GPIO output pin connected blinking LED, and use another GPIO input pin to read the blinking LED pin.

---

*3.  Trying Blink rates 1kHz, 2kHx, to simulate 1kHz, 2kHz tones*

[![1k, 1k led blinking tones][1]][1]

[![1k, 2k tones 2][2]][2]

---

*4. / to continue, ...*

---

***References***

(1) [Adafruit PDM Microphone Breakout 1][3]

(2) [Adafruit PDM Microphone Breakout 2][4]

(3) [AliExpress Digital MP34DT01 Microphone Module Simple Pulse Density Modulation Output PDM Digital MEMS Microphone Module - HK$27][5]

[(4) TaoBao MP34DT01 MEMS PDM Microphone - ¥25][6]

[(5) 1000 Hz Test Tone - Sonic Electronix][7]

---

***Appendices***

Appendix A - MicroPython program blinking two LEDs simulating two MEMS digital microphone output signals

    # Pico W Blink Two LEDs - tlfong01 2023jan01hkt1941
    
    # *** Modules ***
    import machine
    from machine import Pin, Timer
    
    # *** Configuration***
    redLed      = Pin(0, Pin.OUT)
    greenLed    = Pin(1, Pin.OUT)
    
    redFreq     = 2
    greenFreq   = 4
    
    redTimer    = Timer()
    greenTimer  = Timer()
    
    # *** Callbacks ***
    def blinkRedLed(dummy):
        redLed.toggle()
        return
    
    def blinkGreenLed(dummy):
        greenLed.toggle()
        return
    
    # *** Main ***
    redTimer.init(freq = redFreq, mode = Timer.PERIODIC, callback = blinkRedLed)
    greenTimer.init(freq = greenFreq, mode = Timer.PERIODIC, callback = blinkGreenLed)
    
    # *** End of program ***

---

*Appendix B - Blinking LEDs Video*

[PicoW blinking two LEDS][8]

---

*Appendix C - MEMS Mic, PicoW GPIO Eval Brd Setup*

[![gpio eval brd][9]][9]

    # PicoW GPIO Input Testing v7.0 - tlfong01 2023jan02hkt1410
    
    # *** 1.0 Modules ***
    import machine
    import utime
    from machine import Pin, Timer
    
    # *** 2.0 Configuration and Functions ***
    
    # 2.1 Blinking LED Configurations and Functions
    redFreq     = 6 # Red LED blinking frequency
    greenFreq   = 3 # Green LED blinking frequency
    
    redLed      = Pin(0, Pin.OUT, value = 1) # Create Red LED object, init On
    greenLed    = Pin(1, Pin.OUT, value = 1) # Create Green LED object, init On
    
    redTimer    = Timer() # Red LED timer, callback blinkRedLed
    greenTimer  = Timer() # Greed LED timer, callback blinkGreenLed
    
    # 2.2 Blinking LED Callbacks
    def blinkRedLed(dummy):
        redLed.toggle()
        return
    
    def blinkGreenLed(dummy):
        greenLed.toggle()
        return
    
    # *** 3.0 GPIO Input Configurations and Functions ***
    
    readGpioPin2 = Pin(2, Pin.IN, Pin.PULL_UP) # Create GPIO input pin object
    readGpioPin3 = Pin(3, Pin.IN, Pin.PULL_UP) # Create GPIO input pin object
    
    def readRedLed():
        ledStatus = readGpioPin2()
        if ledStatus == 1:
            return "High"
        else:
            return "Low"
    
    def readGreenLed():
        ledStatus = readGpioPin3()
        if ledStatus == 1:
            return "High"
        else:

            return "Low"
    
    def readPrintRedGreenLedStatus():
        redLedStatus = readRedLed()
        greenLedStatus = readGreenLed()
        print('RedLedStatus   =', redLedStatus)
        print('GreenLedStatus =', greenLedStatus)
        return
    
    ### *** 4.0 / to continue, ... ***
    
    # *** 9.0 Main ***
    
    # 9.1 Run Red/Green Timer for 2 seconds
    
    redTimer.init(freq = redFreq, mode = Timer.PERIODIC, callback = blinkRedLed)
    greenTimer.init(freq = greenFreq, mode = Timer.PERIODIC, callback = blinkGreenLed)
    utime.sleep(2)
    redTimer.deinit()
    greenTimer.deinit()
    
    # 9.2 Set/Read/Print Red/Green LED status
    
    redLed.on()
    greenLed.on()
    
    readPrintRedGreenLedStatus()
    
    # *** End of program ***

---


  [1]: https://i.sstatic.net/mofeV.jpg
  [2]: https://i.sstatic.net/W1qsp.jpg
  [3]: https://www.adafruit.com/product/4346
  [4]: https://www.adafruit.com/product/2716?gclid=Cj0KCQiAtbqdBhDvARIsAGYnXBMlWo5Px8MPOsGz6mfOlcQTx8zKgi5kgOL-PCL5XbvoMZWBFNUa23UaAjYmEALw_wcB
  [5]: https://www.aliexpress.com/item/4001240664476.html?spm=a2g0o.productlist.main.11.391442abGc1Xty&algo_pvid=6a244fb2-b2ec-4056-9172-b6b7a664e1d8&algo_exp_id=6a244fb2-b2ec-4056-9172-b6b7a664e1d8-5&pdp_ext_f=%7B%22sku_id%22%3A%2210000015426511105%22%7D&pdp_npi=2%40dis%21HKD%2133.27%2126.32%21%21%21%21%21%40212248ba16725455499866162d0736%2110000015426511105%21sea&curPageLogUid=REzyejBWMWnE
  [6]: https://item.taobao.com/item.htm?_u=13thdsb1b52&id=626041686368
  [7]: https://www.youtube.com/watch?v=TbPh0pmNjo8
  [8]: https://youtu.be/SlbA8wIEvJY
  [9]: https://i.sstatic.net/GKznZ.jpg