2025年12月26日
024-2.SPIKE-RT入門 第1回目 「C言語の標準ライブラリを使ってみる」
この記事では「レゴ エデュケーションSPIKEプライム(以下、SPIKE)」で動作する「SPIKE-RT」の使い方を紹介します。
ここではアフレルが販売している教材「レゴ エデュケーションSPIKEプライム C言語プログラミングブック」で配布しているSPIKE-RTの開発環境を使っています。同製品の紹介ページは次の通りです。
https://afrel.co.jp/product/spike/c-language/
(文/松原拓也)
◆ 開発環境を準備する
Afrel Techブログでは2025年2月にSPIKE-RTを紹介しました。
https://afrel.co.jp/techblog/spike/024-1/
この記事ではラージハブのポートにラズベリーパイPicoを接続したりと、マニアックな内容でした。今回は仕切り直して、第1回目からのスタートとなります。
SPIKE-RTの主な特徴は「リアルタイムOS」であることです。リアルタイムOSなので、厳密に時間を管理した制御を行うことができます。SPIKE-RT自体は無償で入手することができます。SPIKE-RTの開発環境の対応OSはUbuntu(Linux)です。Windows搭載パソコンの場合、WSL(Windows Subsystem for Linux)という機能を使うと、Ubuntuを動かすことができます。
SPIKE-RTの開発環境を導入する方法については「C言語プログラミングブック」に書いてあるので、ここでは簡単に紹介します。
最初に「C言語プログラミングブック」に書いてある特設Webページからzipファイルをダウンロードして、展開します。 次にUbuntuを起動したら、「setupC.sh」スクリプトを実行して、ファイルを展開します。さらにDockerコンテナのダウンロードも行います。次に「updateC.sh」スクリプトを実行して、ファイルをアップデートします。この例ではユーザー名を「user」としたので、「home/user」フォルダ(ディレクトリ)の中に次のファイルが格納されます。
・「programs」フォルダ:ユーザーが作成中のプログラム。
・「SpikeDfuWriter」フォルダ:ファームウェアを書き込むためのツール。
・「spike-rt」フォルダ:SPIKE-RTのコンパイラやライブラリ。
・「spike-rt-(日付)」フォルダ:アップデート前のバックアップファイル。このフォルダの中身は使いません。
ビルドを行うには「build.sh」スクリプトを実行します。ビルドに成功すると、ファームウェア(asp.bin)が出来上がります。
ファームウェアを書き込むには、ラージハブのBluetoothボタンを押したまま、パソコンのUSBポートに接続します。Bluetoothボタンを5秒くらい押し続けていると、ファームウェアの書き込みモードになります(LEDがカラフルに点灯する)。接続した時、USBのデバイスドライバが「libusb-win32」である必要があります。デバイスドライバは「Zadig」というツールで変更することができます。
接続したら、「./write.sh」スクリプトを実行します。Dockerを動かしたままだと「not found」エラーが出てしまうので、別の画面でUbuntuを起動してスクリプトを実行します。
一度、SPIKE-RTのファームウェアを書き込むと、純正のファームウェア(ハブOS)は消えるので、以後、SPIKEアプリが使えなくなります。SPIKEアプリを使いたい場合には、「./write.sh spike-3」コマンドを実行して、純正のファームウェアに戻しましょう。
◆ 標準ライブラリを使う実験
time関数の代わりに、get_tim関数を使ってみました。get_tim関数は起動してからのシステム時刻(単位はマイクロ秒)を取得する関数です。これは標準ライブラリではありません。
シリアル通信を行うにはserial_opn_por関数とserial_wri_dat関数を使います。そのままだと未定義のエラーが出てしまうので、「syssvc/serial.h」をインクルードしました。
数値を文字列に変換するのに標準ライブラリのsprintf関数(stdio.h)を使います。文字列から文字数を算出するのに標準ライブラリのstrlen関数(string.h)を使います。
プログラムを実行すると、2秒間隔でライトマトリクスにループ回数を表示します。ループ回数は文字列化してから表示しています。表示している文字はUSBポートに送信します。ターミナルソフトの「Tera Term」で文字列を受信することができます。
time.hはダメでしたが、いくつかの標準ライブラリを使うことができました。まだ未確認のライブラリがたくさんあります。これらをうまくロボット作りに活用してみましょう。
プログラムを実行中の様子
当ブログの内容は、弊社製品の活用に関する参考情報として提供しております。
記載されている情報は、正確性や動作を保証するものではありません。皆さまの創意工夫やアイデアの一助となれば幸いです。






