2025年1月27日

020-1.SPIKEセンサー自作入門-第2回「GPIOの使い方」

この連載では「レゴ エデュケーションSPIKEプライム(以下、SPIKE)」で動作するセンサーの作り方を紹介します。センサーを自作して、市販のセンサーにはできないような面白い使い方を考えてみましょう。センサーを作るには電子工作のスキルが必要となります。様々な危険がともないますので、充分に注意して行いましょう。なお、以下の内容によって生じた損害については保障できかねますのでご了承ください。
SPIKEアプリおよびハブOSは、SPIKE App Legacyを利用しています。SPIKE App3での動作は未確認となりますのでご了承ください。(文/松原拓也)

◆ GPIOとは?

いきなりSPIKE用のセンサーを自作してしまってもいいのですが、技術的なハードルが高いので、まずはRaspberry Pi Picoの仕組みを勉強しておきましょう。
センサーを作るには「GPIO」という機能を使います。GPIOは「General Purpose Input/Output」の略で、「汎用的な入出力」という意味です。ユーザーが自由に使うことができる端子です。
前回は基板に搭載されているチップLEDを点滅させるプログラムを実行してみました。プログラムではGPIOの25番から出力していました。出力はHighかLowの2種類です。この場合、Highを出力するとLEDが点灯するように作られています。

GPIOの入力の実験をしてみましょう。 材料がこちらです。
写真中央にあるのが「ジャンパーワイヤー」です。ここでは「オス-オス型」を2本使います。 写真の右にあるのが「タクトスイッチ」です。

タクトスイッチは秋月電子通商で10円で売っています。 タクトスイッチからは4本の端子が出ています。A-A、B-Bの2組は内部でつながっています。
スイッチを押さない状態では、AとBはつながっていません。スイッチを押すと、AとBがつながって電気が流れます。

◆ スイッチをつなぐ

回路図です。
ここではRaspberry Pi Picoの「GP14」と「GND」をタクトスイッチにつないでいます。 Raspberry Pi Picoは全部で40本の端子があります。 「GP~」はGPIOの端子です。たとえば、「GP14」ならば「GPIOの14番」という意味となります。14番である必要はなく、好みで選んでいます。 「GND」は「グランド(Ground)」といって、電位が0Vの状態の端子です。

今回、GP14にはプルアップを行います。プルアップというのは抵抗を使って、電圧をHighにすることです。プルアップ用の抵抗をプルアップ抵抗といいます。
点線で囲んだ部分はマイコンの内部の回路です。プルアップ抵抗を使うか使わないかはソフトウェアで選択することができます。プルアップ抵抗を使った場合、スイッチがオフの場合にはGPIOにはHighが入力されます。スイッチがオンの場合にはGPIOにはLowが入力されます。
この考え方を理解するのには時間がかかるかもしれません。

タクトスイッチを接続した様子です。 タクトスイッチをブレッドボードに挿し込んで、ジャンパーワイヤーでつなぐだけです。

Raspberry Pi Picoをパソコンに接続します。

◆ スイッチ入力のプログラム

パソコン側で「Thonny」を立ち上げて、プログラムを作ります。プログラムで必要なことは最初に「import machine」と記述することです。これでRaspberry Pi Picoに関連するライブラリを使えるようになります。
GPIOを使うには、次のような記述で初期設定を行います。

《入力する場合》
オブジェクト名 = machine.Pin(GPIO番号, machine.Pin.IN, 設定)

《出力する場合》
オブジェクト名 = machine.Pin(GPIO番号, machine.Pin.OUT)

今回はGPIOを入力用として使いますので、プログラムは、、、
button = machine.Pin(14, machine.Pin.IN, machine.Pin.PULL_UP)
if button.value() == 0:(スイッチを押した場合の処理)
、、、このように記述します。
GPIOの状態を検出するには「オブジェクト名.value()」関数を呼び出します。関数の戻り値が「0」の場合はLow=スイッチを押した状態、「1」の場合はHigh=スイッチを押していないという意味です。ここではオブジェクト名を「button」としています。

プログラムを実行します。
この状態で、タクトスイッチを押すと、画面に「button on!」という文字が表示されます。

今回作成したプログラム(Thonny用)

当ブログの内容は、弊社製品の活用に関する参考情報として提供しております。
記載されている情報は、正確性や動作を保証するものではありません。皆さまの創意工夫やアイデアの一助となれば幸いです。