Arduino YUN Mini でIoT その4 MQTT(2)

測定した温度をMQTTブローカに送る

 作業をArduino IDE 1.8.0で行います。バージョン1.8.0は、分裂していたArduino両陣営から統合されたIDEで、2016年12月24日に公開されました。

温度センサのライブラリを読み込む

 メニューのスケッチからライブラリをインクルード->ライブラリ管理を選びます。1wireのセンサを使うために、二つのライブラリを追加します。

 検索欄に温度センサの名称「DS18B20」を入れるとDallasTemperatureが出るので、More Infoを押してinstallボタンを出し、installをクリックします。同様に検索にonewireを入れ、OneWireをインストールします。

 ファイルのスケッチ例->DallasTemperature->Simpleスケッチを開きます。

#define ONE_WIRE_BUS 10

 10番のピンにDS18B20の信号線をつないだので、デフォルトの2から10に変更します。

 ボードはArduino Yun、ポートはCOMxx(Arduino Yun Mini)を選びます。コンパイルして実行を選ぶと、シリアルモニタに温度が表示されます。

MQTTパブリッシュの設定

 ボードはArduino YUN Miniを選び、ポートはarduino at 192.168.xxx.xxxを選びます。

#include <OneWire.h>
#include <DallasTemperature.h>
//#include <Bridge.h>
#include <BridgeClient.h>
#include <PubSubClient.h>
// Data wire is plugged into port 2 on the Arduino
#define ONE_WIRE_BUS 10
const char* mqtt_server = "192.168.111.50";
BridgeClient c;
PubSubClient client(c);
char Topic[] = "ondo";
char msg[50];
long temp0=0;
// Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)
OneWire oneWire(ONE_WIRE_BUS);
// Pass our oneWire reference to Dallas Temperature.
DallasTemperature sensors(&oneWire);
void setup(void)
{
  Bridge.begin();
  Console.begin();
  client.setServer(mqtt_server, 1883);
  client.connect("--esp--");
  Serial.begin(9600);
  sensors.begin();
}
void loop(void)
{
// call sensors.requestTemperatures() to issue a global temperature
// request to all devices on the bus
  sensors.requestTemperatures(); // Send the command to get temperatures
// Serial.print("Temperature for the device 1 (index 0) is: ");
  temp0 = sensors.getTempCByIndex(0);
  client.loop();
  dtostrf(temp0, 4, 2, msg);
  Serial.println(msg);
  Console.println(msg);
  client.publish(Topic, msg);
  delay(2000);
}

 シリアルモニタの表示です。

 ラズパイのnode-REDの表示です。ラズパイのnode-REDの設定は前回と同じです。

 配線例です。

 Arduino YUN Miniを使って、温度データをMQTTブローカに送る実験ができました。しかし、温度データを送るだけの装置としては高額です。ラズパイのほうが安価に装置を作れます。けれどもコンパクトには作れません。

 別の連載でESP8266を使って同様な装置を作ります。