こんばんは!
今回は複数のソフトウェアシリアルポートを使用することができるSoftwareSerialライブラリについてです。
SoftwareSerial Library
Arduinoでシリアル通信を行う際、デジタル0番ピンと1番ピンを使用することができますが、シリアル通信を複数使用したい場合には、それだけでは足りません。
そのようなときに、他のピンを使ってシリアル通信を実現するためのものがこのSoftwareSerialライブラリです。
このSoftwareSerialライブラリを使用することでArduino同士の通信なども実現することができます。
注意点や詳しい内容は公式リファレンスを参照してください。
使用例
今回は以前の「Arduinoを用いてHC-06でAndroidとBluetooth通信をする」という記事のコードのSerial通信の部分をSoftwareSerialライブラリを使って書き換えました。
使用するものや配線などはこちらをご覧ください。
違いが見やすいように、前回のコードをこちらにも載せておきます。
前回のコード↓
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | int data = 0; int led = 13; void setup() { pinMode(led, OUTPUT); Serial.begin(9600);//シリアル通信開始、転送速度は9600ビット/秒 } void loop() { if (Serial.available() > 0) { data = Serial.read();//シリアル通信で受け取ったデータを読み込む if (data == '1') {//1が送られてきたらLEDをON digitalWrite(led, HIGH); Serial.println("ON"); } else if (data == '0') {//0が送られてきたらLEDをOFF digitalWrite(led, LOW); Serial.println("OFF"); } delay(10); } } |
デジタルピン0番(RX),1番(TX)使って通信をしています。
これをSoftwareSerialを使って書き換えたもの↓
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | #include <SoftwareSerial.h> SoftwareSerial mySerial = SoftwareSerial(2, 3);//rx,tx int data = 0; int led = 13; void setup() { pinMode(2, INPUT); pinMode(3, OUTPUT); pinMode(led, OUTPUT); mySerial.begin(9600); delay(200); } void loop() { if (mySerial.available() > 0) { data = mySerial.read();//シリアル通信で受け取ったデータを読み込む if (data == '1') {//1が送られてきたらLEDをON digitalWrite(led, HIGH); mySerial.println("ON"); } else if (data == '0') {//0が送られてきたらLEDをOFF digitalWrite(led, LOW); mySerial.println("OFF"); } delay(10); } } |
コードの説明をしていきます。
まず一行目の
#include <SoftwareSerial.h>
でSoftwareSerialライブラリを取り込んでいます。
そして、setup()関数以前で
SoftwareSerial mySerial = SoftwareSerial(2, 3);
によって、シリアルオブジェクト「mySerial」を作成し、デジタル2番ピンをRXピンとして、デジタル3番ピンをTXピンとして指定しています。
RXピンTXピンはそれぞれsetup()関数内で入力と出力にピンの状態を指定しています。
残りの部分は以前の記事との変更点はほとんどありません。
これをマイコンボードに書き込むと以前の記事と同じようにBluetooth通信ができるはずです。
まとめ
Arduinoのデジタルピン0番1番は、マイコンボードに書き込む際にはピンを外さないといけないですし、シリアル通信を複数使用することもできないので、SoftwareSerialライブラリはとても便利だと思います。
今回はこれで終わります。
ではまた!