第2回:LEDを光らせてみよう(Lチカ)

つぶやき

今回は、マイコン学習の王道「LED点滅(Lチカ)」に挑戦します。LEDがチカチカ光ると、それだけで「Pico Wが外部を制御している」という実感が湧きやすいですね。

この記事では、基本的な点滅の実装だけでなく、LEDの背景構造、発展的な使い方、トラブル対策なども含めて解説します。

Pico WのオンボードLED構造と注意点

まず、Pico W のオンボードLEDについて少し知っておくと、つまずきにくくなります。

  • Raspberry Pi Pico(無印)では、基板上のLEDは GPIO25(GP25) に直接接続されています。
  • しかし Pico W(無線機能付きモデル)では、LEDは RP2040 側ではなく、Wi-Fi チップ(Infineon CYW43439)内部の線に接続されており、GPIO25 に直結していない構造になっています。したがって、GPIO25 に書き込んでも LED は点灯しません。
  • MicroPython の Pico W 向けビルドでは、この構造を吸収するため、LED を扱いやすくする抽象化が導入されています。具体的には、Pin("LED") という識別子を使うことで、Wi-Fi チップ経由で LED を制御できるようになっています。
  • つまり、Pico W 用の MicroPython を使うなら、Pin("LED") という指定を使うのが正解、ということになります。無印 Pico と併用する場合には、モデルによって GPIO25 指定と LED 指定を切り替えることになります。

この仕組みを理解しておくと、後で「LEDが光らない」問題が起きたときに原因を特定しやすくなります。


machine.Pin を使った GPIO 操作

MicroPython で GPIO を操作するために、machine.Pin クラスを使います。使い方を丁寧に見ていきましょう。

from machine import Pin

# 出力用ピンを定義
led = Pin('LED', Pin.OUT)
  • Pin("LED", Pin.OUT) → ピン “LED” を 出力モード(OUT) として初期化
  • led.value(1) → 出力を HIGH に(LED 点灯)
  • led.value(0) → 出力を LOW に(LED 消灯)

また、MicroPython には on() / off() メソッドもサポートしています。

led.on()   # 点灯
led.off()  # 消灯

これで、GPIO を通じて LED をシンプルに制御する準備ができました。


点灯・消灯のサンプルコード

まずは、単純に「一定時間点灯 → 消灯」するサンプルを見ておきましょう。

from machine import Pin
import utime

led = Pin('LED', Pin.OUT)

# 点灯
led.value(1)
utime.sleep(2)

# 消灯
led.value(0)

このコードを Pico W 上で実行すると、LED が 2 秒間点灯し、その後消灯します。非常にシンプルですが、「LED が確かに制御可能であることを確かめる」には十分です。


点滅(Lチカ)基本プログラム

次はいよいよ点滅(Lチカ)です。点灯と消灯を繰り返す書き方の基本形を示します。

from machine import Pin
import utime

led = Pin('LED', Pin.OUT)

while True:
    led.value(1)      # 点灯
    utime.sleep(1)    # 1秒待つ
    led.value(0)      # 消灯
    utime.sleep(1)    # 1秒待つ

このコードを動かすと、LED は 1 秒ごとに点灯・消灯を繰り返します。

  • 点滅速度を変えたいときは、utime.sleep() の秒数を変えれば OK
  • utime.sleep_ms()(ミリ秒単位)や utime.sleep_us()(マイクロ秒単位)を使えば、より細かい制御が可能
  • led.toggle() メソッド(LED の状態を反転)をサポートしている環境では、led.toggle() を使ってコードを簡潔に記述することも可能です

たとえば、以下のように書くこともできます:

while True:
    led.toggle()
    utime.sleep_ms(500)

上記だと 0.5 秒ごとに点滅します。


応用アイデア:可変速度、外付けLED

Lチカを一歩進めて、ちょっとした応用例も見てみましょう。

可変速度点滅

ユーザー入力(たとえばボタン、シリアル入力、スライダー)で「点滅間隔」を変えられるようにすると、インタラクティブな動きを作ることができます。

from machine import Pin
import utime

led = Pin("LED", Pin.OUT)
interval = 0.5  # 初期値(秒)

while True:
    led.value(1)
    utime.sleep(interval)
    led.value(0)
    utime.sleep(interval)
    # ここに、ボタン押下チェックなどで interval を変えるロジックを入れてもよい

外付けLED を使う場合

オンボード LED だけでなく、外部に LED をつなぐ場合もよくあります。

  • LED のアノード(長い脚)を抵抗を経由して GPIO に、カソード(短い脚)を GND に接続
  • 通常、330Ω程度の抵抗を直列に入れて過電流を防ぐ
  • 外部 LED の場合は、GPIO 出力能力(最大電流など)に注意

外部LEDを制御するコードは、基本は同じ Pin(x, Pin.OUT) を使えば動きます。

Let There Be Light
Lighting an LED isn't as simple as it looks. Find out how to calculate the correct resistor values and identify the Anod...

トラブルシューティング:LEDが光らないときのチェックリスト

点滅プログラムを実行したのに LED が光らない、という悩みは意外と多くあります。以下のチェックポイントを順に確認するとよいでしょう。

チェック項目内容
モデル確認使用しているのが Pico(無線なし)か Pico W(無線付き)かを確認
正しいファームウェアPico W 用の MicroPython ビルドが必要。無線なし版では LED 指定が効かない可能性あり
Pin("LED") 指定の使用Pico W では Pin(25) ではなく Pin("LED") を使うこと
LED のハード故障基板不良やはんだ付けなどの物理問題
接続ミス(外部 LED 利用時)抵抗の接続、GND 接続、極性など
ループ・待機時間の調整待機時間が短すぎて視覚的に点灯が認識できない、など
他のサンプル動作確認別の簡単なスクリプトで LED on/off 動作を試す

GPIO の基礎

LED 制御を理解するために、GPIO(General Purpose Input/Output)の基本を改めて整理しておきます。

  • 入力(Input)モード:外部信号(スイッチ、センサー)を読む
  • 出力(Output)モード:LED、モーター、リレーなどを動かす
  • GPIO 出力の HIGH/LOW は、マイコン上では電圧制御(通常 0V または 3.3V)が行われる
  • 複数ピンに負荷をかけると、電流制限やドライブ能力を超える可能性があるので注意(ピンあたりの最大電流など)
  • GPIO ピンにはプルアップ/プルダウン抵抗を内蔵できるものもあり、入力時の信号を安定させる役割を持つ

これらを押さえておくと、LED 制御だけでなくセンサーやモーター制御など、他の応用にも応用できます。


ループ制御と時間制御の応用

LED 点滅で使う while True:(無限ループ)と utime.sleep()(待機時間)という構造は、センサー監視、周期処理、タイミング制御など、あらゆるマイコン制御で使われる基本パターンです。

例えば:

  • 一定周期でセンサー値を読み取る
  • 一定時間ごとに処理を行う(例:10 秒ごとに通信)
  • 遅延を入れつつ、他の処理を併行する(例:非ブロッキング処理、割り込み利用など)

このループ+待機時間という形式を応用すると、マイコンで「制御系・監視系」のプログラム全体を構成する力が身につきます。

まとめ

この記事で、以下を取り上げました。

  • Pico W の LED 構造と注意点:GPIO25 直結ではなく、Wi-Fi チップ経由で制御されている
  • machine.Pin による GPIO 操作:Pin(“LED”, Pin.OUT)、value(), on(), off() など
  • 点灯・消灯の基本から点滅(Lチカ) のプログラム
  • 応用例:可変速度、PWM 制御、外付け LED 制御
  • トラブル対策ポイント:LED が光らないときのチェックリスト
  • GPIO 基礎:入力/出力、電流制限、プル抵抗など
  • ループと時間制御:マイコン制御の根幹となる構造

参考リンク・関連情報

Pico W onboard LED not working [SOLVED] - Raspberry Pi Forums
Raspberry Pi Pico: Read Digital Input & Write Digital Output (C/C++ SDK)
Raspberry Pi Pico: Read Digital Input & Write Digital Output (C/C++ SDK RP2040). Raspberry Pi Pico (W) gpio_get, gpio_pu...
Blinking a led on the Raspberry Pi Pico W - dev.webonomic.nl
Blinking a led on the Raspberry Pi Pico W by dev.webonomic.nl – Blinking a led on the Raspberry Pi Pico W
Raspberry Pi Pico W Pinout Explained: A Detailed Guide With Practical Examples - RajivCodeLab
Raspberry Pi Pico W Pinout Explained: is essential for anyone looking to maximize the functionality of this powerful mic...

✅ 次回(第3回)は「ボタン入力で LED を制御してみよう」です。
Pin.IN(入力モード)の使い方とプルアップ/プルダウン抵抗の役割と設定を学びましょう!

コメント