Upgrade to Pro — share decks privately, control downloads, hide ads and more …

話題のRaspberryPi PicoでMicroPythonを使って遊ぼう!

Yamada3
February 28, 2021

話題のRaspberryPi PicoでMicroPythonを使って遊ぼう!

令和3年2月28日開催@エンジニアカフェ
「話題のRaspberryPi PicoでMicroPythonを使って遊ぼう!」

RaspberryPi Picoの環境設定、Lチカ、温度センサの値を取得するまで。

Yamada3

February 28, 2021
Tweet

More Decks by Yamada3

Other Decks in Technology

Transcript

  1. RaspberryPiPicoͬͯʁ ̍̒ϖʔδ ▪特徴・主な仕様 ・搭載マイコン:RP2040(Dual-core cortex M0+、 最大動作周波数133MHz) ・仕上りパッケージ:DIP40 ・SRAM:264KB ・フラッシュメモリ:2MB

    ・USB 1.1 ホスト/デバイス両対応 ・ピンヘッダ用ランドと別に端面スルーホール ・低消費電力スリープモードおよびドーマントモードが 利用可能 ・USBを介しマスストレージを使ったドラッグアンドドロップ によるプログラムの書き込みが可能 ・I/O:GPIOx26(ADCx3含む)、UARTx2、I2Cx2、 SPIx2、PWMx16、PIOx8 ・ピンヘッダ取り付け穴径: Φ1(ミリ)、ピンヘッダ/ 細ピンヘッダのどちらでも使用できます。
  2. uf2ϑΝΠϧΛμ΢ϯϩʔυ͠·͢ Zoomͷը໘ͷԼʹ͋Δ νϟοτͷϚʔΫΛΫϦοΫ ͯ͠νϟοτը໘Λ։͖·͢ɻ షͬͨϦϯΫΛΫϦοΫͯ͠ ϑΝΠϧΛμ΢ϯϩʔυ ͪͳΈʹɾɾɾ uf2ϑΝΠϧͱ͸ Microsoft͕ϚΠί ϯϑϥογϡ޲͚ʹ

    ։ൃͨ͠ϑΝΠϧܗ ࣜͱͷ͜ͱͰ͢ɻ https://www.raspberrypi.org/ documentation/rp2040/getting-started/ static/f70cc2e37832cde5a107f6f2af06b4bc/ rp2-pico-20210205-unstable-v1.14-8- g1f800cac3.uf2 ग़དྷͳ͍ਓ͸ͪ͜ΒΛίϐϖ͍ͯͩ͘͠͞ɻ ̍̔ϖʔδ
  3. ઌʹύιίϯʹέʔϒϧΛͭͳ͗·͢ɻ ന͍ϘλϯΛԡ͠ ͳ͕Βύιίϯʹ ͭͳ͛·͢ʂ ʢRaspberry Pi PicoͷBOOTSELͬͯॻ͍ͯΔ ϘλϯΛԡ͠ͳ͕ΒέʔϒϧΛૠ͢ʣ BOOTSELϘλϯΛ ԡ͠ͳ͕Βͭͳ͛Δ

    ࣄͰɺօ͞Μ΋࢖ͬ ͨ͜ͱ͕͋ΔUSB ʢϑϥογϡʣϝϞ Ϧͱಉ͡Α͏ͳ࢖͍ ํ͕Ͱ͖·͢ɻ USBϑϥογϡϝϞϦ ίϯϏχ͔Β ফ͑ͭͭ͋Γ·͢Ͷɾɾɾ ̍̕ϖʔδ
  4. MicroPythonͰLνΧͯ͠ΈΑ͏ʂ import machine import utime led_onboard = machine.Pin(25, machine.Pin.OUT) while

    True: led_onboard.value(1) utime.sleep(5) led_onboard.value(0) utime.sleep(5) ্هͷϓϩάϥϜશମΛThonnyʹίϐ΃ޙ ͜ͷ෦෼ͷஈࠩΛλϒΩʔͰ͚͍ͭͯͩ͘͞ɻ ̏̎ϖʔδ
  5. MicroPythonͰLνΧͯ͠ΈΑ͏ʂ import machine import utime led_onboard = machine.Pin(25, machine.Pin.OUT) while

    True: led_onboard.value(1) utime.sleep(5) led_onboard.value(0) utime.sleep(5) ͜ͷஈࠩΛΠϯσϯτͱ͍͍·͢ɻpython͸ ͜ͷΠϯσϯτΛೝࣝ͢ΔͷͰɺஈࠩʹҙຯ͕ ͋Γ·͢ɻ͜ͷ৔߹͸whileจͷ܁Γฦ͠෦Ґ ̏̏ϖʔδ
  6. MicroPythonͰϓϩάϥϜͷઆ໌ᶅ while True: led_onboard.value(1) utime.sleep(5) led_onboard.value(0) utime.sleep(5) while True: ͱ͸ʮXIJMF

    ৚݅ࣜ:ʯͱ͍͏ܗࣜͰॻ͔Ε͍ͯ·͢ɻ TrueʹʢਅʣʹͳΔ·Ͱ܁Γฦ͢ͱ͍͏͜ͱͰ͢ɻ ̏̒ϖʔδ
  7. PicoͰLνΧͯ͠ΈΑ͏ʂ import machine import utime led_onboard = machine.Pin(25, machine.Pin.OUT) while

    True: led_onboard.value(1) utime.sleep(5) led_onboard.value(0) ͜ͷϚʔΫΛԡ͢ͱϓϩάϥϜ໊Λ ฉ͔Ε·͢ͷͰs1.pyͱೖྗͯ͠ ϓϩάϥϜΛ࣮ߦͤ͞·͢ɻ ̏̔ϖʔδ
  8. import machine import utime led_onboard = machine.Pin(25, machine.Pin.OUT) while True:

    led_onboard.value(1) utime.sleep(5) led_onboard.value(0) utime.sleep(5) ͜ͷ̎Օॴͷ̑Λ̍ʹ มߋͯ͠Έ·͠ΐ͏ɻ LνΧͷ଎౓Λม͑ͯΈΑ͏ʂ ̐̌ϖʔδ
  9. LνΧͷ଎౓Λม͑ͯΈΑ͏ʂ import machine import utime led_onboard = machine.Pin(25, machine.Pin.OUT) while

    True: led_onboard.value(1) utime.sleep(5) led_onboard.value(0) Ұ୴STOPϚʔΫΛԡͯ͠ લͷϓϩάϥϜΛఀࢭͤ͞·͢ɻ ̐̍ϖʔδ
  10. LνΧͷ଎౓Λม͑ͯΈΑ͏ʂ import machine import utime led_onboard = machine.Pin(25, machine.Pin.OUT) while

    True: led_onboard.value(1) utime.sleep(5) led_onboard.value(0) ࠶ͼ࣮ߦϚʔΫΛԡ͠·͢ɻ ̐̎ϖʔδ
  11. MicroPythonͰԹ౓ଌఆͯ͠ΈΑ͏ʂ import machine import utime sensor_temp = machine.ADC(4) conversion_factor =

    3.3 / (65535) while True: reading = sensor_temp.read_u16() * conversion_factor temperature = 27 - (reading - 0.706)/0.001721 print(temperature) utime.sleep(1) ্هͷϓϩάϥϜશମΛThonnyʹίϐ΃ޙ ͜ͷ෦෼ͷஈࠩΛλϒΩʔͰ͚͍ͭͯͩ͘͞ɻ ̐̑ϖʔδ
  12. MicroPythonͰϓϩάϥϜͷઆ໌ᶅ conversion_factor = 3.3 / (65535) ͜ͷ໋ྩจͰ͸ DPOWFSTJPO@GBDUPSͱ͍͏໊લʢม਺ʣʹ  

     ͷܭࢉ஋ΛׂΓ౰ͯΔͱ͍͏ҙຯͰ͢ɻ ͸QJDPͷిѹ ͸όΠτͰදݱͰ͖Δ࠷େ஋Ͱ͢ ̐̔ϖʔδ
  13. ̎ਐ਺ͱిѹͱόΠτͱϏοτ ઌ΄ͲͷϓϩάϥϜͷҙຯΛཧղ͍ͯͨͩͨ͘͠Ίʹ ̌ͱ̍Ͱදݱ͞ΕΔ਺஋ʢ̎ਐ਺ʣͱిѹͷ࿩Λ͠·͢ɻ ίϯϐϡʔλʔ͸ߴ౓ͳܭࢉΛ͍ͯ͠·͕͢ɺͬ͘͟Γݴ͍·͢ͱɺ ࣮͸ిѹ͕͋Δɺͳ͍Λ۠ผͯ͠ܭࢉΛ͍ͯ͠Δ͚ͩͳΜͰ͢ɻ ిѹ͕͋Δ࣌Λ )JHI ɺͳ͍࣌Λ -PX ͱͯ͠ɺ̌ͱ̍ͷܭࢉΛɺ

    ΊͬͪΌ଎͍଎౓Ͱ͍ͯ͠·͢ɻ ɹɹ̌ɹɹ̌ɹɹ̌ɹɹ̌ɹɹ̌ɹɹ̌ɹɹ̍ɹɹ̍ ɹ ɹɹɹˢϏοτ ɹɹɹ̎ਐ਺ͷܻ̍ɹɹશ෦Ͱ̔Ϗοτɹ̔Ϗοτ CJU ʹ̍όΠτ CZUF ɹɹ ɹɹɹɹɹɹɹɹɹɹɹɹɹɹ 10ਐ਺ ͩͱ ̏ ྫ͑͹ ̑7 ̐̕ϖʔδ
  14. MicroPythonͰϓϩάϥϜͷઆ໌ᶆ while True: reading = sensor_temp.read_u16() * conversion_factor temperature =

    27 - (reading - 0.706)/0.001721 print(temperature) utime.sleep(1) while True: ͱ͸ʮXIJMF ৚݅ࣜ:ʯͱ͍͏ܗࣜͰॻ͔Ε͍ͯ·͢ɻ TrueʹʢਅʣʹͳΔ·Ͱ܁Γฦ͢ͱ͍͏͜ͱͰ͢ɻ ̑̍ϖʔδ
  15. MicroPythonͰϓϩάϥϜͷઆ໌ᶆ reading = sensor_temp.read_u16() * conversion_factor ͸TFOTPS_temp ΛSFBE_u16()ͰಡΜͰ͍ΔͷͰΞφϩά஋Λ0- 65535 ͷൣғͷ੔਺Ͱฦ͠·͢ɻ

    temperature = 27 - (reading - 0.706)/0.001721 ͜Ε͸Թ౓ηϯαʔͷ஋Λิਖ਼͢ΔࣜͰ͢ɻ print(temperature) ͸UFNQFSBUVSFͷ஋(Թ౓ʣΛදࣔ͠·͢ɻ utime.sleep(1) ͸1ඵٳΉ ͜ͷॲཧΛ܁Γฦ͠·͢ɻ while True: reading = sensor_temp.read_u16() * conversion_factor temperature = 27 - (reading - 0.706)/0.001721 print(temperature) utime.sleep(1) ̑̎ϖʔδ
  16. Ξφϩά-σΟδλϧίϯόʔλ(ADC) Ξφϩά৴߸ˠσδλϧ৴߸ʹม͑Δ͜ͱΛ"%ม׵ͱݴ͍·͢ɻ Ξφϩά৴߸ σδλϧ৴߸ ࣌ؒʢtʣ Թ౓ ࣌ؒʢtʣ Թ౓ ຊདྷͳΒ3BTQCFSSZ1J1JDPͷ෼ղೳ͸CJU ࠷େ஋͸?ిѹ͕7ͳͷͰ

    㲈N7 ͳΜͰ͕͢ɺ͜ͷϓϩάϥϜͰ͸SFBE@V ͰΞφϩά஋ΛಡΜ Ͱ͍ΔͷͰɺʹ㲈N7 ̑̏ϖʔδ Ξφϩά৴߸Λ ෼ׂ͢Δ਺ ෼ղೳ͕େ͖͍ఔ ׈Β͔ʹͳΔ
  17. ಈ͍͍ͯΔϓϩάϥϜΛఀࢭ͠·͢ Ұ୴STOPϚʔΫΛԡͯ͠ લͷϓϩάϥϜΛఀࢭͤ͞·͢ɻ import machine import utime sensor_temp = machine.ADC(4)

    conversion_factor = 3.3 / (65535) while True: reading = sensor_temp.read_u16() * conversion_fa temperature = 27 - (reading - 0.706)/0.001721 ̑̐ϖʔδ
  18. Թ౓ηϯαʔͷ஋ΛݟͯΈΑ͏ʂ import machine import utime sensor_temp = machine.ADC(4) conversion_factor =

    3.3 / (65535) while True: reading = sensor_temp.read_u16() * conversion_fa temperature = 27 - (reading - 0.706)/0.001721 ࣮ߦϚʔΫΛԡ͢ͱϓϩάϥϜ໊Λ ฉ͔Ε·͢ͷͰs2.pyͱೖྗͯ͠ ϓϩάϥϜΛ࣮ߦͤ͞·͢ɻ ̑̑ϖʔδ