IMG_5095


MONOXIT の無線ロボット MI100 のファームウェアを書き換えて、内蔵LED を点灯させてライントレースができるようになりました。
→・無線ロボット MI100改 でライントレースをやってみた(決定版?)

その時の書き換え手順をメモしておきます。


※ファームウェアの書き換えには、ここで述べた有線でつなぐ方法の他に、無線(Bluetooth)を使った書き換え方もあるそうです(後述)。

●書き込み機器の準備
MI100 のファームウェアの書き換えには、書き込み機器が必要です。
PC −(USB)− AVRライタ−(ジャンパワイヤ)− MI100
という風に接続します。

1.書き込み機器の準備
MI100 にファームウェアを書き込む AVRライタ AVRISP mkII を用意します。

→・秋月電子通商
→・Amazon


2.ジャンパワイヤの準備
AVRライタと MI100 を接続するにはジャンパワイヤ(オス−オス)を用意します。
(いわゆる普通のジャンパ線のことです。)

→・秋月電子通商
→・Amazon


3.AVRライタと MI100 の接続
AVRライタ AVRISPmkII のコネクタ配置は、以下のようになっています。
(赤ラインを左上にしてコネクタを見る)
2 VCC  | MISO 1
4 MOSI | SCK  3
6 GND  | RST  5

→・Amtel ユーザーガイド
→・AVRISP mkIIでArduinoのスケッチを書き込む - なんでも独り言
 

一方、MI100 の接続は光センサーを挿している横一列の6つのコネクタです。
(Bluetoothモジュールの隣、電源スイッチの向かい側)

MI100 のコネクタ配置は、以下のようになっています。
(Bluetoothモジュールを左にしてコネクタを見る)
(基盤にも小さく書いてあります)
 1 RST | 2 VT (VCC)  | 3 GND | 4 MOSI | 5 MISO | 6 SCK

→・MI100 回路図 - MONOXIT


一旦、光センサーを取り外し、それぞれ同じ名前のコネクタ同士をジャンパワイヤでつないでいきます。
これからファームウェアを書き込む度にジャンパワイヤを抜き差しするので、MI100側のジャンパワイヤをコネクタ順にまとめてテープで留めておいても良いでしょう。


 
●ソフトウェアの準備
MI100 のファームウェアは、基本的には Arduino のソフト開発と同じ手順でできるように作られています。つまり、MI100 のファームウェアの書き換えは、Arduino のプログラミングそのものということになります。

(公式情報)
→・monoxit/MI100firmware - GitHub
→・monoxit/monoxit-hardspec - GitHub
 (日本語
→・monoxit/tsb1634 - GitHub
 (日本語

1.Arduino IDE のインストール
Arduino のダウンロードページから、Arduino IDE をダウンロードします。
MI100 の開発には 1.5.7 以上の必要があるので、最新の 1.5.8 BETA を選びます。

Windows、Mac、Linux 用のプログラムが用意されているので、自分の環境に合わせてダウンロードしてください。
自分の場合(OS X 10.10 Yosemite)は、Mac OS X: ZIP file for Java 7 を選んでみました。


2.a)Java のインストール(Mac のみ)
Mac版の Aruduino IDE を動かすには Java が必要です。
OS X 10.10 Yosemite の場合、Java が入っていないので、Java もインストールする必要があります。

ここでも、あえて最新の Java 8 をインストールしてみました。
ターミナルで;
$ java -v
と入力すると、
「No Java runtime present, requesting install.」と表示されて、さらにポップアップパネルが出て Java のインストールを促されますので、そのまま「詳しい情報…」をクリックすると、Oracle のページに移ります。

最新の Java 8 SE 8u25 の内、プログラム実行だけでよいので JRE(Java SE Runtime Environment)をクリックします。

ライセンスに同意する「Accept License Agreement」にチェックを入れて、Mac OS X x64 の dmg イメージをクリックすれば、あとは普通の手順でインストールされます。

Java の設定については、「システム環境設定」の中に「Java」の項目ができるので、そちらで行います。

なお、JRE のインストールをした後も、
ターミナルで;
$ java -v
と入力すると、
「No Java runtime present, requesting install.」と表示されて、さっきと同じポップアップパネルが出るのですが、Arduino IDE の起動には支障がないので無視しています。
(参考;
→・OS X Yosemite に JRE を入れてもまだ "No Java runtime present, requesting install." と出る  )


2.b)libusb-win32 のインストール(Windows のみ)
Windows で AVRISP mkII を使うのに必要です。
libusb-win32 プロジェクトのページからダウンロードします。インストール方法は以下を参考にしてください。
→・AVRISP mkIIでArduinoのスケッチを書き込む - なんでも独り言
→・Arduino IDEでATtiny他の開発(AVRISP編) - kosakalab


3.Arduino IDE のプログラム保存場所の設定
Arduino IDE を起動して、「Preferences」>「スケッチブックの保管場所」で、これから作るファームウェアプログラムを保存するフォルダを設定します。
(スケッチブックというのが、いわゆるプログラムファイルのことです。)


4.monoxit-hardspec のダウンロード
Arduino IDE で MI100 の開発ができるように、monoxit-hardspec をダウンロードします。
monoxit/monoxit-hardspec - GitHub のページに行き、右下の「Download ZIP」をクリックします。
ダウンロードした  ZIPファイルをダブルクリックで展開します。

できた monoxit-hardspec-masterフォルダ内の monoxitフォルダを、先ほどの「スケッチブックの保管場所」の hardwareフォルダ下にコピーします。hardwareフォルダがないときは作成します。

※ monoxit/monoxit-hardspec - GitHub を読むと、さらに;
手動配置
2. Bluetooth接続用に変更したTinySafeBootソフトウェア (https://github.com/monoxit/tsb1634) を monoxit\tiny\tools\tsb に配置します。 
という記述があるのですが、行っていません。
試しに、これ無しでファームウェアの書き換えを行なったところ、ちゃんと書き込まれているようです。

monoxit/MI100firmware - GitHub で;
Write the sketch
2. (First time only) From Arduino IDE, write bootloader. It actually writes fuse bits. The bootloader is not written. emply_all.hex defined as a bootloader in boards.txt does nothing.
という記述があって、まっさらな MI100に最初に書き込む時に TinySafeBootソフトウェアが必要といっていると自己流に解釈し、すでにファームウェアが書き込まれている MI100 では無くても書き換え可能なのではないか?と推測しています。
(TinySafeBootソフトウェアを作成するのはかなり大変そうなので、できれば避けたいし...


5.MI100ファームウェアのダウンロード
monoxit/MI100firmware - GitHub のページに行き、右下の「Download ZIP」をクリックします。
ダウンロードした  ZIPファイルをダブルクリックで展開します。

できた MI100firmware-masterフォルダ内の MI100firmware.ino を「スケッチブック保管場所」下に MI100firmwareフォルダを作成し、その下に入れます。


6.Arduino IDE の書き込み設定
まず、「ツール」>「ボード」で「ATTiny1634 @ 8MHz」を選びます。

次に、「ツー ル」>「書込装置」で AVRライタ AVRISPmkII を選びます。
ここで、私の環境ではなぜか全く同じ項目が2つずつ表示されてしまいました。「AVRISPmkII」という項目も 2つ表示されるのですが、上の方でないと書き込めませんでした。もし、書き込みがうまくいかない場合は、ここで別の「AVRISPmkII」を選択すると良いかもしれません。


7.ファームウェアの書き換え
Arduino IDE を起動し、「ファイル」>「開く…」で書き換えたい MI100firmware.ino を選びます。

あとは自由に書き換えて、保存します。Arduino のプログラムは基本的には C言語です。

(参考)
→・無線ロボット MI100改 のファームウェアでライントレースをやってみた


8.ファームウェアの書き込み
いよいよ修正したプログラムを MI100に書き込みます。

PC の USBポートに AVRISPmkII をつなぎ、AVRISPmkII のジャンパワイヤを MI100 のコネクタにつなぎます。
このとき、一旦 MI100の光センサを取り外して、そのコネクタにジャンパワイヤを挿さないとつなげられません。

ファームウェアを書き込む前に MI100 の電源を入れます。
そうすると、AVRISPmkII の LED(外側の大きい方) が赤から緑に変わります。
(よく電源を入れ忘れて書き込みエラーになりました。

「ファイル」>「書込装置を 使って書き込む」で、自動でコンパイル→リンク→書き込みをしてくれます。
書き込み中は、AVRISPmkII の外側の LED が緑からオレンジに変わり、内側の緑の LED が点滅します。

エラーがあるときは Arduino IDE の下のウィンドウに出ます。なぜか、毎回
avrdude: stk500v2_recv_mk2: error in USB receive 
という警告が出るのですが、特に問題なく書き込めています。


9.ファームウェアの実行
AVRライタ AVRISPmkII のジャンパワイヤを抜いて、光センサを挿し直します。MI100 の電源を切って、入れ直します。

これで、新しいファームウェアが実行されているはずです。



※ 無線(Bluetooth)でファームウェアを書き換える方法について;
→・ブートローダーの搭載予定について - MONOXIT

monoxit/monoxit-hardspec - GitHub
手動配置
3. (必要に応じて) Attiny1634用に変更したTinySafeBoot (https://github.com/monoxit/tsb1634) を monoxit\tiny\bootloader\tsb に配置します。
Attiny 1634 シリアル ブート ローダー
Attiny1634対応 Bluetooth接続対応

これを読むと、なんとなく tsb1634 の TinySafeBoot を作って、Arduino IDE の指定されたフォルダにおいて、書き込む時に「ツール」>「ブートローダーを書き込む」を選ぶのかな、という風に思いましたが、実際にやったわけではないのであくまでも想像です。
 
MI100 に無線対応のブートローダーを搭載することで、ブートローダーによってファームウェアを書き換えられるようになるようです。

とはいえ、このブートローダーを搭載するには、一度は有線でつないで MI100内のプログラムを書き換えなくてはいけません。

また、ブートローダーを搭載すると、電源を入れると最初にブートローダープログラムが起動するようになり、その後ファームウェアプログラムが起動する形になります。そのため、電源を入れてから毎回ブートローダーが起動している約 6秒間を待たなくいけなくなるそうです。という訳で、作者の方に聞くとあまりお勧めはしないとのことです。


⚪︎関連記事;