Pico 2W のシリーズを読んでいると、こんなコードが突然出てきます。
from machine import Pin
LED_PIN = 16
led = Pin(LED_PIN, Pin.OUT)Code language: JavaScript (javascript)
「machine って何?」「Pin の後ろの 16 や OUT は何を意味する?」——最初は謎に見えます。
コピペすれば動くので、意味を調べずそのまま進んでしまいがちです。
でも引数の意味が分かると、ピン番号を変えるだけで自由に応用できます。
この記事では machine.Pin の仕組みと引数3つを、順番に解説します。
シリーズで書いてきたコードの「なぜそう書くのか」が、ここで繋がります。
machine.Pin とは?【MicroPython の machine ライブラリ】
machine ライブラリとは
machine は、MicroPython に最初から入っているライブラリです。
GPIO(汎用入出力ピン)や ADC(アナログ-デジタル変換)を操作する命令が入っています。
コードの冒頭には from machine import Pin と書きます。
「machine ライブラリから Pin だけ取り出して使う」という意味です。
これを書かないと Pin() が使えません。
from machine import Pin # machine ライブラリから Pin クラスを読み込むCode language: PHP (php)
import machine と書く方法もあります。
その場合は machine.Pin(16, machine.Pin.OUT) のように machine. を頭につけます。
どちらでも動きますが、シリーズでは from machine import Pin を使っています。
Pin クラスの役割
Pin は、Pico 2W の GPIO ピンを操作するためのクラスです。
「クラス」という言葉が難しければ「ピンを扱うための道具セット」とイメージしてください。
Pin() でピンオブジェクトを作ると、そのピンに「電圧を出す」「電圧を読む」といった操作ができます。
変数名(led や switch)が、そのピンの「名前札」になります。
以降はその変数を通じてピンを操作します。
machine.Pin の引数【3つだけ覚えればOK】
Pin() には複数の引数がありますが、シリーズで使うのは以下の3つだけです。
machine.Pin の引数まとめ
- 第1引数:GPIO番号(どのピンを使うか)
- 第2引数:モード(Pin.OUT か Pin.IN)
- 第3引数:プルアップ・プルダウン(pull=Pin.PULL_UP など)
Pin(GPIO番号, モード) # 出力ピンの基本形
Pin(GPIO番号, モード, pull=設定) # 入力ピンに追加するCode language: PHP (php)
第1・第2引数は必須です。
第3引数は入力ピンで使うときだけ追加します。
LED などの出力ピンには不要です。

GPIO番号の指定方法(第1引数)
GPIO番号と物理ピン番号の違い
Pico 2W のピンには番号が2種類あります。
- 物理ピン番号:ボードの端から順番に数えた番号(1〜40)
- GPIO番号:マイコンの信号線につけられた番号(GP0〜GP28など)
コードで指定するのは GPIO 番号です。
Pin(16, Pin.OUT) の 16 は「GPIO 16番のピン」を意味します。
物理ピンの16番とは別の場所にあるので、混同しないよう注意してください。
Grove Base Hat を使っている場合、コネクタに「D16」「D18」「A0」と印刷されています。
この数字が GPIO 番号に対応しているので、コネクタに書かれた番号をそのままコードに書けば大丈夫です。

ピンアウト図で確認する
「GPIO 16番がどのコネクタか」を確認するには、ピンアウト図が便利です。
公式のピンアウト図は「Raspberry Pi Pico 2 datasheet」で検索すると PDF が入手できます。
ただし公式図は情報が多くて見づらい場合があります。
Grove Base Hat を使うなら、コネクタと GPIO 番号の対応さえ分かれば十分です。
上のピンアウト図で、使いたいコネクタの番号を確認してください。
定数で宣言してわかりやすく書く
GPIO 番号をコードに直接書く(マジックナンバー)と、後で見たときに何のピンか分かりにくくなります。
# マジックナンバーの例(何のピンか分かりにくい)
led = Pin(16, Pin.OUT)Code language: PHP (php)
シリーズでは、ピン番号を定数として先に宣言しています。
# 定数宣言の例(名前で役割が伝わる)
LED_PIN = 16
led = Pin(LED_PIN, Pin.OUT)Code language: PHP (php)
LED_PIN = 16 と書くことで「このピンは LED 用」と名前で伝わります。
別のピンに変えたいときも、数字を1か所変えるだけで済みます。
変更ミスが減り、コードが長くなるほど、この宣言の効果が大きくなります。
出力・入力モードの設定【Pin.OUT / Pin.IN】
出力モード(Pin.OUT):LEDを光らせる
Pin.OUT を指定すると、そのピンが「出力モード」になります。
プログラムからピンに電圧を出して、外部の部品(LED など)を動かすときに使います。
LED_PIN = 16
led = Pin(LED_PIN, Pin.OUT) # GPIO16 を出力モードに設定
led.value(1) # 電圧を出す(HIGH → LED 点灯)
led.value(0) # 電圧を止める(LOW → LED 消灯)Code language: PHP (php)
led.value(1) でピンの電圧が HIGH(電圧が高い状態)になります。
led.value(0) では LOW(電圧が低い状態)になります。
LED はこの電圧の変化に反応して点灯・消灯します。
RaspberryPi Pico2Wの第2回のLチカで解説しています。
入力モード(Pin.IN):ボタンを読み取る
Pin.IN を指定すると、そのピンが「入力モード」になります。
外部の部品(ボタンなど)の状態をプログラムで読み取るときに使います。
SW_PIN = 18
switch = Pin(SW_PIN, Pin.IN) # GPIO18 を入力モードに設定
state = switch.value() # ピンの状態を読み取る(0 か 1 が返る)Code language: PHP (php)
出力は「書き込む(led.value(1))」、入力は「読み取る(switch.value())」です。
第3回のボタン制御が、この入力モードの実践でした。
入力ピンを使う場合は、次のセクションで解説するプルアップの設定も合わせて行います。

プルアップの設定方法【Pin.PULL_UP とは?】
プルアップが必要な理由
入力ピンにボタンを接続するとき、プルアップまたはプルダウンの設定が必要です。
ここでは簡単におさらいします。
なぜ必要かは第3回で詳しく解説しています。
ボタンを押していないとき、入力ピンはどこにもつながっていない「フローティング(浮いた状態)」になります。
フローティングの状態では電圧が不安定になり、プログラムが意図しない値を読み取ることがあります。
ボタンを触っていないのに LED が点滅したり、値が 0 と 1 を繰り返したりする誤動作が起きます。
プルアップとは、入力ピンを抵抗を通して VCC(電源電圧)側につないでおく仕組みです。
VCC はマイコンに供給される電源電圧を指し、Pico 2W では 3.3V です。
入力ピンが常に電源側へ引き上げられる(pull up)ため、どこにもつながっていない状態がなくなります。
プルアップを設定すると、ボタンを押していないとき HIGH(1)に、押したとき LOW(0)に安定します。
この「安定した基準値」があることで、ボタンの状態を正しく読み取れます。

Pin.PULL_UP の書き方と使用例
pull=Pin.PULL_UP を第3引数に追加するだけです。
SW_PIN = 18
# 入力モード+プルアップを設定
switch = Pin(SW_PIN, Pin.IN, pull=Pin.PULL_UP)
state = switch.value() # 押していないとき 1、押したとき 0 が返るCode language: PHP (php)
プルダウンにしたい場合は pull=Pin.PULL_DOWN に変えます。
この場合は押していないとき 0、押したとき 1 になります。
Grove Button は第3回で解説したとおり、押すと HIGH になる回路です。
そのため pull=Pin.PULL_UP を使います。
プルアップの付け忘れに注意
入力ピンを使う場合は、Pin.IN だけでなくプルアップの設定も忘れずに追加してください。
設定しないと、ボタンを押していないのに誤動作する原因になります。
GPIO番号と物理ピン番号を間違えたときの対処法
「コードを書いたのに動かない」という場合、GPIO番号と物理ピン番号の混同が原因のことがあります。
症状:コードは正しく書けているのに、LED が光らない・ボタンが反応しない。
原因:物理ピン番号を GPIO 番号と間違えて指定している。
たとえば物理ピン21番は GPIO 16番に対応します。
ここで Pin(21, Pin.OUT) と書くと、別のピンを操作することになります。
対処:ピンアウト図で「使いたいコネクタ(D16 など)」の GPIO 番号を確認してから、その番号をコードに書きます。
Grove Base Hat なら、コネクタのシルク印刷(基板に印字された文字)がそのまま GPIO 番号です。
コネクタには D16・D18・A0 のように印刷されています。
それをそのまま使うのが、一番間違いが少ない方法です。
まとめ:machine.Pin の使い方を3行でおさらい
machine.Pin の引数は3つ、覚えることはシンプルです。
- 第1引数:GPIO 番号(Grove Base Hat のコネクタ表記の数字をそのまま使う)
- 第2引数:
Pin.OUT(出力)かPin.IN(入力)を選ぶ - 第3引数:入力のときだけ
pull=Pin.PULL_UPを追加する
この3つが分かれば、ピン番号を変えるだけで他のピンにも自由に応用できます。
「コピペで動いていたコード」の意味がつかめると、次のステップ(ADC・PWM)もぐっとスムーズに進みます。
RaspberryPi Pico 2Wを使ったIoT電子工作・データ分析入門というシリーズを公開しています。
こちらも合わせて、ご覧ください。
-
-
Raspberry Pi Pico 2Wで照度センサーLED調光【第4回IoT電子工作】
2026/9/4
こんな方におすすめです Pico 2Wで照度センサーを初めて使う方 ADCとPWMのつながりを手を動かして理解したい方 暗くなるとLEDが自動で明るくなる仕組みを作りたい方 「Lチカはできた。次は何を ...
-
-
Raspberry Pi Pico 2Wでボタン入力・LED制御【第3回IoT電子工作】
2026/8/30
第3回 IoT電子工作入門講座 RaspberryPi Pico 2Wでボタン入力・LED制御動画はこちら https://youtu.be/gZcQWe1X1FU?si=qtHp0hmu1m_js9 ...
-
-
Raspberry Pi Pico 2Wの環境構築とLチカ【第2回IoT電子工作】
2026/8/30
前回の第1回記事では、Raspberry Pi Pico 2Wの基本的な特徴と必要な機材について解説しました。 https://thunderblog.org/electronic_work/rasp ...
-
-
Raspberry Pi Pico 2Wを始める準備【第1回IoT電子工作】
2026/8/30 IoT電子工作, Python, RaspberryPi, RaspberryPiPico2W, データ分析, 電子工作
そんなあなたに。 私は製造業でエンジニアとして18年以上働いており、実際の現場でIoTシステムの導入やデータ分析を担当してきました。 その経験を活かして、初心者の方でも確実にステップアップできるよう、 ...

