PC-<USB>-マイコン(M5 Atom)-マイコン(M5 Atom)-<USB>-PC間のシリアル通信
https://gyazo.com/73569ce429007533c8f0b0cefbee369a
Atom liteにはUSBのシリアル通信以外に端子間でのシリアル通信もできます。どのピンを用いるかは少し注意が必要です。
「こんなことする必要ある?変態なのかな?」と思わなくもないですが、センサやLED照明などの周辺機器を動かしつつ複数のPCを有線で連携させたいときなどには選択肢の一つになるかもしれません。無線に頼らないので出展に強い。
Groveコネクタをつないだサンプルを載せておきます。送信側Atom liteと受信側Atom liteでTx、Rxのピン設定がテレコになるので注意してください。
送信側Atom lite
code: M5Atom_S2S_Send.ino
//配色バッファ設定関数
void setBuff(uint8_t Rdata, uint8_t Gdata, uint8_t Bdata)
{
for (int i = 0; i < 25; i++)
{
}
}
void setup()
{
M5.begin(true, true, true); // 初期化
Serial.begin(115200); //USBシリアル初期化
Serial2.begin(9600, SERIAL_8O1, 26, 32); //Groveコネクタを9600bps, Rx:23, Tx:32で設定
delay(10); //10msec 待機
setBuff(0xff, 0x00, 0x00); //配色バッファ初期化
M5.dis.displaybuff(DisBuff); //AtomLED初期化
}
char ch = 0; //シリアル通信用変数(1文字)
void loop()
{
if(Serial.available()) {
ch = Serial.read();
Serial2.print(ch);
}
switch (ch)
{
case '0':
setBuff(0x40, 0x00, 0x00);
break;
case '1':
setBuff(0x00, 0x40, 0x00);
break;
case '2':
setBuff(0x00, 0x00, 0x40);
break;
case '3':
setBuff(0x20, 0x20, 0x20);
break;
default:
break;
}
M5.dis.displaybuff(DisBuff);
if (M5.Btn.wasPressed())
{
Serial2.println("0");
}
delay(50);
M5.update();
}
受信側
code: M5Atom_S2S_Receive.ino
//配色バッファ設定関数
void setBuff(uint8_t Rdata, uint8_t Gdata, uint8_t Bdata)
{
for (int i = 0; i < 25; i++)
{
}
}
void setup()
{
M5.begin(true, true, true); // 初期化
Serial.begin(115200); //USBシリアル初期化
Serial2.begin(9600, SERIAL_8O1, 32, 26); //Groveコネクタを9600bps, Rx:32, Tx:23で設定
delay(10); //10msec 待機
setBuff(0xff, 0x00, 0x00); //配色バッファ初期化
M5.dis.displaybuff(DisBuff); //AtomLED初期化
}
char ch = 0; //シリアル通信用変数(1文字)
void loop()
{
if(Serial2.available()) {
ch = Serial2.read();
Serial.print(ch);
}
switch (ch)
{
case '0':
setBuff(0x40, 0x00, 0x00);
break;
case '1':
setBuff(0x00, 0x40, 0x00);
break;
case '2':
setBuff(0x00, 0x00, 0x40);
break;
case '3':
setBuff(0x20, 0x20, 0x20);
break;
default:
break;
}
M5.dis.displaybuff(DisBuff);
if (M5.Btn.wasPressed())
{
Serial2.println("a");
}
delay(50);
M5.update();
}
参考になるサイト