#はじめに
最近、KOMAINO というマイコンボードを入手して、いろいろ触ってみようとしましたが、あまり情報がなかったので、試した結果を記述します。
因みに、本家のページも閉鎖中でした。
#具体的に
##1.ローカル接続
Windows10 上で稼働する Arduino IDE と接続するため、ピンをワイヤーでボードの外へ引き出しました。
使用したUSBTTL は、5Vで稼働するものでしたので、レベルコンバータを使用しました。
1)RST:プッシュボタンで、GNDへ短絡できるようにする。
2)TP1:プッシュボタンで、GNDへ短絡できるようにする。
3)TP3:レベルコンバータ経由で、USBTTL の TXD へ接続する。
4)TP2:レベルコンバータ経由で、USBTTL の RXD へ接続する。
5)電池ボックスの赤:USBTTL 5V へ結線する。同時にレベルコンバータの HV へ接続する。
6)電池ボックスの黒:USBTTL GND へ結線する。同時にレベルコンバータの GND へ接続する。
7)レギュレータの VOUT(2ピン)をレベルコンバータの LV へ接続する。
これで、Arduino IDE で、「Generic ESP8266 Module」を選択して、マイコンボードに書き込むことができます。(ESP8266の環境をインストールしておく必要がある)
ただし、実際に書き込むタイミングで、TP1 を押しながら RST を押し離し、書き込みが終了するまで、TP1 を押しっぱなしにする必要がありました。
##2.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();
}