編集の要約なし
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]]