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

今回はRaspberry Pi Pico(以下、Pico)とOLEDを使った「小型ディスプレイ」を作ってみたいと思います。ここでは、秋月電子通商の「0.96インチ 128×64ドット有機ELディスプレイ(OLED) 白色」を使います。現時点での価格は580円です。サイズはコインよりも一回り大きいくらいです。
OLEDは「Organic Light Emitting Diode」の略です。Organicは「有機物」という化合物の一種です。有機物は構造が複雑で、生物しか作り出せないと思われてきたため、そう呼ばれてきました。現在は生物以外からも作り出すことが可能です。

回路図です。
OLEDを制御するにはI2C(アイ・ツー・シーまたは、アイ・スクエア・シー)という通信方式を使います。 I2Cは「SDA」「SCL」という2本の信号線だけで入力と出力ができるという特殊な仕組みを採用しています。 ここでは、Picoの1番ピンを「SDA」、2番ピンを「SCL」に割り当てます。
回路の動作の仕組みについて、考えてみましょう。 前回まで紹介してきた自作センサーは、ラージハブ(ハブ)側からは「きょりセンサー」として認識されてきました。今回はハブからデータを好き勝手に出力しますので、どれにも該当しません。センサーでもなんでもない、謎のデバイスとなります。

回路を組み立てると、こうなります。
◆ OLEDの制御

まずはOLEDに文字を表示するだけのテストプログラム(oledtest_for_pico.py)を作ります。Thonnyで作成します。 I2Cを使うには、「I2C」クラスを使ってオブジェクトを新規作成します。ここではオブジェクト名を「i2cport」とします。書式は「i2cport = I2C(ID番号0, scl=Pin(GP番号), sda=Pin(GP番号), freq=クロック周波数)」です。 あとは「i2cport.writeto(I2Cデバイスのアドレス,バイト配列)」と記述することで、データを送信することができます。 具体的な制御方法は複雑なので、今回は省略します。

実行すると、OLEDに文字が表示されます。ラージハブへの接続は不要です。
文字はキャラクターコード順に表示されます。0x5F番まで表示すると、0x20番に戻ります。画面に文字が一杯になると、下から上に向かってスクロールします。

続いて、UARTからの受信データをOLEDに表示するプログラム(oledout_for_pico.py)を作ります。
UARTの使用方法は前回と同じです。前回のプログラムはボーレートを変更したり、きょりセンサーの「ふり」をしたり、複雑な通信を行っていましたが、今回はそれらをすべて省き、いきなりボーレートを115200bpsに設定しています。
◆ プログラムの作成

続いて、ハブ側のプログラムを作ります。
今まで、ハブの通信は自動的にUARTが設定されるため、UARTであることを意識する必要がありませんでした。今回は、自前でUARTを設定します。
これはUARTの関数を表示するプログラム(uart1.llsp)です。 実行すると関数の名前が表示されます。
「baud」はボーレートを設定するための関数です。「write」はハブからデータを送信する関数です。この2つを主に使います。

UARTから「HELLO!」というデータを送信するプログラム(uart2.llsp)です。 送信は3秒間隔で果てしなく繰り返します。
「ファイル - Save as...」をメニュー選択。→「Raspberry Pi Pico」を選択。→ファイル名を「main.py」として保存します。書き込みが終わったら、PCとの接続を切り離します。

ハブを起動します。ここで、Pico側のプログラム(oledout_for_pico.py)は自動的に実行されます。 ハブ側のプログラムを実行すると、OLEDにデータが表示されます。実際のデータは「hello!」ですが、フォントの都合により大文字で「HELLO!」と表示されます。
この謎のデバイスとして接続する方法は、自由にデータを送受信できるというメリットがあります。しかし、接続が確定していないため、ハブから「0x00」の送信が止まらないというデメリットがあります。 今回、Picoのプログラム側では0x00を受信したら捨てることで対策しています。通信に無駄な負担がかかってしまうので、根本的に解決していません。
当ブログの内容は、弊社製品の活用に関する参考情報として提供しております。
記載されている情報は、正確性や動作を保証するものではありません。皆さまの創意工夫やアイデアの一助となれば幸いです。