ESP-WROOM-02とマイクをつないでみた話。

 ESP-WROOM-02とマイクをつないでみた話。

ESP-WROOM-02とマイクをつないでみた話。
I connected between ESP8266 and digital MIC via I2S interface.

7507885e7de2f5fa2a3e80a445236d89?s=128

masato-ka

May 14, 2017
Tweet

Transcript

  1. ESP-WROOM-02ͱϚΠΫΛͭͳ ͍ͰΈͨɻ 2017/05/19 @masato_ka 17೥5݄19೔༵ۚ೔

  2. Ϟνϕʔγϣϯ IoT×Ի Ͱָ͍͜͠ͱΛ͍ͨ͠ 17೥5݄19೔༵ۚ೔

  3. ਎ͷճΓͷԻΛ෼ੳͯ͠৘ใΛऔΓग़͍ͨ͠ Analytics ੜ׆ Իͷ෼ੳ Sound Server Ի੠ೝࣝ Իָ δϟϯϧ 17೥5݄19೔༵ۚ೔

  4. ϚΠΫͰԻΛरͬͯαʔόʹૹΔσόΠεΛ࡞Δ Analytics ੜ׆ Իͷ෼ੳ Sound Server Ի੠ೝࣝ Իָ δϟϯϧ 17೥5݄19೔༵ۚ೔

  5. ESP-WROOM-02Λબ୒ͨ͠ཧ༝ • ࡞ͬͨޙஔ͘৔ॴʹࠔΒͳͦ͞͏ • ి஑Ͱಈ࡞Ͱ͖Δ • WiFi௨৴ • খܕ •

    ͍҆(νοϓ͚ͩͳΒ500ԁ) ࣸਅग़య:εΠοναΠΤϯε 17೥5݄19೔༵ۚ೔
  6. ࡞ΔσόΠεͷ໨ඪઃఆ ໨ඪ1.ɹ16kHz/16bitͷԻ੠σʔλ ి࿩ͷԻ੠͕8kHzɺ΋͏গ͠໌ྎͳԻΛर͍͍ͨɻ ໨ඪ2.ɹԻ੠ͷετϦʔϛϯά ෼ੳ͍ͨ͠σʔλԻ͕͍ͭൃੜ͢Δ͔Θ͔Βͳ͍ɻ ్੾Εͳ͘σʔλΛૹΕΔΑ͏ʹ͢Δɻ 17೥5݄19೔༵ۚ೔

  7. ͜Ε͕͚ͬ͜͏ ೉͔ͬͨ͠ʂ 17೥5݄19೔༵ۚ೔

  8. ֎؍ ϋʔυ ΢ΣΞ ಈ࡞ͤ͞ΔͨΊͷपลճ࿏ඞ ཁ,A/Dม׵ͰऔΓࠐΉ ϚΠΫଆͰϑΟϧλͱADม׵Λߦ ͏ɻγϦΞϧΠϯλϑΣʔε(I2SͰ ઀ଓ͢Δɻ ιϑτ ΢ΣΞ

    A/Dม׵ΛλΠϛϯάΑ࣮͘ࢪ ͯ͠16kHzʹͳΔΑ͏ʹ͢Δɻ I2S or SPIͷಡΈऔΓΛߦ͏ॲཧΛ ॻ͘(ArduinoϥΠϒϥϦ͋Γ) ઀ଓͰ͖ͦ͏ͳϚΠΫͷબ୒ ίϯσϯαϚΠΫ σδλϧϚΠΫ ࣸਅग़య:ळ݄ిࢠ 17೥5݄19೔༵ۚ೔
  9. ֎؍ ϋʔυ ΢ΣΞ ಈ࡞ͤ͞ΔͨΊͷपลճ࿏ඞ ཁ,A/Dม׵ͰऔΓࠐΉ ϚΠΫଆͰϑΟϧλͱADม׵Λߦ ͏ɻγϦΞϧΠϯλϑΣʔε(I2SͰ ઀ଓ͢Δɻ ιϑτ ΢ΣΞ

    A/Dม׵ΛλΠϛϯάΑ࣮͘ࢪ ͯ͠16kHzʹͳΔΑ͏ʹ͢Δɻ I2S or SPIͷಡΈऔΓΛߦ͏ॲཧΛ ॻ͘(ArduinoϥΠϒϥϦ͋Γ) ֎෦ճ࿏͕ෆཁͳσδλϧϚΠΫΛ࠾༻ ίϯσϯαϚΠΫ σδλϧϚΠΫ ؆୯ͦ͏ʂ (ʹݟ͑ͨ) ࣸਅग़య:ळ݄ిࢠ 17೥5݄19೔༵ۚ೔
  10. I2S(Inter-IC Sound) • 3ઢࣜͷΦʔσΟΦΠϯλϑΣʔε • CLKʹै͍Ի੠σʔλΛσδλϧग़ྗ • WS-CLKʹै͍ɺL/RͷεςϨΦσʔλΛग़ྗ͢Δɻ • ࢓༷͕SPIʹࠅࣅ͍ͯ͠ΔͨΊɺSPIΠϯλϑΣʔε΋୅༻Ͱ͖Δɻ

    CLK WS DATA 16kHz×32bit×2ch 㲈.)[ Left Right 1bit/1clkͷσʔλ 32bit ࣸਅग़య:ळ݄ిࢠ 17೥5݄19೔༵ۚ೔
  11. I2S/SPI ͲͪΒͱϚΠΫΛ઀ଓ͢Δ͔ • ESP8266 ͸I2SͱSPIͷ྆ํͷΠϯλϑΣʔεΛ౥ࡌ͍ͯ͠Δɻ Interface I2S SPI Arduino ϥΠϒϥ

    ϦରԠঢ় گ ˚ (TXͷΈɺઃఆݻఆ) ̋ ϋʔυ΢ ΣΞରԠ ঢ়گ TX,RXϞδϡʔϧ͕෼͔Εͯ ͍ͯDMA͕ϝϞϦసૹ͢Δ (※ޙड़) ϝϞϦૢ࡞͸ιϑτ΢ΣΞଆ Ͱॲཧ͢Δɻ 17೥5݄19೔༵ۚ೔
  12. I2S/SPI ͲͪΒͱϚΠΫΛ઀ଓ͢Δ͔ • ESP8266 ͸I2SͱSPIͷ྆ํͷΠϯλϑΣʔεΛ౥ࡌ͍ͯ͠Δɻ Interface I2S SPI Arduino ϥΠϒϥ

    ϦରԠঢ় گ ˚ (TXͷΈɺઃఆݻఆ) ̋ ϋʔυ΢ ΣΞରԠ ঢ়گ TX,RXϞδϡʔϧ͕෼͔Εͯ ͍ͯDMA͕ϝϞϦసૹ͢Δ (※ޙड़) ϝϞϦૢ࡞͸ιϑτ΢ΣΞଆ Ͱॲཧ͢Δɻ ݱঢ়΍ΔͳΒҰ୒ʂ 17೥5݄19೔༵ۚ೔
  13. SPIͰ઀ଓͯ͠Έͨ݁Ռ 17೥5݄19೔༵ۚ೔

  14. • ొ৔ਓ෺͸CPUɺSPIϞδϡʔϧͱϝϞϦ SPI઀ଓͷ৔߹ ※ৄࡉ͸QiitaͰʮAMDP441ʯͰݕࡧ ESP8266 CPU SPI ϝϞϦRAM(32KB) ϢʔβϓϩάϥϜ ESP8266಺෦ͷಈ࡞

    17೥5݄19೔༵ۚ೔
  15. • CPU͔Βͷread໋ྩͰSPIͷಡΈࠐΈ։࢝ SPI઀ଓͷ৔߹ ※ৄࡉ͸QiitaͰʮAMDP441ʯͰݕࡧ ESP8266 SPI CLK L/R CLK DATA

    CPU SPI ϝϞϦRAM(32KB) ϢʔβϓϩάϥϜ ESP8266಺෦ͷಈ࡞ read໋ྩ σʔλड৴ 17೥5݄19೔༵ۚ೔
  16. • SPI͔ΒಡΈऔͬͨσʔλΛCPU͕ϝϞϦʹอଘ͢Δɻ SPI઀ଓͷ৔߹ ※ৄࡉ͸QiitaͰʮAMDP441ʯͰݕࡧ ESP8266 SPI CLK L/R CLK DATA

    CPU SPI ϝϞϦRAM(32KB) ϢʔβϓϩάϥϜ ESP8266಺෦ͷಈ࡞ read໋ྩ σʔλड৴ ϝϞϦʹอଘ 17೥5݄19೔༵ۚ೔
  17. • ֎෦ʹσʔλΛૹ৴͢ΔؒɺSPIͷಡΈऔΓॲཧ͸ఀࢭ͢Δɻ SPI઀ଓͷ৔߹ ※ৄࡉ͸QiitaͰʮAMDP441ʯͰݕࡧ ESP8266 read໋ྩΛ࣮ߦ͍ͯ͠Δ࣌ͷΈCLK ͕ग़ྗ͞ΕΔɻ CPU SPI ϝϞϦRAM(32KB)

    ϢʔβϓϩάϥϜ ֎෦΁ͷσʔλૹ৴ CLKఀࢭλΠϛϯάͰϚΠΫ͕Ϧηο τ ESP8266಺෦ͷಈ࡞ ϝϞϦͷಡΈग़͠ 17೥5݄19೔༵ۚ೔
  18. • CPUͰશͯͷॲཧΛߦ͏ͨΊɺϚΠΫ͔ΒͷσʔλΛऔΓ͜΅ͯ͠͠·͏ɻ SPI઀ଓͷ৔߹ ※ৄࡉ͸QiitaͰʮAMDP441ʯͰݕࡧ ESP8266 SPI CLK L/R CLK DATA

    read໋ྩΛ࣮ߦ͍ͯ͠Δ࣌ͷΈCLK ͕ग़ྗ͞ΕΔɻ CPU SPI ϝϞϦRAM(32KB) ϢʔβϓϩάϥϜ read໋ྩ σʔλड৴ ֎෦΁ͷσʔλసૹ CLKఀࢭλΠϛϯάͰϚΠΫ͕Ϧηο τ σʔλసૹ ESP8266಺෦ͷಈ࡞ 17೥5݄19೔༵ۚ೔
  19. I2S/SPI ͲͪΒͱϚΠΫΛ઀ଓ͢Δ͔ • ESP8266 ͸I2SͱSPIͷ྆ํͷΠϯλϑΣʔεΛ౥ࡌ͍ͯ͠Δɻ Interface I2S SPI Arduino ϥΠϒϥ

    ϦରԠঢ় گ ˚ (TXͷΈɺઃఆݻఆ) ̋ ϋʔυ΢ ΣΞରԠ ঢ়گ TX,RXϞδϡʔϧ͕෼͔Εͯ ͍ͯDMA͕ϝϞϦసૹ͢Δ (※ޙड़) ϝϞϦૢ࡞͸ιϑτ΢ΣΞଆ Ͱॲཧ͢Δɻ 17೥5݄19೔༵ۚ೔
  20. I2SͰ͸Ͳ͏ͳͷ͔ʁ 17೥5݄19೔༵ۚ೔

  21. • ొ৔ਓ෺͸CPUͱI2SϞδϡʔϧDMAͦͯ͠ϝϞϦ I2S઀ଓͷ৔߹ ESP8266 CPU I2S ϝϞϦRAM(32KB) ϢʔβϓϩάϥϜ DMA DMA(Direct

    Memory Access) CPUͷ୅ΘΓʹϝϞϦͷసૹΛݞ୅ΘΓ͢Δɻ 17೥5݄19೔༵ۚ೔
  22. • CPUΛհͣ͞DMA͕ϝϞϦ΁௚઀సૹ I2S઀ଓͷ৔߹ ESP8266 SPI CLK L/R CLK DATA CPU

    I2S ϝϞϦRAM(32KB) ϢʔβϓϩάϥϜ DMA σʔλ σʔλ ։໋࢝ྩ 17೥5݄19೔༵ۚ೔
  23. • ࢦఆαΠζͷσʔλΛϝϞϦʹసૹ͢ΔͱCPUʹׂΓࠐΈΛൃੜͤ͞Δɻ I2S઀ଓͷ৔߹ ESP8266 SPI CLK L/R CLK DATA CPU

    I2S ϝϞϦRAM(32KB) ϢʔβϓϩάϥϜ DMA సૹ׬ׂྃΓࠐΈ σʔλ·ΜͨΜʂ σʔλ σʔλ 17೥5݄19೔༵ۚ೔
  24. • I2Sͷॲཧ͸ఀࢭͤͣʹCPU͸ϝϞϦ͔ΒσʔλΛऔΓग़ͯ͠֎෦ૹ৴ I2S઀ଓͷ৔߹ ESP8266 SPI CLK L/R CLK DATA I2SϞδϡʔϧ͕ৗʹΫϩοΫΛग़ྗ

    CPU I2S ϝϞϦRAM(32KB) ϢʔβϓϩάϥϜ ֎෦΁ͷσʔλૹ৴ DMA సૹ׬ׂྃΓࠐΈ σʔλ σʔλ σʔλ 17೥5݄19೔༵ۚ೔
  25. • σʔλΛऔΓࠐΈͳ͕Β֎෦ʹૹ৴͢Δ͜ͱ͕Մೳɻ I2S઀ଓͷ৔߹ ESP8266 SPI CLK L/R CLK DATA I2SϞδϡʔϧ͕ৗʹΫϩοΫΛग़ྗ

    CPU I2S ϝϞϦRAM(32KB) ϢʔβϓϩάϥϜ ֎෦΁ͷσʔλૹ৴ DMA సૹ׬ׂྃΓࠐΈ σʔλ read໋ྩ σʔλ σʔλ 17೥5݄19೔༵ۚ೔
  26. I2SͰͷಡΈऔΓΛ࣮ݱ͢ ΔͨΊɺArduinoͷϥΠϒ ϥϦΛमਖ਼͢Δ͜ͱΛܾҙ 17೥5݄19೔༵ۚ೔

  27. ESP8266ͷσʔλγʔτ͕खֻ͔Γ • Espressif͕υΩϡϝϯτΛެ։͍ͯ͠Δ͕ɻɻɻ ϨδελΛͲ͏࿔Δͱػೳ͕࢖͑Δ͔هࡌ͞Εͯ ͍Δ͕ɺ؊৺ͷϨδελͷΞυϨε͕ͳ͍ɻ 17೥5݄19೔༵ۚ೔

  28. ιʔείʔυͷमਖ਼ • Arduinoͷesp8266_peri.hͱυΩϡϝϯτΛൺֱ͠ͳ͕Βιʔεमਖ਼ 17೥5݄19೔༵ۚ೔

  29. ϩδοΫΞφϥΠβͰڍಈΛ֬ೝ • ιʔεमਖ਼὎ϩδΞφͰ֬ೝ὎मਖ਼ मਖ਼ͨ͠ίʔυͰԿͷڍಈ͕มΘͬͨ ͔ਖ਼͘͠೺ѲͰ͖ΔΑ͏ʹͳͬͨɻ 17೥5݄19೔༵ۚ೔

  30. ExceptionͷൃੜՕॴͷಛఆ • ϓϩάϥϜ্ͷͲ͔͜ͰException ΍WDTϦηοτ͢Δ͕ɻɻɻ is Կʁ 17೥5݄19೔༵ۚ೔

  31. ESP Exception DecoderΛ׆༻ • Stack TraceΛղੳ͠ɺιʔείʔυߦ·Ͱදࣔͯ͘͠ΕΔɻ 17೥5݄19೔༵ۚ೔

  32. ׬੒ʂ • 16kHz, 16bitͷԻ੠σʔλΛWebsocketͰαʔόʹૹΔ͜ͱʹ੒ޭʂ • Ի੠ೝࣝͱLive Streaming͕Ͱ͖͍ͯΔɻ Sound Bluemix Speech

    To Text HttpLiveStreming or HTTP GET Local Server WebSocket HTTP HTTP 17೥5݄19೔༵ۚ೔
  33. ·ͱΊ • ֨҆σόΠεͰԻσʔλΛετϦʔϜͰ͖Δʂ • ESP8266ͷI2SͱDMA͸࢖͑Δ • ಈ͔ͳ͍ػೳ͸ఘΊͣࣗ෼Ͱվ଄ʂ • υΩϡϝϯτ΍πʔϧΛἧ͑Δɻ 17೥5݄19೔༵ۚ೔

  34. ࠓޙ •ωοτϫʔΫ଎౓ •Իσʔλͷ෼ੳ •֨҆Ի੠Ξγελϯτ 17೥5݄19೔༵ۚ೔

  35. ͝ײ૝Լ͍͞ʂ Twitter: @masato_ka 17೥5݄19೔༵ۚ೔