はじめに
お久しぶりです。多少はブログのネタもできてきたので、更新を再開しようかと思います。
ただし今までのように定期的な更新を行うのではなく、今後も不定期で更新しようと思ってます。
目次
1. おさらい
以前まで行っていたのはBluetoothモジュールRN-42を使ったシリアル通信の無線化です。
Bluetoothの使用方法はプロファイルというルールで決められており、SPP(Serial Port Profile)というプロファイルを使えばBluetoothでシリアル通信を行うことができます。RN-42はSPPに対応していますので、Bluetoothが載っているパソコンなどとシリアル通信を行えます。またRN-42にはシリアル通信のピンがありますので、有線でArduinoを繋ぐことができます。(図1)
図1 作成物概要
このようなものを作ります。
2. 実装
ハードウェア
図2が作成した回路です。
図2 回路図
Arduino Unoは5[V]でRN-42は3.3[V]ですので、それらの間にはIC3(レベルシフタFXMA108)があります。これで5[V]-3.3[V]の変換を行います。また、RN-42用の電源としてIC4(三端子レギュレータTA48M033F)を使っています。
シリアル通信の線はArduinoのD10とD11に接続します。ですので、シリアル通信はソフト的に行います。
シリアル通信を行うだけならこれでいいのですが、それだけだと面白くないので以前作成したキャラクタ液晶(DIS1)も接続し、通信内容を表示できるようにします。
この程度の回路なら実装はブレッドボードでもできますが、基板設計の練習を兼ねてEagleで設計し、ユニクラフトに発注して、基板を作りました。
上にある部品がキャラクタ液晶、右下にある部品がRN-42です。Arduinoシールドとして使用できるように設計しています。
図2 回路図
これで回路設計と基板実装ができました。
ソフトウェア
シリアル通信を行うだけなら、Software.Serialライブラリを使えば動かすことができます。
キャラクタ液晶で作成したスケッチをソフトウェアシリアル化したスケッチが以下です。
/* 使用しているライブラリ * 作者名:TOMO. "I2C液晶のArduinoライブラリ – ST7032". サイト名:オレ工房. http://ore-kb.net/archives/195, (参照日:2016-01-17) */ #include <Wire.h> #include <ST7032.h> #include <string.h> #include <SoftwareSerial.h> // initialize the library with the numbers of the interface pins ST7032 lcd; SoftwareSerial mySerial(10, 11); // RX, TX int i, n, n1=0, n2=0; char str1[30]="", str2[30]=""; void setup(){ // set up the LCD's number of columns and rows: lcd.begin(8, 2); lcd.setContrast(27); // initialize the mySerial communications: mySerial.begin(9600); } void loop() { // when characters arrive over the mySerial port... if (mySerial.available()) { // wait a bit for the entire message to arrive delay(100); //1行目の文字列を2行目に移動 strcpy(str2, str1); n2=n1; // read all the available characters i=0; while (mySerial.available() > 0) { // display each character to the LCD str1[i]=mySerial.read(); i++; } str1[i]='\0'; n1=i; //2行のうち、文字数が多い方を採用 if(n2 > n1){ n=n2-7; } else{ n=n1-7; } lcd.clear(); lcd.home(); lcd.setCursor(0,0); lcd.print(str1); lcd.setCursor(0,1); lcd.print(str2); } // clear the screen //8文字以上の場合スクロール処理 if(0<n){ delay(1500); for(i=0; i<n; i++){ //スクロール処理中にシリアル受信をしたらbreak if (mySerial.available()) { break; } lcd.scrollDisplayLeft(); delay(500); } //breakによる脱出でなければスクロールを先頭に戻す if(i==n){ delay(1000); if (mySerial.available()==0) { lcd.clear(); lcd.home(); lcd.setCursor(0,0); lcd.print(str1); lcd.setCursor(0,1); lcd.print(str2); } } } }
3. 動作確認
では実際にBluetoothでシリアル通信を行います。
まず、パソコンとRN-42を接続します。画面でRNBT-4703と表示されているのがRN-42ですので、これとBluetoothで接続します。
図3 Bluetooth接続画面
あとは有線と同じようにポートを接続し、シリアル通信できます。
今回使用しているRN-42モジュールはシリアル通信の接続状態を示すためのLEDが実装されています。切断時は点滅、接続時は点灯します。
まとめ
Bluetooth SPPを使うことで、Arduinoのシリアル通信を無線化することができました。
Bluetooth無線でワイヤレスI/O [ トランジスタ技術編集部 ] 価格:2,808円 |