The jonki

呼ばれて飛び出てじょじょじょじょーんき

【Arduino】ATtiny85をSoftwareSerialを使ってUnityからシリアル通信制御をする

前回の記事でATtiny85をArduinoから開発できる環境が整いました。

ATtiny85はシリアルの口がないのでSerial.println()とか対応していないのだけど、SoftwareSerialを使うことでそれを補えます。つまりシリアル通信は可能です。今回は例としてUnityからシリアル通信でデータを送り、ATtiny85でそれを受け取った際にLEDが光るサンプルを紹介します。


準備

FTDI USBシリアル変換アダプターはデバッグ用途などにも大活躍のシロモノなので、持ってなければこれを機会に買うと良いと思います。

ATtinyにスケッチをアップロード

データを受け取ったら1回点灯するプログラムです。今回はデータの内容自体は読みこむだけで特に何もしません。ちなみに例として'345'という数字を受信した場合、'3'、'4'、'5'という感じで3回受信するため、ループにして全部をreadしています。ATinyにスケッチをアップロードする手順は前回の記事を参考にしてください。

#include <SoftwareSerial.h>

int led = 1;
int d = 100;

SoftwareSerial mySerial(3, 4); // RX, TX
void setup() {                
  // initialize the digital pin as an output.
  pinMode(led, OUTPUT); 
  mySerial.begin(9600);  
}

// the loop routine runs over and over again forever:
void loop() {
  if (mySerial.available()) {
      while(mySerial.available()){
        mySerial.read();
      }
    
    digitalWrite(led, HIGH);
    delay(100);
     digitalWrite(led, LOW);
    delay(50);
  }
}

シリアル送信側(Unity)

以前書いた記事のコードをそのまま使います。通信に使うシリアルポートはArduinoではなく、FTDIのアダプターが付いているポートなので注意。

配線する

こんな感じで簡単です。6ピン(Arduino側からは1番)にLEDを繋ぎ、2、3ピン(Arduino側からは3、4番)をFTDIアダプタ側のTX、RXに繋ぎます。SoftwareSerialでは3、4番はRX、TXとなっているので逆に思うかもしれませんが、FTDIアダプタのTXはATtinyのRXになります。送信側は受信側につなぐので当たり前といえば当たり前ですが、結構間違いやすいです。

動かす

Unityを実行し、データを送信したタイミングでLEDがチカっと光ったら成功です。送信する際はFTDIアダプタのTXのチップLEDが光るはずです。何も反応しない時は落ち着いて手順を再確認してみましょう。
いやー、これで簡単に外部から制御できるようになったので使い勝手がかなり良くなりましたね。