2026年2月27日

024-2.SPIKE-RT入門 第2回目 「ポートFでシリアル通信する」

この記事では「レゴ エデュケーションSPIKEプライム(以下、SPIKE)」で動作する「SPIKE-RT」の使い方を紹介します。
ここではアフレルが販売している教材「レゴ エデュケーションSPIKEプライム C言語プログラミングブック」で配布しているSPIKE-RTの開発環境を使っています。同製品の紹介ページは次の通りです。
https://afrel.co.jp/product/spike/c-language/
(文/松原拓也)

◆ 通信ケーブルを用意する

前回のプログラムではラージハブのUSBポートを通じてシリアル通信を行っていました。しかも送信だけでした。今回はポートFを使い、送信と受信を行ってみたいと思います。実はSPIKE-RTはポートFがシリアル通信用として設定されているので、容易に切り替えることができます。
ポートFの電気的な仕様は約3.3VのUARTです。ボーレートは115200bpsで固定されています(勘違いだったらすみません)。このままRaspberry PiやRaspberry Pi Picoに接続しても面白いのですが、今回は手軽にパソコンに接続することにします。

「通信ケーブル」を用意します。
SPIKE用コネクタとUSBシリアル変換モジュールをジャンパーワイヤーで接続します。筆者の場合は秋月電子通商で売っている「FT-232RQ USBシリアル変換モジュール」を使いました。この製品はディップスイッチが付いていて、I/Oの電圧を3.3V/5Vで選択することができます。5Vだと回路を壊すかもしれないので、3.3Vに設定しましょう。

◆ ポートFの送信・受信実験

ラージハブ側で1バイト(文字コード)を受信して、それをライトマトリクスに表示するというプログラムです。
シリアル通信を行うにはserial_opn_por関数とserial_wri_dat関数を使う、ということまでは理解していたのですが、それ以上の資料がなくて、しばらく手詰まりとなっていました。
そこで、気が付いたのは次の資料です。
https://dev.toppers.jp/svn_user/contrib/asp_ewarm/asp-1.7.0/doc/user.txt
SPIKE-RTはToppersプロジェクトから派生していますので、Toppersの資料なら互換性があるはずです。資料によると、serial_rea_dat関数を使うとシリアル通信で受信が可能とのことです。ただし、この関数は落とし穴があって、指定したバイト数の受信が完了しないと、処理を抜け出せずに止まってしまいます。
処理が止まらないようにするためには、serial_ref_por関数を使います。これで受信バッファを監視します。バッファに受信データが貯まっている時だけserial_rea_dat関数を呼び出すようにします。

ラージハブとパソコンを通信ケーブルで接続します。 接続するのはポートFです。パソコン側はターミナルソフト(TeraTermなど)を実行します。ボーレートは115200bpsに設定しておきましょう。
ビルド後、出来上がったファームウェアをラージハブに書き込みます。書き込みが完了すると、ラージハブがリセットされて、コピーライト表記のテキストがターミナルソフトに表示されます。
筆者が確認したところだと、これはファームウェアの書き込み時にだけ起こる現象です。ラージハブの電源をオフにして、それからオンにすると、文字化けして、コピーライト表記をうまく送信できません。送信のタイミングが早すぎて回路が正常に動作していないのではないでしょうか。

ターミナルソフトを実行した状態でキーボードのキーを押すと、そのキーがラージハブに表示されます。例えば「a」キーを押すと、ライトマトリクスに「a」と表示されます。そして、エコーバック機能でラージハブから同じデータが送信されて、ターミナルソフトにも「a」と表示されます。

◆ エコーバック機能を禁止する

入力したデータをすぐに確認したいという場合、エコーバック機能は便利かもしれません。 しかし、相互に通信をしたいという場合だとエコーバック機能は邪魔になってしまいます。エコーバック機能をオフにしたい場合にはserial_ctl_por関数を使います。 関数の第二引数を0にするだけです。

以上の技術を活用すると、マイコンとラージハブを接続して通信することも可能となると思います。

プログラムを実行中の様子

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