はじめに
RaspberryPi PicoでGPIOを使う方法を解説します。言語はMicroPython、回路はシンプルにLEDとタクトスイッチを使用します。
~ この記事の内容 / Contents ~
環境
この記事は以下の環境で作成しています。
環境 | バージョン | 備考 |
開発用PCのOS | Windows11 | Windows10でもOKです |
言語 | MicroPython | |
開発環境 Thonny | 4.1.4 | |
ボード | RaspberryPi Pico |
※ Picoのセットアップ方法については、こちらの記事をご覧ください。
タクトスイッチとLEDの接続
PicoのGPIOピンに、タクトスイッチとLEDをそれぞれ接続します。抵抗は直結防止程度に手元にあった220Ωを使っています。タクトスイッチは「GPIOの入力」、LEDは「GPIOの出力」に使います。
※ 使用部品の詳細は後述します。
※ 2022/09/10 ピンの説明に誤りがあったため、修正しました。
ピン番号 | 内容 | 備考 |
38 | GND | グラウンド |
36 | 3V3(OUT) | 電源(3.3V) |
25 | GP19 | タクトスイッチの入力に使います。 |
21 | GP16 | LEDに使います。 |
※ 公式のGitHubより引用
Picoピンアサイン(Pin-Out)
※ Pico公式サイトより引用
使用する部品と機器
今回の回路では、以下のものを使用します。
ブレッドボード
サンハヤト製がおすすめです。少々固いですが、品質は高いです。スペースが広いので配線・デバッグが楽に行えます。
LED
タクトスイッチ
抵抗
お手持ちのものでOKです。ない方は一度セットで揃えてしまうと送料と時間が節約できます。
プログラム概要
プログラムの概要は以下の通りです。
- GPIOピンの入出力設定をする。
- タクトスイッチが押されたら、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操作のデバイス
トグルスイッチ
解説ではタクトスイッチを使いましたが、トグルスイッチを入力に使っても同じことが出来ます。
人感センサ
スイッチの代わりに人感センサからの信号を入力にすることもできます。
お知らせ
MicroPythonのプログラミングガイドブックが遂に発売!
「MicroPython」の本が遂にでました。
この一冊で、MicroPythonの言語仕様から、プログラミングの仕方まで”ガッツリ”学べます!。
内容は、普段別言語で開発している人や、これからマイコンを始める(工学系の)学生を対象としているので「初心者向け」ではありません。しかし、「自前のライブラリの作成」が目標なので、これ一冊で「ガッツリ」とMicroPythonを学ぶことができます。
全ての内容はここでは紹介しきれないので、詳細は以下のAmazonページをご覧ください。目次だけでも”ガッツリ”なのが確認できると思います。
Pico/Pico W関連のおすすめ本
RaspberryPi Pico / Pico W関連のおすすめ本を独断と偏見で3つ選んでみました。Picoやるならとりあえずこれ買っとけ的な本や、電子工作全般で使える本などを厳選しています。
GPIOの後は「I2C通信」にもチャレンジしよう
GPIOで扱えるのは信号のON/OFFだけでしたが、I2C通信を使うとディスプレイやセンサーなど、さらに高度で面白い機器を使うことが出来ます。以下の記事で解説しているので、興味のある方は、以下のリンクからご覧ください。
質問・要望 大歓迎です
「こんな解説記事作って」「こんなことがしたいけど、〇〇で困ってる」など、コメント欄で教えてください。 質問・要望に、中の人ができる限り対応します。
使えたよ・設定できたよの一言コメントも大歓迎。気軽に足跡を残してみてください。記事を紹介したい方はブログ、SNSにバシバシ貼ってもらってOKです。
[…] RaspberryPi Pico MicroPythonでGPIOを使う方法 […]