Pico

RaspberryPi PicoでGPIOを使う方法

はじめに

RaspberryPi PicoでGPIOを使う方法を解説します。言語はMicroPython、回路はシンプルにLEDとタクトスイッチを使用します。

環境

この記事は以下の環境で作成しています。

環境 バージョン 備考
開発用PCのOS Windows11 Windows10でもOKです
開発環境 Thonny 3.3.13
ボード RaspberryPi Pico

※ Picoのセットアップ方法については、こちらの記事をご覧ください。

タクトスイッチとLEDの接続

PicoのGPIOピンに、タクトスイッチとLEDをそれぞれ接続します。抵抗は直結防止程度に手元にあった220Ωを使っています。

タクトスイッチは「GPIOの入力」、LEDは「GPIOの出力」に使います。

PicoとLED・タクトスイッチを接続する方法を説明する画像

Picoピンアサイン

Picoのピン配置の図
公式サイトより引用

使用する部品と機器

今回の回路では、以下のものを使います。

RaspberryPi Pico

ブレッドボード

あきばお〜楽天市場支店
¥945 (2022/06/19 17:24時点 | 楽天市場調べ)

LED

タクトスイッチ

抵抗

¥1,500 (2022/02/22 10:06時点 | Amazon調べ)

プログラム概要

プログラムの概要は以下の通りです。

  1. GPIOピンの入出力設定をする。
  2. タクトスイッチが押されたら、LEDを点灯させる。

実行結果

タクトスイッチが押された時にLEDが点灯します。

プログラムの概要・詳細は全体コードコードのポイントをご覧ください。

プログラムの実行結果の解説。タクトスイッチを押さない時
プログラムの実行結果の解説。タクトスイッチを押した時

全体コード

全体コードは以下の通りです。タクトスイッチからのGPIOの入力をチェック、入力があった場合にGPIOを出力することで、LEDが点灯します。

ポイントとなる部分を「コードのポイント」で解説します。

from machine import Pin, I2C
import time

# タクトスイッチ(入力)の設定です
TactSw = machine.Pin(19, machine.Pin.IN, machine.Pin.PULL_DOWN)

# Led(出力)の設定です。
Led = machine.Pin(16, machine.Pin.OUT)

# プログラム開始のメッセージです
print("Start")

# 無限ループでタクトスイッチの確認とLED点灯/消灯を繰り返します
while(True):
    
    # タクトスイッチが押された時はLEDを点灯します
    if TactSw.value() == 1:
        Led.value(1)
        print(" LED ON!")
    
    # タクトスイッチが押されていない時はLEDを消灯します
    else:
        Led.value(0)
    
    # 0.1秒待機します
    time.sleep(0.1)

PCなし(Pico単体)でプログラムを実行したい場合は「main.py」にファイル名を変更して、Picoにアップロードしてください。

コードのポイント

GPIOの設定(入力ピン)

PicoのGPIOピンは入力と出力の両方に使うことができます。そのため、入力/出力のどちらで使用するかをPin関数で設定します。

# タクトスイッチ(入力)の設定です
TactSw = machine.Pin(19, machine.Pin.IN, machine.Pin.PULL_DOWN)

Pin関数は引数で「ピン番号」「入出力の設定」「プルアップ/ダウン」の設定ができます。今回は以下のように設定して、タクトスイッチの入力に使います。

PicoやM5Stackを使っていると、

内容 設定 説明
ピン番号 19 回路に合わせてGP19を指定
入出力指定 machine.Pin.IN 入力用に設定
プルアップ machine.Pin.PULL_DOWN スイッチOFFの場合は、OFF側に設定

※ ピン番号は、ピンアサイン表の「GP〇〇」の部分の番号を指定してください。

プルアップ/プルダウンは、ざっくりいうと、スイッチが押されていない場合に、電気的にピンをON/OFFどちらにしておくか?という機能です。引数によってピンの回路が電気的に切り替わります。

GPIOの設定(出力ピン)

出力もPin関数を使って設定します。出力もプルアップ/ダウンが設定できますが、今回の回路では不要なので省略しています。

# Led(出力)の設定です。
Led = machine.Pin(16, machine.Pin.OUT)

内容 設定 説明
ピン番号 16 回路に合わせてGP16を指定
入出力指定 machine.Pin.OUT 出力用に設定

※ ピン番号は、ピンアサイン表の「GP〇〇」の部分の番号を指定してください。

タクトスイッチが押されたことを確認

value関数を使ってタクトスイッチの状態を取得します。value関数は引数なしで呼び出すと、その時の入力ピンの状態を取得できます。

    if TactSw.value() == 1:

今回の回路では、タクトスイッチが押されている時に電源(3V3)から、GP19ピンに電気が流れます。そのため、タクトスイッチを押すと、入力ピンは「入力あり(1)」の状態になります。

そのため、if文を使って、value関数で取得した値が「入力あり(1)」であるかを判定しています。

タクトスイッチの状態 GPIOの入力状態 Value関数の取得値
押されている 入力あり 1
押されていない 入力なし 0

LEDを点灯させる

入力と同様にvalue関数を使います。出力の場合はvalue関数の引数に、0か1を指定することで、出力のON/OFFを切り替えることができます。

今回はタクトスイッチが押されている場合にLEDを点灯させたいので、タクトスイッチが押された場合は、出力をON(1)でLEDを点灯。

そうでない場合は、出力をOFF(0)にしてLEDを消灯させています。

Value関数の引数 GPIO出力 LEDの状態
1 ON 点灯
0 OFF 消灯c

# タクトスイッチが押された時はLEDを点灯します
    if TactSw.value() == 1:
        Led.value(1)
        print(" LED ON!")
    
    # タクトスイッチが押されていない時はLEDを消灯します
    else:
        Led.value(0)

まとめ

RaspberryPi PicoでGPIOを使う方法を解説しました。GPIOはシンプルですが、いろいろな回路やデバイスに使用できます。是非LEDやタクトスイッチ以外にも挑戦してみてください。参考になればうれしいです。

Picoで使えるGPIO操作のデバイス

トグルスイッチ

解説ではタクトスイッチを使いましたが、トグルスイッチを入力に使っても同じことが出来ます。

¥446 (2022/06/19 00:11時点 | Amazon調べ)

人感センサ

スイッチの代わりに人感センサからの信号を入力にすることもできます。

PicoやM5Stackと一緒に使うならThinkPad

公式修理マニュアルや、パーツの単体販売もあるので、故障しても、自分の手で安く・早く修理することが出来ます。

赤いポッチの「TrackPoint」打ち心地最高なキーボードで狭い場所でも快適。私も職場とプライベートの両方で10年以上愛用しています。

値段が高いのが少しネックですが、下記リンクのセール・クーポン情報で、お得に購入することができます。ボーナスなどで購入を考えているかたは、以下のリンクをチェックしてください。

Lenovo

GPIOの後は「I2C通信」にもチャレンジしよう

GPIOで扱えるのは信号のON/OFFだけでしたが、I2C通信を使うとディスプレイやセンサーなど、さらに高度で面白い機器を使うことが出来ます。以下の記事で解説しているので、興味のある方は、以下のリンクからご覧ください。

応援・要望お待ちしてます

ブログを見ていて「この辺を詳しく知りたい」「このライブラリの使い方を知りたい」「こんなことで困ってる」...etc があれば、コメント・問い合わせ・Twitterで教えてください。質問・ご要望に合わせて解説記事を作ります。

ブログを気に入っていただけたり、「応援してもいいよ」という方がいたら、ブログやSNSでの紹介をお願いします。 あたたかい応援は、中の人の更新の大きな励みになります。

ABOUT ME
えす
現役のソフトウェアエンジニアです。 C++ C# Python を使ってます。10年ちょい設計/開発部門にいましたが、今はQAエンジニアっぽいことをしています。

COMMENT

メールアドレスが公開されることはありません。