2024年11月7日
002-1.NXT ソフトウェア入門-第5回「ファイルアクセスのプログラム」
レゴマインドストームNXTのプログラム開発環境「NXTソフトウェア」について紹介していくコーナーです。
前回はライントレースロボットのプログラムの紹介でしたが、今回はロボットから離れて、ファイルアクセスブロックという技術について紹介します(文/松原 拓也)。

まず「ファイルアクセス」とは何かについて、予習をしてみましょう。NXTソフトウェアを立ち上げて、「ヘルプ」を読んでみてください。

「ファイルアクセスブロック」を使った最も簡単なプログラムを紹介します。写真のように「ファイルアクセスブロック」を置くだけです。
ブロックは次のように設定します。
動作:「書き込み」
名前:「MyFile」
タイプ:「テキスト」
テキスト:「Robojoy」
[Download]プログラムその1(NXTソフトウェア用)

動作の「書き込み」というのは、ファイルにデータを書き込むという意味です。
イメージを図にすると、このような感じになります。名前の「MyFile」とはファイル名のことです。

NXTインテリジェントブロックをパソコンにつなぎます。写真ではUSBケーブルを使ってますが、ブルートゥース(無線)でもかまいません。
◆ ファイルのアップロード

ここでプログラムを転送、実行させます。
それが終わったら、ファイルがきちんと書き込めたか確認してみます。
画面の「NXTボタン」を押します。

写真の手順で丸の部分をクリックします。
「アップロード」ボタンを押すと、ファイルがパソコン側へ転送されます。
逆に「ダウンロード」ボタンを押すとパソコン側のファイルをインテリジェントブロック側へ転送することができます。

パソコン側でファイルの中身を確認します。メモ帳を使って「MyFile.txt」を開くと、このようになりました。
「robojoy」という言葉が書き込まれています。書き込み成功です。

ここでいう「ファイル」とは何かについて考えてみましょう。
ファイルとはデータを集めた単位のことです。WindowsやMacintoshではファイルはアイコンの形で画面上に表示されてますので、普段からなにげなく目にしているものだと思います。
パソコンの世界でのファイルはハードディスクドライブなどに書き込まれています。しかし、NXTの世界でのファイルはフラッシュロム(FLASH ROM)という半導体に書き込まれます。
さらに細かく言うと、インテリジェントブロック内のフラッシュROMはマイコンの中の一部分に格納されています。このロムの容量は全部で256キロバイト(KB)です。 いまいちピンときませんが、256キロバイトというと、日本語の文字数に換算して256x1024/(1文字2バイト)=13万1072字。400字詰め原稿用紙327枚ぶんに相当します。
なお、インテリジェントブロックのフラッシュロムの容量の半分はブートファームウェアに使ってしまうので、ユーザーが自由に使える容量は半分の128KBだけとなっています。

ファイル書き込みプログラムの発展版です。前回はテキストを
1件した書き込んでいませんでしたが、このプログラムでは、
3回連続でテキストを書き込みます。
[Download]プログラムその2(NXTソフトウェア用)

ファイルは上から順番に書き込まれ、新しいデータは一番下に追記されます。

プログラムを実行後、先ほどと同じ手順で、ファイルを読み取ってみました。
成功すると「1」「2」「3」が書き込まれているはずですが、、、なんと「robojoy」の文字が残っています。どうやら、ファイルを一旦削除しなくてはいけないようです。

テキストの1件あたりの区切りは「改行コード」で行っているようです。改行コードはメモ帳(notepad)では見えないので、Terapadを使って表示させてみました。

前回のプログラムの改良版を作ってみました。
[Download]プログラムその3(NXTソフトウェア用)

プログラムの最初にファイルの削除を追加しました。「削除」とは、ファイルを消すことです。ファイルを消すことによって、まっさらな状態から書き込みが可能となります。

なお、プログラムの最後ではファイルを「閉じる」処理が必要があります。 NXTソフトウェアではファイルを閉じ忘れても実害はありませんが、念のため閉じる処理を行っておきましょう。

いよいよファイル読み込みのプログラムを作ってみました。
テキストを1件ずつ読み込んで、画面に表示させます。テキストは上から順番に表示させます。
[Download]プログラムその4(NXTソフトウェア用)

読み込みというのは、その名のとおりファイルを読み込むための処理です。
書き込みと同じく、読み込みも上から順番に行われます。
データ1件あたりの区切りは改行で行います。

プログラムの実行結果です。きちんと読み込むことができました。
写真では、その2の状態のファイルを読み込んだため「robojoy」の文字が表示されています。

ためしにテキストファイルの中身を書き換えてみました。
書き換え終わったら、ダウンロード(アップロードの逆)を行って
インテリジェントブロックに書き込みます。

プログラムの実行結果です。
見事に表示されました。
これなら、インテリジェントブロックをメモ用紙のような感覚で
使うこともできるのではないでしょうか。
日本語は表示できませんが、、、。
これでファイルの読み書きができるようになりました。
次回は、この技術をロボット作りに活かしてみたいと思います。
当ブログの内容は、弊社製品の活用に関する参考情報として提供しております。
記載されている情報は、正確性や動作を保証するものではありません。皆さまの創意工夫やアイデアの一助となれば幸いです。