Pico

RaspberryPi PicoでGPIOを使う方法

RaspberryPi PicoでGPIOを使う方法の記事のアイキャッチ

はじめに

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

ラズパイマガジン 最新 2022年 秋号が発売されました。今回は『5大人気ボード』の特集です。

環境

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

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

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

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

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

※ 使用部品の詳細は後述します。

PicoでGPIOを使う回路の説明
PicoでGPIOを使う回路の説明

※ 2022/09/10 ピンの説明に誤りがあったため、修正しました。

ピン番号 内容 備考
38 GND グラウンド
36 3V3(OUT) 電源(3.3V)
25 GP19 タクトスイッチの入力に使います。
21 GP16 PWM出力に使います。

※ 公式のGitHubより引用

Picoピンアサイン(Pin-Out)

RaspberryPi Picoのピンアサイン(pinout)の画像

Pico公式サイトより引用

使用する部品と機器

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

RaspberryPi Pico

ブレッドボード

指定はないですが、半ざしなどのトラブルが少ない、サンハヤト製をおすすめします。以下の長いタイプなら、スペースが広くて配線・デバッグが楽になります

あきばお〜楽天市場支店
¥945 (2022/09/18 00:07時点 | 楽天市場調べ)

LED

一般的な砲弾型のLEDでOKです。以下のようなセットで買っておくと、購入の手間がはぶけます。

タクトスイッチ

ブレッドボードで使えるものならOKです。

抵抗

お手持ちのものでOKです。ない方は一度セットで揃えてしまうと送料と時間が節約できます。

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

内容 設定 説明
ピン番号 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 消灯

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

まとめ

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

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

トグルスイッチ

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

人感センサ

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

UdemyにRaspberryPiの講座があります

実はUdemyで『RaspberryPi』『Pico』『Arduino』の基礎/実践講座が見れます。無料もあるので「動画で学びたい」「本は読み尽くした」という方は以下のリンクをご覧ください。

⇒ RaspberryPiの講座一覧はこちら

以下の記事で、RaspberryPi・RaspberryPi Picoのおすすめ講座3選も解説しています。

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

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

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

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

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

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

COMMENT

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