BOOTSELボタンでLEDの点滅パターンを切り替える — Raspberry Pi Pico

つぶやき

はじめに

多くの人が Raspberry Pi のマイコンボードで使う「BOOTSEL」ボタン。通常このボタンは 電源投入時に押し続けることで USB マスストレージモード(UF2ファイル転送モード) に入るためのものです。
ところが、最近の MicroPython の RP2040 ポートでは、このボタンを プログラム中に状態を読み取ることが可能となりました。モジュール rp2.bootsel_button() によって「ボタンが押されているかどうか」が返ります。
このボタンを「設定モード切替ボタン」や「テスト起動トリガー」などとして利用することで、Pico がよりインタラクティブな装置として使えるようになります。


コード紹介

import machine, time, rp2

led = machine.Pin('LED', machine.Pin.OUT)
mode = 0

while True:
    if rp2.bootsel_button():
        mode = (mode + 1) % 3
        print("Mode:", mode)
        time.sleep(0.5)

    if mode == 0:
        led.toggle(); time.sleep(0.1)
    elif mode == 1:
        led.toggle(); time.sleep(0.5)
    else:
        led.toggle(); time.sleep(1)

このコードの動き:

  • 内蔵LEDを使用。
  • mode 変数で点滅パターンを 0〜2 の3種類に切り替え。
  • rp2.bootsel_button()True(ボタンが押されている)と検知された時にモードを次に移行。
  • 各モード別に点滅間隔(0.1秒、0.5秒、1秒)を変えてループします。
  • ボタン検知後に time.sleep(0.5) を入れて「押しっぱなしでモードがずっと変わる」ことを防止している点もポイントです。

このように、BOOTSELがまるで「設定ボタン」の役割を果たしています。


活用

物理ボタン1つでインタラクションが増える

通常、Picoで何か動きを変えるならGPIOにスイッチをつけて割り込みやポーリング処理を書く必要があります。しかし、BOOTSELボタンを使えば 追加の配線無しでボタンを使えるという利点があります。

シンプルながら応用範囲が広い

点滅パターン切替は「LED点滅」という目に見えるフィードバックがあるため、学習用・実験用に最適です。しかし応用すると、「動作モード切替」「セーフモード起動」「ユーザーメニュー呼び出し」など、より高度な使い方にも展開可能です。

MicroPythonの rp2 モジュールを理解するきっかけになる

rp2.bootsel_button() を使うことで、RP2040の特殊な仕様(BOOTSELボタンの配線やQPSI接続など)にも興味が湧きます。例えば、BOOTSELボタンは “通常のGPIOピンとは別” に、SPIフラッシュのCS(チップセレクト)信号線に繋がっており、押下時にフラッシュアクセスが一時的に遮断されるという解説もあります。


まとめ

  • rp2.bootsel_button() を使えば、BOOTS ELボタンを 追加配線なしで入力ボタンとして使える可能性があります。
  • 紹介したコードは 内蔵LEDの点滅パターン切替というシンプルな応用ですが、学習用から応用プロジェクトまで幅広く使えます。
  • ただし、ボード/ファームウェア依存で動作が異なるため、実践前に動作確認を強くおすすめします。

参考URL

rp2 — functionality specific to the RP2040 — MicroPython latest documentation
rp2.bootsel_button() not working on Raspberry Pi Pico 2 W (RP2350) · Issue #16908 · micropython/micropython
Port, board and/or hardware RP2 port, Raspberry Pi Pico 2 W (RP2350) MicroPython version 3.4.0; MicroPython v1.25.0-prev...
GitHub - cfreshman/pico-bootsel: Read the state of the BOOTSEL button on Raspberry Pi Pico with MicroPython
Read the state of the BOOTSEL button on Raspberry Pi Pico with MicroPython - cfreshman/pico-bootsel

コメント