IoT のための電子工作入門

ホーム > ArduinoArduino > Bluetooth で遠隔端末に温度データを送る

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 接続を行い、遠隔で温度データをみてみましょう。

» Bluetooth デバイスに接続する Android クライアントを作成する方法

ホーム > ArduinoArduino > Bluetooth で遠隔端末に温度データを送る