KOMAINO の LED MATRIX を制御する。

#はじめに

　最近、KOMAINO というマイコンボードを入手して、いろいろ触ってみようとしましたが、あまり情報がなかったので、試した結果を記述します。
因みに、本家のページも閉鎖中でした。

#具体的に

##１．ローカル接続

　Windows10 上で稼働する Arduino IDE と接続するため、ピンをワイヤーでボードの外へ引き出しました。
使用したUSBTTL は、5Vで稼働するものでしたので、レベルコンバータを使用しました。

　　１）RST：プッシュボタンで、GNDへ短絡できるようにする。
　　２）TP1：プッシュボタンで、GNDへ短絡できるようにする。
　　３）TP3：レベルコンバータ経由で、USBTTL の TXD へ接続する。
　　４）TP2：レベルコンバータ経由で、USBTTL の RXD へ接続する。
　　５）電池ボックスの赤：USBTTL 5V へ結線する。同時にレベルコンバータの HV へ接続する。
　　６）電池ボックスの黒：USBTTL GND へ結線する。同時にレベルコンバータの GND へ接続する。
　　７）レギュレータの VOUT（2ピン）をレベルコンバータの LV へ接続する。
　　
　これで、Arduino IDE で、「Generic ESP8266 Module」を選択して、マイコンボードに書き込むことができます。（ESP8266の環境をインストールしておく必要がある）
　ただし、実際に書き込むタイミングで、TP1 を押しながら RST を押し離し、書き込みが終了するまで、TP1 を押しっぱなしにする必要がありました。

##２．LED MATRIX

　LED は、L16A という I2C I/O expander で行います。
　Port0 と Port1 の下位5ビットが、LED MATRIX の列と行に対応しています。
　LED MATRIC の左上を （C0, R0）とすると

```
　	(C0, R0) (C1, R0) (C2, R0) (C3, R0) (C4, R0)
　	(C0, R1) (C1, R1) (C2, R1) (C3, R1) (C4, R1)
　	(C0, R2) (C1, R2) (C2, R2) (C3, R2) (C4, R2)
　	(C0, R3) (C1, R3) (C2, R3) (C3, R3) (C4, R3)
　	(C0, R4) (C1, R4) (C2, R4) (C3, R4) (C4, R4)
```

　となり、それぞれがPort0, Port1 のビットに対応しています。
　
　　	Port0: xx xx xx C4 C3 C2 C1 C0
　　	Port1: xx xx xx R4 R3 R2 R1 R0
	
　Cx を 1 にし、Rx を 0 にすれば点燈します。例えば、（C0, R1）を 点燈するには、Port0:00000001、Port1:00011101 とします。

　なお電源オン後は、Port0、Port1 の全ビットが Input mode になっているので、該当するビットを Output mode にする必要があります。
　
　参考までに、テストで使用したスケッチを掲載します。

```
//=================================================
//      COMAINO LED test
//-------------------------------------------------

#include <Wire.h>

//-------------------------------------------------
#define I2C_ADDR 0x20

#define OutputPort0     0x02
#define OutputPort1     0x03
#define ConfigPort0     0x06
#define ConfigPort1     0x07

#define LED_COL_0       B00000001
#define LED_COL_1       B00000010
#define LED_COL_2       B00000100
#define LED_COL_3       B00001000
#define LED_COL_4       B00010000

#define LED_ROW_0       B00000001
#define LED_ROW_1       B00000010
#define LED_ROW_2       B00000100
#define LED_ROW_3       B00001000
#define LED_ROW_4       B00010000

//-------------------------------------------------
uint8_t led_pattern[] = {
  B00000000, B00011111,
  B00000001, B00011110,
  B00000010, B00011101,
  B00000100, B00011011,
  B00001000, B00010111,
  B00010000, B00001111,
  B00010000, B00010111,
  B00010000, B00011011,
  B00010000, B00011101,
  B00010000, B00011110,
  B00010001, B00001110,
  B00001010, B00010101,
  B00001110, B00010001,
  B00011111, B00000000,
};

//-------------------------------------------------
void setup() {
  Serial.begin(9600);
  Serial.println("start LED test");

  Wire.begin(4, 5);   // (SDA：IO4, SCL：IO5)

  // L16A 初期化
  writeI2C(ConfigPort0, B11100000);         // LED ピンを Output に設定する。
  writeI2C(ConfigPort1, B11100000);
}

//-------------------------------------------------
void loop() {
  static  int16_t inx = 0;

  writeI2C(OutputPort0, led_pattern[inx++]);
  writeI2C(OutputPort1, led_pattern[inx++]);
  if (inx > sizeof(led_pattern) - 1)
    inx = 0;  

  delay (1000);
}

//-------------------------------------------------
void writeI2C(uint8_t reg, uint8_t value) {
  uint16_t  r;
 
  Serial.print  (reg, HEX);
  Serial.print  (" ");
  Serial.println(value, HEX);
  
  Wire.beginTransmission(I2C_ADDR);
  Wire.write(reg);
  Wire.write(value);
  Wire.endTransmission();
}
```