ATtiny85でシリアル通信を使おう(SoftwareSerial)

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

今日はATtiny85でシリアル通信を行う方法を紹介します!

やること

ATtiny85はArduinoと違ってシリアルモニタを使えないので、プログラムに不具合があった時のデバッグ作業がちょっと難しかったりします。
そこで、ATtiny85でArduinoのシリアルモニタにデータを送信して表示させたいと思います!

やり方(概要)

今回はUSBシリアル変換モジュールを使う方法を紹介します。

① USBシリアル変換モジュールとATtiny85を組み合わせた回路を作ります
② ATtiny85で「SoftwareSerial」という方法のプログラミングを行います
③ Arduinoのシリアルモニタで送られたメッセージを表示します
④(パソコンがUSBを認識してくれない時は)ドライバを手動でインストールします

なお、別の記事でArduino自身を使ってATtiny85からシリアルモニタに情報を出させる方法も紹介したいと思います。

詳細

① USBシリアル変換モジュールとATtiny85を組み合わせた回路を作ります

今回使うのは、こちらのFT234XというUSBシリアル変換モジュールです。

出典:秋月電子https://akizukidenshi.com/catalog/g/gM-08461/

USBシリアル変換モジュールとは、ATtiny85やその他のマイコンで生み出されたシリアル信号を、USBインターフェースに変換してくれる装置です。

これを以下の図のようにATtiny85やパソコンと接続します。

このように、ATtiny85の2番ピン(Pb3ピン)と3番ピン(Pb4ピン)に接続します。
(次章で2番ピンと3番ピンをRX / TXに設定します)

これを上記の絵のように、RX/TXをクロスさせるように接続します。つまり、
 ATtiny85のRX ⇒ 変換モジュールのTXに接続
 ATtiny85のTX ⇒ 変換モジュールのRXに接続
と言う感じで接続します。

これで回路の準備はOKです。

② ATtiny85で「SoftwareSerial」という方法のプログラミングを行います

ATtiny85にシリアル通信を行うためのプログラムを書き込みます。
ATtiny85にはシリアル通信専用のピンが無いため、「SoftwareSerial(ソフトウェアシリアル)」というプログラムによってシリアル信号を発生させる方法を使います。

次がSoftwareSerialのサンプルコードです。
これを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の割り当て
 
void setup() {
  mySerial.begin(9600); 
  mySerial.println("ATtiny Serial Sample");
}
 
void loop() {

}

このコードを解説します。

まず、#include <SoftwareSerial.h>と記載して、SoftwareSerialを行うためのライブラリを読み込みます。
これはArduinoIDEに標準装備されているので、新たにライブラリをインストールする作業は要りません。

以下コードでRXピンとTXピンを指定することで、「mySerial.命令文」と言う形でシリアル通信を行うことが出来ます。(マニアックに言えば、mySerialというインスタンスを作成したんだね!)

SoftwareSerial mySerial(RX_PIN, TX_PIN);

今回はRXピンをPb4ピン(3番ピン)、TXピンをPb3ピン(2番ピン)に設定しています。
これで事前準備はOKです。

シリアル通信を行うにあたり、通信速度(ボーレートと言います)を設定して、シリアル通信をReadyな状態にします。
これは次のように書きます。

  mySerial.begin(9600);

この数値が通信速度を表しますが、全く意味が分からない場合は、とりあえず「9600」という数字にしておけばOKです。

これであとはシリアル通信を送る、もしくは受信を待つ操作をすれば通信します。
以下コードで、「ATtiny Serial Sample」という単語を送信先に送ることが出来ます。

  mySerial.println("ATtiny Serial Sample")

このコードでシリアル通信ヨシ!!

③ Arduinoのシリアルモニタで送られたメッセージを表示します

上記②のコードをATtiny85に書き込み、①の回路を作ったら、パソコンとUSBケーブルでシリアル通信モジュールを接続してください。(すでに接続していたら、それはそれでOK)

この状態で、Arduinoの ツール⇒シリアルポート をクリックしてすると、Arduinoで使っているポート番号以外に別なポート番号のものが表示されていると思います。
(表示されていなければ④項の処理を行ってください)

それがATtiny85とUSBシリアル変換モジュールです。
そのポート番号のものを選択して下さい。(私の環境ではCOM6になっていました。番号はご使用のPC環境によって異なります)

そしてその状態で、ツール⇒シリアルモニタ、を選んでシリアルモニタを開いてください。
なお、下の方の「シリアルポート」には先ほど選んだポートになっていることもチェックしてください。

そうするとこのようなウィンドウが現れます。

何も表示されていませんね。まずはOKです。
右下の通信速度のところを「9600」にして下さい。(元から9600ならばそれでOKです)

この状態で、一度ATtiny85をブレッドボードから抜いて、もう一度挿してみて下さい。
そしてシリアルモニタを見ると、、、キターーー!!!

ATtiny85から信号を受信して表示してくれました。
外部デバイスからパソコンに信号を送って動かすことが出来たのです!

これは、実は結構すごいことです。
この仕組みを使えば、外部デバイスからパソコンを動かしたり、パソコンから外部デバイスを操作したりできたりします。

つまり、電子工作のセンサーから得られるデータをエクセルに表示させることも夢ではありません!!
これは熱い!!

④(パソコンがUSBを認識してくれない時は)ドライバを手動でインストールします

私はこれで沼にハマってしまいました。
上記①②まで出来たのですが、USBをArduinoが認識してくれないのです。

これと同じ症状が出た方は、パソコンにドライバが入っていないため、USBを挿しても認識してくれていないのだと思われます。
この場合、FTDI社のWebサイトに行ってドライバをダウンロードし、それをセットアップすれば認識してくれるようになります。

2023年2月現在、上記のリンク先の以下の部分からドライバをダウンロード可能です!!

後はこのダウンロードされたzipを展開し、中の.exeファイルを実行すればドライバのインストール完了です。

この件はこちらのサイト様の記事を大変に参考にさせて頂きました
先駆者の方には頭が上がりません。


今日はATtiny85でシリアル通信を行う方法を紹介しました。

実はExcelはシリアル信号をキャッチする機能を持ってます!
ATtiny85を使った自作デバイスとExcelを繋ぐことが出来るポテンシャルがあるので、超ワクワクしますね!!
(Excelでシリアル通信をを行う記事は別途書こうと思います)

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

🦅バサバサ~