🎉

【Raspberry Pi Pico W】GPIOの使い方(micropython×Thonny)

2024/11/27に公開

1. はじめに

1.1 この記事について

  • Raspberry Pi Pico W(以下、Pico)のGPIOを使ったサンプルプログラムを記載する
  • 入門・解説というより備忘録に近い

1.2 対象読者

  • Picoを使ったことがある
  • Thonnyを使ってPicoにプログラムを書き込み・実行ができる
  • プログラム言語(特にmicropython)が多少読める、書ける

1.3 動作環境

  • PC
    • OS:Windows 11 Home
    • プログラミング環境:Thonny(v4.1.4)
  • Raspberry Pi Pico W
    • ファームウェア:v1.24

2. GPIOとは?

  • General Purpose Input/Output の略語
  • 端的に言うと「入力(HIGH/LOW)と出力(HIGH/LOW)を好きに操作できるピン」
  • 電子回路と組み合わせることで、LEDを光らせたり、スイッチの押下を検知したりできる

3. GPIO(出力)

3.1 外付けのLEDを点灯する

(ボード上ではなく)外付けしたLEDを、プログラムで点灯させる

3.1.1 回路図

部品表

名称 個数
LED 1
抵抗(470Ω以上推奨) 1
LEDの特性について
  • LEDには極性があり、アノード側が+側、カソード側をー側として使用する
  • つまり、picoの3V3とアノードを、GNDをカソードに接続すればよい
  • 逆に繋ぐと最悪壊れたり、LEDが破裂するため厳守すること!!

秋月電子 - 参考資料(極性についての注意)より
https://akizukidenshi.com/goodsaffix/osdr5113a_polarity.pdf

ROHMが簡易的にまとめた資料があるため、こちらを足掛かりに調べてみると、学びが捗ります。

ROHM LED特性データの見方
https://fscdn.rohm.com/jp/products/databook/applinote/opto/led/led_characteristic_data_an-j.pdf

抵抗の推奨値の計算方法
  • LEDのTypが2.0V、picoのGPIO出力が3mAとして計算
  • 抵抗Rの値は433Ωが良い(Vf=1.8Vなら500Ω、Vf=2.5Vなら266.7Ω)

秋月電子 - LEDの抵抗値計算
https://akizukidenshi.com/catalog/pages/led-r-calc.aspx

秋月電子 - 5mm赤色LED 640nm OSDR5113A datasheet
https://akizukidenshi.com/goodsaffix/OSDR5113A.pdf

3.1.2 ソースコード例

3_1_2_GPIO_LED_ON_OFF.py
from machine import Pin
from time import sleep

led = Pin(0, Pin.OUT, value=0)  # GP0のピンを出力ピンに定義。初期値=0(LOW)

while True:
    led.on()  # LEDを点灯
    sleep(1)  # 1秒待つ
    led.off()  # LEDを消灯
    sleep(1)  # 1秒待つ

4. GPIO(入力)

4.1 外付けのスイッチの押下を検知する

(ボード上ではなく)外付けしたスイッチの状態を、プログラムで検知する

4.1.1 回路図

pico内部のプルアップ抵抗についての説明

※Pico内部のプルアップ抵抗は24kΩくらいだそうだ

ラズパイピコ内部プルアップ抵抗調査
https://www.youtube.com/watch?v=PDAFOvtA1Qc

プルアップ・プルダウンについて

ここの説明がわかりやすいので紹介しておきます(他力本願)

プルアップ抵抗・プルダウン抵抗とは?電子回路に必須の考え方 | VOLTECHNO.html
https://voltechno.com/blog/pullup-pulldown/

4.1.2 ソースコード例

picoのGPIOピンは、定義時にプルアップ抵抗かプルダウン抵抗を選択できます
今回は、プルダウンでの実装

4_1_2_GPIO_SW_PULL_DOWN.py
from machine import Pin
from time import sleep

switch = Pin(1, Pin.IN, Pin.PULL_DOWN)  # GP0のピンを入力ピンに定義。PULL_DOWNに設定
led = Pin("LED", Pin.OUT)  # ボード上のLEDを点灯

while True:
    status = switch.value()
    print("status:", status)
    if status == 1:  # ボタンが押された状態だったら
        led.on()  # OnBoardのLEDを点灯
    else:  # それ(押された状態)以外だったら
        led.off()  # OnBoardのLEDを消灯
    sleep(0.1)  # 0.1秒待つ

4.2 リードスイッチで磁力を検知する

磁力の有無をプログラムで検知する

4.2.1 回路図

4.2.2 ソースコード例

※PULL_DOWNのコードと同じなので省略

4.3 チルトスイッチで傾きを検知する

一定以上の傾きを検知する

チルトスイッチ/傾斜ボールスイッチ について

ようするに、一定以上の傾きでOFFになるスイッチ

  • 通常時(傾きが一定以下)は、導通(スイッチが押された状態)
  • 一定以上の傾きがあると、非導通(スイッチが押されていない状態)
    物理構造的には、中に動く導体のボールが入っており、それが下に付くと電気を通す状態、離れると電気を通さない状態となる

振動(傾斜)スイッチ(丸型)AT-407 参考資料(端子と動作説明)
https://akizukidenshi.com/goodsaffix/AT407_j.pdf

4.3.1 回路図

4.3.2 ソースコード例

※PULL_DOWNのコードと同じなので省略

5. まとめ

  • PicoのGPIOの回路図+ソースコードの例についてまとめた
  • 物理的な要因でON/OFFになるリードスイッチや傾斜ボールスイッチは、センシングの基礎

Discussion