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を使って同様な装置を作ります。