注目キーワード

【Arduino】Raspberry Pi Pico/W でどのボタン押したか判別するぞ!

すけろく
うーむ。
げんろく
どうした浮かない顔して。
すけろく
これまで、Raspberry Pi Pico / Wをいろいろ確認してきたが
外付けのボタンの認識ってやったかぇ?
げんろく
たしかに!まだ取り上げていない基本的なものがあるな
よし、今回はボタン押下時の状態を
Raspberry Pi Pico / Wで認識してみよう。

この記事では、「Raspberry Pi  Pico W」を使って、「プッシュボタンが押されたかを認識する」方法をご紹介します。

Raspberry Pi の中でも、省電力なCPUを搭載したマイコン開発ボードです。

他のRaspberry Pi 製品とは異なり、Linux OSを搭載していません。

しかし省スペース、省電力の専用CPU「RP2040」を搭載していて、Arduino IDEや、MicroPythonで開発可能です。

しかも、Wi-FiとBluetoothが使用できるモジュールも搭載されているので、スタンドアロンでの稼働のみならず、他のマイコンと無線通信することが可能です。

 

今回の製作内容
2つの異なる色のプッシュボタンスイッチを使います。2つのうち、どちらが押されかを「Raspberry Pi  Pico W」で認識し、
押されたボタンと同じ色にLEDを点灯させます。

LEDは、調色可能なRGB対応LEDを使用します。

Raspberry Pi  Pico W」に接続する際の環境構成や、Arduino IDEでのプログラム例を紹介します。

ぜひ、皆さんも挑戦してみてくださいね!

この記事の前提となる「Raspberry Pi  Pico W」のはじめかたは、次の記事で紹介しています。

関連記事

すけろく ついに、国内でもRaspberry Pi Pico Wを手に入れたぞ! げんろく Wi-Fiモジュールがついているので、 国内の技適取得が必要だったからな。 すけろ[…]

あわせて読みたい!「Raspberry Pi  Pico W」関連の便利記事

関連記事

すけろく ん~。 このエラーの時の変数の値が知りたいな~ げんろく どうした? プログラムがうまく動かないのか? すけろく そうなのだ。 Raspberry Pi Pico[…]

今回使用したマイコンはこちら!

ピンヘッダ実装済み

created by Rinker
ノーブランド品
¥2,190 (2024/04/14 12:15:13時点 Amazon調べ-詳細)

ピンヘッダを自分ではんだ付けするもの

created by Rinker
Raspberrypi
¥1,656 (2024/04/15 03:15:11時点 Amazon調べ-詳細)

今回使った部品

created by Rinker
エイダフルート(Adafruit)
¥1,057 (2024/04/14 12:17:00時点 Amazon調べ-詳細)

次のものは、秋月電子などで購入することができます。

品名 購入サイト
プッシュボタンスイッチ(タクトスイッチ)
カーボン抵抗:3.3KΩ
秋月電子

スイッチが押されたことを認識するには?

今回はプッシュスイッチが押されたことを認識してみます。

プッシュボタンの仕組み

プッシュボタンスイッチは、右の列と左の列で導通しています。

ボタンを押すと、右と左の回路が導通するという仕組みです。

 

この回路のうち右か左の回路を「Raspberry Pi  Pico W」のGPIOに接続し、回路上の電圧の変化によってスイッチが押されたかを判断します。

この電圧の変化について説明する前に、デジタル回路アナログ回路による違いを次に説明します。

 

デジタル回路とアナログ回路の違い

デジタル回路

デジタル回路は、High、Lowの2種類の電圧だけを使用して回路を作ります。

HighはICやマイコンの電源電圧(Raspberry Pi Pico Wは「3.3V」)を使うことが多く、Lowは0Vを使う場合がほとんどです。

High/Lowの組み合わせやタイミングよく切り替えることで、信号を部品同士で通信することができます。

この信号が「デジタル信号」です。

アナログ回路

アナログ回路は常に変化する電圧を扱う回路です。

センサーなどは感知した状態により電圧が変化するものがおおくあります。

この変化はHigh や Lowの2種類ではなく、状態により電圧が何Vなのかという電圧値が重要になります。

この信号が「アナログ信号」です。

 

今回使うのはデジタル回路

今回は、プッシュボタンスイッチが押された場合と、そうでない場合の2つの状態を表すため、デジタル回路として作成します。

デジタル回路は、「High」と「Low」の2種類の状態を作る必要があります。

今回は「Raspberry Pi  Pico W」の電源電圧を使うので「3.3V」が「High」、「0V」が「Low」になります。

 

では、プッシュボタンスイッチのデジタル回路に接続する「Raspberry Pi  Pico W」のGPIOの電圧は「High」、「Low」のどちらでしょうか。

 

単純にプッシュボタンスイッチのデジタル回路につなげただけだと、GPIOの電圧は一定ではありません。

このままだと、「Raspberry Pi  Pico W」の中で「High」、「Low」を識別することがでません。

そのため「Raspberry Pi  Pico W」のGPIOにかかる電圧を一定にする必要があります。

 

そこでデジタル回路上に構成するのが「プルアップ抵抗」や「プルダウン抵抗」になります。

 

プルアップ/プルダウン抵抗

プルアップ抵抗、プルダウン抵抗のそれぞれの特徴と、今回のプッシュボタンスイッチを使った回路を説明します。

 

プルアップ抵抗とは

プッシュボタンスイッチは回路に電流を「流す」または「流さない」を切り替える部品ですので電圧を変化させる機能はありません。

これが無い場合、プッシュボタンスイッチを押していない時はGP16が繋がっていない状態になります。(この状態を「電圧が不定」といいます)

このような状態だと基本的には0Vで、周囲のノイズ等に応じて電圧がフラフラとした状態となります。

「電圧が不定」の状態を改善するために使用するのが「プルアップ抵抗」です。

プルアップ抵抗」は次のような回路図で実現できます。

Raspberry Pi  Pico W」の3.3V出力GPIOとGPIO16の回路上に、「3.3kΩ」の抵抗を配置します。

この状態だと、プッシュボタンスイッチが押されていない場合、GPIO16の電圧は「3.3V」になります。

 

先ほどの回路図と等価回路は次のようになります。

また、プッシュボタンスイッチOFF時の空気抵抗を「10TΩ」とすると、GPIO16における電圧(V)は、電圧の分圧の式から次のようになります。

プッシュボタンスイッチがONの場合、等価回路とGPIO16における電圧は次のようになります。

このように、「プルアップ抵抗」を使うと、プッシュボタンスイッチの状態によって次のような電圧の固定ができます。

プッシュボタンスイッチの状態 電圧値
押された 0V
押されていない 3.3V

 

 

 

プルダウン抵抗とは

プルダウン抵抗」は、「プルアップ抵抗」とは逆に、GND(接地)側に抵抗を置く方法です。

プッシュボタンスイッチの状態における電圧は、「プルアップ抵抗」の逆になります。

 

プルダウン抵抗」は次のような回路図で実現できます。

このように、「プルダウン抵抗」を使うと、プッシュボタンスイッチの状態によって次のような電圧の固定ができます。

プッシュボタンスイッチの状態 電圧値
押された 3.3V
押されていない 0V

 

 

今回の回路ではプルアップ抵抗を使用

前述したとおり、「プルアップ抵抗」や「プルダウン抵抗」を使えば「High」、「Low」の電圧を固定できます。

今回は、「プルアップ抵抗」を使用して「High」、「Low」の電圧を固定します。

プッシュボタンスイッチの状態 信号状態 電圧値
押された Low 0V
押されていない High 3.3V

 

 

押されたボタンによってLEDの色を変える

プッシュボタンスイッチが押された際に、LEDを光らせます。

ただのLEDを点灯させるのでもよいですが、せっかくなので、1つのLEDを押すボタンによって色を変えて点灯させるようにしてみます。

 

1つのLEDで表現する色を変えるには、信号線で色や輝度を変更できるRGB対応のLEDを使用します。

商品としては次のものになります。

created by Rinker
エイダフルート(Adafruit)
¥1,057 (2024/04/14 12:17:00時点 Amazon調べ-詳細)
シリアルLED NeoPixelのスルーホール実装用LEDです。直径5mmの砲弾型。パッケージは半透明です。
RGB対応なので、信号線からの制御によって発光色を変えられます。
この商品の端子構成は次のようになっています。
端子名称
説明
Data in
信号線
5V
5V Vin(+)
GND
5V GND(ー)
Data out
※今回は使用せず。
複数個つなげる場合に使用します。

全体の回路構成

プッシュボタンスイッチを2つ(緑)と(青)を準備します。

2つのプッシュボタンスイッチ、「Raspberry Pi  Pico W」、RGB対応LEDを接続する回路を作成します。

回路は次のように構成しました。

 

プッシュボタンスイッチ(緑)が押されたかの取得は、GPIO16で行います。プッシュボタンスイッチ(青)はGPIO17です。

どちらのGPIOも「プルアップ抵抗」を構成しています。

これから組むプログラム内では、各GPIO(16、17)が「Low」になったことでプッシュボタンスイッチが押されたと判断します。

 

 

実際の回路構成

先ほど記載した回路をブレッドボード上で組み上げました。

実際のイメージは次の通りです。

 

ブレッドボード右側にある「Raspberry Pi Pico W」には、GPIOをわかりやすくする「GPIO Master」を取り付けています。

気になる方は、こちらからどうぞ。

Boothショップで販売中!

この商品は、電子工作でRaspberry Pi Pico/Wを使う場合に便利なツールです。Raspberry Pi Pi…

 

画像の左側にある電源供給用のモジュールでは、ブレッドボード上の左右の電圧を5Vと3.3Vで分けるため、ジャンパを調整しています。

参考にされる方はご注意ください。

 

(注意)
作成の際には、「Raspberry Pi Pico W」に接続する前に、信号電圧をテスターで確認してください。

 

実際に確認に使ったテスターはこちら!

created by Rinker
三和電気計器
¥9,428 (2024/04/14 12:17:01時点 Amazon調べ-詳細)

 

今回の構成に使用した部品は次の通りです。

回路作成に使った部品はこちら!

created by Rinker
サンハヤト
¥1,544 (2024/04/14 12:15:14時点 Amazon調べ-詳細)

created by Rinker
エイダフルート(Adafruit)
¥1,057 (2024/04/14 12:17:00時点 Amazon調べ-詳細)

次のものは、秋月電子などで購入することができます。

品名 購入サイト
プッシュボタンスイッチ(タクトスイッチ)
カーボン抵抗:3.3KΩ
秋月電子

 

Raspberry Pi Pico Wのプログラミング

先ほど構成した回路を使用して、プッシュボタンスイッチが押されたら、スイッチの色にLEDを光らせるプログラムを作ります。

 

赤外線送受信用のライブラリを準備する

RGB対応LEDを使用するためにArduinoのライブラリ「Adafruit_NeoPixel」を使用します。

 GitHubのライブラリページはこちら(Adafruit_NeoPixel)

上記のライブラリは、Arduino IDEのライブラリマネージャでダウンロード、設定ができます。

ライブラリのインストールは、次の記事で紹介しています。

関連記事

本記事は、Arduino IDE 1.8.xバージョンのライブラリ管理方法を紹介した記事です。 Arduino IDEは、より新しいバージョン「2.0.x」が発表されています。     機能がよりリッチになった「Ardu[…]

プログラムを作成する

Arduino IDEを起動して、「ファイル」メニューから「新規ファイル」を選択し、表示されるスケッチに以下のように記述します。

 Arduino IDE スケッチ例

 Raspberry Pi Pico Wへの書き込み 

2回目以降

  1.  Raspberry Pi PicoをパソコンにUSB接続します。
  2.  Arduino IDEで前述のプログラムを記載して、 「ファイル」メニューから「名前を付けて保存」で任意の名前を付けて保存します。
  3. 「ツール」メニューから「ボード」情報を確認し、次のものを選択します。
    「Raspberry Pi Pico/RP2040」-「Raspberry Pi Pico W」
  4. 「シリアルポート」にマイコンを接続したCOMポートが指定されているかも確認します。
  5. 「ツール」メニューから「シリアルモニタ」を選択してシリアルモニタを起動します。(転送速度は「115200」です)
  6. 「スケッチ」メニューから「マイコンボードに書き込む」を選択します。

プログラム実行結果

電源をオンにし、書き込みが完了した後にプッシュボタンスイッチを押します。

押したスイッチの色と同じ色にLEDが光れば完成です。

編集後記

いかがだったでしょうか。

基本として押さえておくべきスイッチからの入力の処理方法をご説明しました。

Raspberry Pi Pico W」のプログラミングといえば、「microPython」と考えていましたが、Arduino IDEでプログラムできるとうれしいですね。

Raspberry Pi Pico W」と同じRP2040というチップを搭載している機器にも使えるので応用ができそうです。

記事は、以上になります。

最後までご覧いただきありがとうございました。

記事内でご紹介した「Raspberry Pi Pico W」はこちら!

ピンヘッダ実装済み

created by Rinker
ノーブランド品
¥2,190 (2024/04/14 12:15:13時点 Amazon調べ-詳細)

ピンヘッダを自分ではんだ付けするもの

created by Rinker
Raspberrypi
¥1,656 (2024/04/15 03:15:11時点 Amazon調べ-詳細)

実際に確認に使ったテスターはこちら!

created by Rinker
三和電気計器
¥9,428 (2024/04/14 12:17:01時点 Amazon調べ-詳細)

回路作成に使った部品はこちら!

created by Rinker
サンハヤト
¥1,544 (2024/04/14 12:15:14時点 Amazon調べ-詳細)

created by Rinker
エイダフルート(Adafruit)
¥1,057 (2024/04/14 12:17:00時点 Amazon調べ-詳細)

次のものは、秋月電子などで購入することができます。

品名 購入サイト
プッシュボタンスイッチ(タクトスイッチ)
カーボン抵抗:3.3KΩ
秋月電子

Raspberry Pi Pico Wの他の記事はこちらからどうぞ!

すけろく うーむ。 どうしたものか。 げんろく どうした。 暗い顔をして。 すけろく カーモデルのウィンカー点滅を再現したくてな。 明滅回路を作ろうか悩んでおる。 げんろく ん!? そんなときは、メインプロセッサと切り離して 動作するPIOの出番ではないのか! この記事では、「Raspberry Pi  Pico/W」に実装されている「PIO(Programmable I/O」を実際に使ってみます […]

すけろく Raspberry Pi Pico/WのPIO機能を使ってUARTの送信には成功した。 しかし、まだ受信側ができていないのぉ。 げんろく そうだな。 今度は受信側を試してみるか。 すけろく どうせなら、パソコンから送った文字を返すような やり取りができるといいな。 げんろく よし。 UART送受信を実装してみよう。 この記事では、「Raspberry Pi  Pico/W」に実装されてい […]

すけろく Raspberry Pi Pico/WのPIO機能については前回調べた。 今度は実際に使ってみたいの~ げんろく そうだな。 実際にプログラムする際の注意事項などを見ていこう。 すけろく Arduino IDEでも使用できるのか? げんろく ああ。 使えるぞ! Arduino IDEで使う場合を例にやっていこう。 この記事では、「Raspberry Pi  Pico/W」に実装されている […]

すけろく Raspberry Pi Pico/Wには、PIOという機能があるらしいな。 げんろく そうだ。 UARTなどのインタフェース不足や、実装されていない機能を GPIOに対してプログラムできる機能だ。 すけろく Raspberry Pi Pico/Wをもっと知るために PIOを調べてみたい。 げんろく よし! PIOについて少し調べてみるか! この記事では、「Raspberry Pi  P […]

すけろく うーむ。 げんろく どうした浮かない顔して。 すけろく これまで、Raspberry Pi Pico / Wをいろいろ確認してきたが 外付けのボタンの認識ってやったかぇ? げんろく たしかに!まだ取り上げていない基本的なものがあるな よし、今回はボタン押下時の状態を Raspberry Pi Pico / Wで認識してみよう。 この記事では、「Raspberry Pi  Pico W」を […]

すけろく 宅内で使っているリモコンは、どういった仕組みで テレビなどをつけているのかな~? げんろく 赤外線を使って信号を送っているのだ。 すけろく しかし、たくさんある機器のリモコンが混信しないのは どういった仕組みなのかぇ? げんろく よし、今回は赤外線リモコンの通信を 調査してみるか! この記事では、「Raspberry Pi  Pico W」を使って、「赤外線リモコンの通信内容を分析する」 […]

すけろく うーむ。 対応付けが難しいな。 げんろく どうした? Raspberry Pi Picoで悩んでいるようだな。 すけろく Raspberry Pi PicoやPico Wの GPIOピンの情報がボード上にプリント されていないから資料との対応付けがやりづらくてな。 げんろく そうか。そういう課題があるのだな。 よし、解決するグッツを作って提供してみよう! 皆さんは、「Raspberry […]

すけろく うーむ。 モーターを毎回同じくらい回転させることはできんのかな。 げんろく DCモーターや、サーボモーターだと、 回転量を正確に制御することは難しいぞ。 すけろく では、何か解決策はあるのかぇ? げんろく ステッピングモーターというものがある。 モーターの回転をステップとして制御できる。 今回はこのあたりを動かしてみるか。 この記事では、「Raspberry Pi  Pico W」を使っ […]

すけろく 以前の記事で、Raspberry Pi Pico Wを Picoprobe経由でデバッグすることができた。 しかし、シリアルの入出力がArduino IDEで 読み込めないのだ。 げんろく そうだな。 Raspberry Pi PicoやRaspberry Pi Pico Wでは、 シリアル出力用の「Serial.println」では、 Picoprobe経由で取得できない。 すけろく […]

すけろく ん~。 このエラーの時の変数の値が知りたいな~ げんろく どうした? プログラムがうまく動かないのか? すけろく そうなのだ。 Raspberry Pi Pico Wでもデバック機能が使えると いいのだが。。。 げんろく ちなみに、Arduino IDE 2.1.0 のデバッグ機能で Raspberry Pi Pico / Wのデバッグができるぞ! やっとできたプログラムを動かしてみると […]