Bluetooth で遠隔端末に温度データを送る
ここでは、Arduino Uno R3、Bluetooth シリアルモジュール HC-06、さらに TMP36 を用いて、 温度のデータを Bluetooth で遠隔に送信する装置を作成します。
TMP36 はよく使われるアナログ出力温度測定 IC です。 詳しくは「温度を測る ~ TMP36」をみてください。
また HC-06 を設定し、デバイス名を "MYBT1" に、ボーレートを 38400 に設定しました。
HC-06 の設定については 「Bluetooth シリアルモジュール HC-06 の設定」をみてください。
その上で次のように接続しました。
写真では Arduino からの TX を分圧している抵抗器がかげになって見えていませんが、接続されています。
Arduino のプログラムは次のようにしました。
#include <SoftwareSerial.h>
const int PIN_TMP36 = 1;
SoftwareSerial bt = SoftwareSerial(2,3);
boolean bt_found = false;
void setup() {
String s;
Serial.begin(9600);
bt.begin(38400);
delay(3000);
s = bt_sendCommand("AT");
Serial.println("AT --> " + s);
if( s == "OK" ){
bt_found = true;
}
else{
return;
}
}
void loop() {
if(!bt_found){
return;
}
String r = "";
if(bt.available() == 0){
return;
}
while(bt.available() > 0){
char ch = bt.read();
r += ch;
}
Serial.println("App Command Received: " + r);
process_command( r );
}
float get_temperature(){
int i = analogRead( PIN_TMP36 );
float f = i * 5.0 / 1023.0;
//TMP36
// C = 100V - 50
return 100 * f - 50;
}
void process_command(String r){
if( r == "GET:TEMP" ){
float temp = get_temperature();
String s = String(temp, 1);
bt.print(s);
bt.flush();
}
else{
Serial.println("Unknown command.");
}
}
String bt_sendCommand(String cmd){
String r = "";
bt.print(cmd);
bt.flush();
Serial.println("Waiting [" + cmd + "]");
while(bt.available() == 0){
delay(300);
}
Serial.println("OK [" + cmd + "]");
while(bt.available() > 0){
char ch = bt.read();
r += ch;
}
Serial.println("Response [" + r + "]");
return r;
}
ここでは、Bluetooth が "GET:TEMP" という文字を受け取ったときに、温度データを送り返しています。
しかし、一度にどのくらいのデータが読めるか分かったものではないので、 実際にはもう少しちゃんと、クライアントとサーバー側でデータフォーマットの取り決め (ひとことで言えば「プロトコル」) をした方が良いでしょうね。
このままでは、データを読み取るクライアントがいないので、スマホ (アンドロイド) で Bluetooth 接続を行い、遠隔で温度データをみてみましょう。