広告の掲載について

当ブログは、商品やサービスの紹介にアフィリエイト広告を利用しており、収益を得ています。
ただし、読者の皆様にとって有益な情報提供を第一に考えております。

広告 電子工作

machine.Pinの使い方と引数【Pico 2W/MicroPython】

こんな方におすすめです

  • Pico 2W のシリーズを読んでいて、Pin() の引数の意味が気になった方
  • コピペで動いているけど、コードの意味をちゃんと理解したい方
  • GPIO番号と物理ピン番号の違いで混乱している方

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() でピンオブジェクトを作ると、そのピンに「電圧を出す」「電圧を読む」といった操作ができます。

変数名(ledswitch)が、そのピンの「名前札」になります。

以降はその変数を通じてピンを操作します。


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 などの出力ピンには不要です。

machine.Pinの3つの引数(GPIO番号・モード・プルアップ)の解説図

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 番号に対応しているので、コネクタに書かれた番号をそのままコードに書けば大丈夫です。

Pico 2WのGPIO番号と物理ピン番号の対応とD16・D18・A0コネクタの位置

ピンアウト図で確認する

「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.OUTとPin.INの違いを矢印の向きで比較した図

プルアップの設定方法【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電子工作】

そんなあなたに。 私は製造業でエンジニアとして18年以上働いており、実際の現場でIoTシステムの導入やデータ分析を担当してきました。 その経験を活かして、初心者の方でも確実にステップアップできるよう、 ...







  • この記事を書いた人
SNSアイコン

サンダー

電気機器メーカーに就職し、ハードエンジニアとして勤務しています。 ブログでは電気、プログラミング、データサイエンスについて書いています。 電気×プログラミング×データサイエンスの3本柱で日本の製造業を盛り上げたいです!

-電子工作
-, , ,