ATtiny85のシリアル通信をArduino経由でシリアルモニタに表示する方法

こんにちは、くのへ@MasazaneKunoheです。

ATtiny85でシリアル通信を使う方法をこの記事で解説し、FT234XというUSBシリアル変換モジュールを使って、シリアル通信を行いました。

実はArduino本体をUSBシリアル変換モジュールとして使うこともできます。
この記事ではATtiny85のシリアル通信信号をArduinoを介してシリアルモニタに表示する方法を紹介します。

紹介する内容

ATtiny85のシリアル通信信号をArduinoを介してシリアルモニタに表示する方法を解説します。

やり方(概要)

次の手順で解説します。一番のミソは②です。

①ATtiny85にシリアル通信のコードを書き込みます
②Arduinoに空のスケッチ(BareMinimum)を書き込みます
③Arduinoの0ピン、1ピンにATtiny85のRX、TXに指定したピンを接続します
④シリアルモニタを確認します

詳細

①ATtiny85にシリアル通信のコードを書き込みます

シリアル通信を使うコードをATtiny85に書き込んでください。
シリアル通信を使うコードであれば、なんでもOKです。

この記事ではこのリンク先の記事で紹介した「Rと言う文字をシリアル通信で受信したらLEDがオンオフする」という次のスケッチをATtiny85に書き込むこととします。

#include <SoftwareSerial.h>
 
#define RX_PIN 4   // PB4ピン(3番ピン)USB-シリアル変換モジュールのTXに
#define TX_PIN 3   // PB3ピン(2番ピン)USB-シリアル変換モジュールのRXに
 
SoftwareSerial mySerial(RX_PIN, TX_PIN);    // RX,TXの割り当て

#define LED_PIN 1  // PB1ピン(6番ピン)LEDに接続

void setup() {
  // SoftwareSerialの初期化
  mySerial.begin(9600);
  mySerial.println("ATtiny Ready");

  //LEDピンの初期化
  pinMode(LED_PIN,OUTPUT);
  digitalWrite(LED_PIN,LOW);
}

void loop() {
  // 受信バッファ内にデータがあるかどうかを確認する
  if (mySerial.available()) {
    // 受信したデータを読み取る
    char data = mySerial.read();
    
    // 受信したデータをシリアルモニタに表示する
    mySerial.print("Received: ");
    mySerial.println(data);

    //アスキーコードを文字に変換
    String str = String(data);

    //文字がR(Red)だったらLEDをON/OFFさせる
    if(str=="R")
    {
      digitalWrite(LED_PIN,!digitalRead(LED_PIN));
    }
    
  }
}

これで、シリアル通信を受信すると、「Received: (受信した信号)」で打ち返されるとともに、もしも受信したデータが「R」と言う単語であれば、6ピン(PB1ピン)に接続したLEDが光ります。

②Arduinoに空のスケッチ(BareMinimum)を書き込みます

ATtiny85に書き込みが終わったら、Arduinoに空のスケッチを書き込みます。
(ATtiny85に書き込みを行った時点ではArduinoにはArduinoISPのスケッチが書き込まれていると思いますので上書きします。)

次の図の通り、「ファイル」⇒「スケッチ例」⇒「01.Basics」⇒「BareMinimum」を開きましょう。

すると、次のような完全に空のスケッチが表示されるはずです。

これをArduinoに書き込みましょう。
これで準備はOKです。

③Arduinoの0ピン、1ピンにATtiny85のRX、TXに指定したピンを接続します

次の図のように接続します。

ポイントは、以下のようにTXとRXをクロスさせずに接続することです。
ATtiny85のTXピン:2番ピン(PB3ピン) ⇒ Arduinoの1ピン(TXピン)
ATtiny85のTXピン:3番ピン(PB4ピン) ⇒ Arduinoの0ピン(RXピン)

これで、ArduinoのもつUSBシリアル変換モジュールに接続されたことになります。

④シリアルモニタを確認します

以上で準備はOK!!
Arduinoのシリアルモニタを開いて、数字や文字を送ってみましょう。
また、「R」と言う文字を送ってみましょう。

以下写真のようにシリアル通信ができるはずです!!!
キター!!

以上です。

ポイントはArduinoに空のスケッチを書き込むことです。
この記事の一番下の「参考情報」にArduinoISPスケッチが書き込まれた状態でシリアル通信を試みたことも記載しました。


今日はUSBシリアル変換モジュールを使わずにArduinoを介してATtiny85からパソコンにシリアル通信する方法を紹介しました。

ただ、実際これをやってみると、次のような流れになるのでかなり面倒です。

1) ATtiny85に書き込むためにArduinoにArduinoISPのスケッチを書き込む
2) ATtiny85の書き込み装置をArduinoに取り付け、ツール⇒ボードからATtiny25/45/85(no bootloader)を選択
3) ATtiny85にプログラムを書き込む
4) ATtiny85の書き込み装置をArduinoから取り外す
5) ツール⇒ボードからArduino(UNO)を選択
6) ArduinoにBareMinimumを書き込む
7) ATtiny85のソフトウェアシリアル通信TX,RXとArduinoの0ピン,1ピンを接続する
8) シリアルモニタを開き確認する

うん、超めんどくさい!!
これをやるよりは、外付けのUSBシリアル変換モジュールを使った方が手軽です。

ただ、一応Arduinoでも出来る、と言うことだけでも知っておくと便利なことがあるかもです。

ではまた別の記事で会いましょう。
ではでは~

🦅バサバサ~

参考情報

ArduinoIDEでATtiny85にプログラムを書いた際に、そのままシリアルモニタで動作確認が出来たら便利だろうなぁ、と思ってArduinoにArduinoISPが書き込まれた状態でATtiny85からシリアル通信を出来ないか色々と検証しました。

その結果、まずArduinoISP内部でシリアル通信が使われていることが分かりました(ボーレートは19200)。

そこで、ATtiny85のソフトウェアシリアルのボーレートを19200にした上で、今回の記事のようにTX,RXをArduinoの0ピン,1ピンに接続してシリアル通信を行ってみました。

結果、、、、
ダメでした、、、

どうやら、ArduinoISPがシリアル通信に干渉している模様で、どうやっても上手く処理してくれませんでした。。。
今回の記事のようにArduinoのシリアル通信に関係ないスケッチをArduinoに書き込む必要があるようです。