・I2C Wemos D1 mini Motor Shield 使かってみた

・ESP32 (M5Stack) で 安価な I2C モータードライバ を使ってみました。
 *Wemos D1 mini Motor Shield (i2c interface, TB6612 based) 


msr1


1.安価なのは良いのですが、そのままではM5STACKで認識しない事がわかりました。
 よって、Motor Shieldのファームウェアの再プログラミングが、必要な事が分かりました。

 次からの説明は、Windows10 x64で実行した物です。

2.最初に下記より書き込みツールをダウンロードします。
 STシリアルブートローダーを使用したSTM32用のオープンソースフラッシュプログラム
 (stm32flash.exe)

3.次にバイナリファイルを下記よりダウンロードします。
 *書き換えにより、アドレス設定用のランドは、無効となります。
 標準のものは、I2Cアドレスが、「0x30」に固定の為、複数枚使う場合は、アドレスごと(アドレス0x2d、0x2e、0x2f、0x30)にコンパイルされたファームウェアが、必要です。
 下記は、4つの異なるアドレスのファームウェアファイルを含んだzipファイルです。
https://github.com/pbugalski/wemos_motor_shield/files/1434679/motor_shield_XX_bin.zip

4.2,3のファイルを同じフォルダに解凍、展開しておきます。

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2019/12/19  10:26             3,116 motor_shield.bin
2017/11/02  00:39             3,104 motor_shield_2D.bin
2017/11/02  00:39             3,104 motor_shield_2E.bin
2017/11/02  00:39             3,104 motor_shield_2F.bin
2017/11/02  00:39             3,104 motor_shield_30.bin
2016/02/11  23:44               280 README.txt
2016/02/11  22:04            13,265 stm32flash-manual.pdf
2016/02/10  17:14           252,776 stm32flash.exe
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

5.Motor Shield に書き込むための前準備をします。
 ① Wemos D1 Miniを使う場合

 ①-1  空のスケッチをD1 Miniにアップロードします。これにより、シリアルデータがUSBポートからMotor Shield に、D1 Miniを経由して渡されます。

空のスケッチ:
//------------------------------------------------------------------------
void setup() {
  // put your setup code here, to run once:
}

void loop() {
  // put your main code here, to run repeatedly:
}
//------------------------------------------------------------------------

 ①-2 D1 Miniとの結線
 *下記の写真のように結線します。
 *Motor Shield を書き込みモードにするためにRTSは、3vに結線します。

S__43188227


 ② USB-SERIALインターフェースを使う場合
 
 *下記の写真のように結線します。
 *Motor Shield を書き込みモードにするためにRTSは、3vに結線します。

S__43196430


参考:Motor Shield Rev.1.0.0 回路図
motorshieldRev1

 
 ③次のコマンドを実行します。
  重要:COM6を自分のCOMポート番号に置き換えて下さい。 
  *COMポートをデバイスマネージャにて確認


1>C:\motorshield\stm32flash-0.5-win64>stm32flash.exe COM6
*ボードを認識しているか確認します。
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
stm32flash 0.5

http://stm32flash.sourceforge.net/

Interface serial_w32: 57600 8E1
Version      : 0x31
Option 1     : 0x00
Option 2     : 0x00
Device ID    : 0x0444 (STM32F03xx4/6)
- RAM        : 4KiB  (2048b reserved by bootloader)
- Flash      : 32KiB (size first sector: 4x1024)
- Option RAM : 16b
- System RAM : 3KiB
-------------------------------------------------------------------------------------

2>C:\motorshield\stm32flash-0.5-win64>stm32flash.exe -k COM6
*これにより、シールドのロックが解除されます。
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
stm32flash 0.5

http://stm32flash.sourceforge.net/

Interface serial_w32: 57600 8E1
Version      : 0x31
Option 1     : 0x00
Option 2     : 0x00
Device ID    : 0x0444 (STM32F03xx4/6)
- RAM        : 4KiB  (2048b reserved by bootloader)
- Flash      : 32KiB (size first sector: 4x1024)
- Option RAM : 16b
- System RAM : 3KiB
Read-UnProtecting flash
Done.
-------------------------------------------------------------------------------------

3>C:\motorshield\stm32flash-0.5-win64>dir
*ファイル名の確認
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 ドライブ C のボリューム ラベルは S3SDD00-960 です
 ボリューム シリアル番号は 44C7-1584 です

 C:\motorshield\stm32flash-0.5-win64 のディレクトリ

2020/01/04  13:17    <DIR>          .
2020/01/04  13:17    <DIR>          ..
2019/12/19  10:26             3,116 motor_shield.bin
2017/11/02  00:39             3,104 motor_shield_2D.bin
2017/11/02  00:39             3,104 motor_shield_2E.bin
2017/11/02  00:39             3,104 motor_shield_2F.bin
2017/11/02  00:39             3,104 motor_shield_30.bin
2016/02/11  23:44               280 README.txt
2016/02/11  22:04            13,265 stm32flash-manual.pdf
2016/02/10  17:14           252,776 stm32flash.exe
2020/01/04  13:17                56 wemos_motor_shield.txt
               9 個のファイル             281,909 バイト
               2 個のディレクトリ  492,288,159,744 バイトの空き領域
-------------------------------------------------------------------------------------

4>C:\motorshield\stm32flash-0.5-win64>stm32flash.exe -f -v -w motor_shield_2F.bin COM6
*ここで希望のI2cアドレスのファイルを、書き込みます(例では「0x2F」)。
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
stm32flash 0.5

http://stm32flash.sourceforge.net/

Using Parser : Raw BINARY
Interface serial_w32: 57600 8E1
Version      : 0x31
Option 1     : 0x00
Option 2     : 0x00
Device ID    : 0x0444 (STM32F03xx4/6)
- RAM        : 4KiB  (2048b reserved by bootloader)
- Flash      : 32KiB (size first sector: 4x1024)
- Option RAM : 16b
- System RAM : 3KiB
Write to memory
Erasing memory
Wrote and verified address 0x08000c20 (100.00%) Done.
-------------------------------------------------------------------------------------


6.書き込みが終わったら、配線をM5Stackに繋ぎ変え、I2Cで認識するか確認します。

*「0x2F」「0x30」として、認識しています。

S__43188229

確認用のスケッチ:
//------------------------------------------------------------------------

#include <M5Stack.h>

void setup() 
{
  M5.Lcd.begin();
  M5.Lcd.setRotation(1);
  M5.Lcd.fillScreen( BLACK );
  M5.Lcd.setCursor(0, 0);
  M5.Lcd.setTextColor(YELLOW);  
  M5.Lcd.setTextSize(3);

  M5.Lcd.fillScreen( BLACK );
  M5.Lcd.setCursor(0, 0);
  M5.Lcd.println("M5Stack I2C Tester");
    
  Wire.begin();

  delay(3000);
  M5.Lcd.fillScreen( BLACK );
}

int textColor=YELLOW;

void loop() 
{
  int address;
  int error;
  M5.Lcd.setCursor(0, 0);
  M5.Lcd.println("scanning Address [HEX]");
  
  for(address = 1; address < 127; address++ ) 
  {
    Wire.beginTransmission(address);
    error = Wire.endTransmission();
    if(error==0)
    {
      M5.Lcd.print(address,HEX);M5.Lcd.print(" ");
    }
    else M5.Lcd.print(".");

    delay(10);
  }

  if(textColor==YELLOW) textColor=GREEN;
  else textColor=YELLOW;
  M5.Lcd.setTextColor(textColor,BLACK);
  delay(5000);  
}
//------------------------------------------------------------------------

 
7.ライブラリは、下記よりダウンロードします。
 Wemos D1ミニモーターシールド(i2cインターフェイス、TB6612ベース)用のArduinoライブラリ。

参考URL:モーターシールドの再プログラミング