キャタピラ車の記事で使っているWeMos Motor Shieldは、TB6612という2チャンネルのモータードライバをI2Cインターフェースで使えるようにした便利なボードです。
I2Cインターフェースの利点
秋月電子さんのTB6612をブレッドボードで使えるようにしたキットの説明書を見ると分かるのですが、TB6612でモーター2つをコントロールするにはGPIOを7つも使います。ESP8266にはGPIOが9つあるのでTB6612を1個使うと残りが2つしかなくなってしまいます。しかし、I2Cインターフェースを使うとSCLとSDA用にGPIOを2つしか使う必要がなく、しかもSCLとSDAは共有できるでの他のI2C対応ボードを使用してもGPIOを消費しなくなります。
Motor Shieldの欠陥
良いことづくめのように見えるWeMos Motor Shieldですが、かなり残念な欠陥があります。TB6612をI2C対応させるコントローラー"STM32F030"のメーカー製ファームウェアの動作がショボイんです。一応、動作はするんですが、スタンバイの状態でもグズグズ動いたりします。どうしてこうなった!
救世主はいた
しかし、世界は広いものです。この欠陥を自力で修復したプロジェクトが存在していました。
基本的には、この記事を見ながら手順に従って操作を行えばファームウェアを書き換えることができるんですが、記事が英語であることや書き換えるために必要な機器とプログラムについてあまり説明がないために、ちょっとハードルが高めでした。
Motor Shieldのファームウェアの更新の仕方
使ったもの(ハードウェア)
- WeMos Motor Shield
- WeMos D1 mini ※3.3V電源として使用
- 超小型USBシリアル変換モジュール 秋月電子 税込600円
- ブレッドボード BB-801 秋月電子 税込200円
- ジャンパーワイヤ(オスーメス)5本
- ジャンパーワイヤ(オスーオス)3本
- USBケーブル AオスーマイクロBオス 2本
配線
・WeMos Motor Shield
G → -電源
RTS → +電源
3V → +電源
R → TxD (超小型USBシリアル変換モジュール)
T → RxD (超小型USBシリアル変換モジュール)
DTR → (接続なし)
・超小型USBシリアル変換モジュール
+5V → (接続なし)
GND → -電源
TxD → R (WeMos Motor Shield)
RxD → T (WeMos Motor Shield)
・WeMos D1 mini
3V3 → +電源
GND → -電源
ファームウェア更新プログラム「stm32flash」の入手
以下のサイトからプログラムのソースコードが入手できます。(緑のDownloadボタンを押す)
URL:https://sourceforge.net/projects/stm32flash/
64bit版のWindows用にだけ「stm32flash-05.win64.zip」というバイナリが用意されていますが、Windowsではシリアルポートの指定の仕方がUNIX系のOSと異なるため注意が必要です。
ここではRaspberry Piを使って説明していきます。
アーカイブファイルの展開
ブラウザでファイルをダウンロードすると「Downloads」フォルダにファイルが保存されます。ファイルマネージャーでダウンロードした「stm32flash-0.5.tar.gz」を右クリックして、「ここでファイルを展開」を選びます。
実行ファイルの作成とインストール
ターミナルを実行して、ファイルを展開したディレクトリに移ります。
make
を実行すると、コンパイルが始まって実行ファイルが作成されます。
実行ファイルができたらsudo make install
を実行して、実行ファイルをインストールします。
ファームウェアのダウンロード
「Motor Shield Reprogramming」のサイトの比較的上の方にあるDownloadリンクをクリックして、新しいファームウェアをダウンロードします。
更新プログラムの実行(接続確認)
Rapsberry Piと超小型USBシリアル変換モジュールを通信のできるUSBケーブルで繋ぎます。次にWeMos D1 miniを充電用のUSBケーブルでRaspberry Piに繋ぐか、他のUSB源に繋ぎます。
ターミナルでDownloadsフォルダに移動して、以下のコマンドを実行します。
stm32flash /dev/ttyUSB0
上のように表示されればOKです。
更新プログラムの実行(ロックの解除)
コントローラーのロックを解除するコマンドを2つ実行します。
stm32flash /dev/ttyUSB0 -k
stm32flash /dev/ttyUSB0 -u
更新プログラムの実行(ファームウェアの書き込み)
最後に以下のコマンドを実行してファームウェアを書き換えます。
stm32flash /dev/ttyUSB0 -v -w motor_shield.bin
100%と表示されたら書き込みは終了です!
USBケーブルやジャンパーワイヤを外して、生まれ変わったMotor Shieldを使ってみてください。
おわり