編集の要約なし |
|||
| 33行目: | 33行目: | ||
<br><br> | <br><br> | ||
== Bluetoothモジュール HC-06と温度センサ == | |||
このセクションでは、Arduino、BluetoothモジュールHC-06、温度センサTMP36を使用して、温度データをBluetoothで送信する。<br> | |||
<br> | |||
TMP36は、アナログ出力温度測定ICである。<br> | |||
詳細は、Arduinoの基礎 - 温度センサを参照すること。<br> | |||
<br> | |||
ここでは、HC-06のデバイス名をMYBT、ボーレートを38400[bps]に設定している。<br> | |||
HC-06の設定については、上記のセクションを参照すること。<br> | |||
<br> | |||
下図に、回路図および配線図を示す。<br> | |||
下図右では、ArduinoからのTXを分圧している抵抗器が接続されている。<br> | |||
<br> | |||
以下に、Arduinoのサンプルコードを記述する。<br> | |||
HC-06がGET:TEMPという文字を受信した時、温度データを送信している。<br> | |||
ここでは簡易的な通信のみを行っているが、クライアント側とサーバ側でデータフォーマットの取り決めをする方がよい。<br> | |||
<br> | |||
このままでは、データを受信するクライアントが無いため、<br> | |||
次のセクションでは、スマートフォンとHC-06を接続して、遠隔通信で温度データを受信する。<br> | |||
<syntaxhighlight lang="c++"> | |||
#include <SoftwareSerial.h> | |||
const int PIN_TMP36 = 1; | |||
SoftwareSerial bt = SoftwareSerial(2,3); | |||
boolean bt_found = false; | |||
void setup() | |||
{ | |||
Serial.begin(9600); | |||
bt.begin(38400); | |||
delay(3000); | |||
String s = bt_sendCommand("AT"); | |||
Serial.println("AT --> " + s); | |||
if( s == "OK" ) | |||
{ | |||
bt_found = true; | |||
} | |||
else | |||
{ | |||
return; | |||
} | |||
} | |||
void loop() | |||
{ | |||
if(!bt_found) | |||
{ | |||
return; | |||
} | |||
if(bt.available() == 0) | |||
{ | |||
return; | |||
} | |||
String r = ""; | |||
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) | |||
{ | |||
bt.print(cmd); | |||
bt.flush(); | |||
Serial.println("Waiting [" + cmd + "]"); | |||
while(bt.available() == 0) | |||
{ | |||
delay(300); | |||
} | |||
Serial.println("OK [" + cmd + "]"); | |||
String r = ""; | |||
while(bt.available() > 0) | |||
{ | |||
char ch = bt.read(); | |||
r += ch; | |||
} | |||
Serial.println("Response [" + r + "]"); | |||
return r; | |||
} | |||
</syntaxhighlight> | |||
<br><br> | |||
__FORCETOC__ | __FORCETOC__ | ||
[[カテゴリ:Arduino]] | [[カテゴリ:Arduino]] | ||