- 2017-2-21
- ESP-WROOM-02
- 3 comments
地温と気温等を1台のボードで測定したい場合、温度センサーを複数設置するための手順です。
DS18B20温度センサーはそれぞれに固有のシリアルコードを備えているため、同一ライン上で複数のセンサーを稼働させる事が出来ます。
今回は、2個のセンサーを設置しました。
配線
プログラムコード
#include <ESP8266WiFi.h> #include <BlynkSimpleEsp8266.h> #include <OneWire.h> #include <DallasTemperature.h> #include <TimeLib.h> #include <SimpleTimer.h> #define ONE_WIRE_BUS 14 //温度センサーをESP-WROOM-02の14番ピンに接続 OneWire oneWire(ONE_WIRE_BUS); DallasTemperature sensors(&oneWire); char auth[] = "fromBlynkApp"; //Blynkで生成されるAuth Token SimpleTimer timer; void setup() { Serial.begin(9600); Blynk.begin(auth, "SSID", "password"); //無線ルーターのSSIDとパスワード sensors.begin(); timer.setInterval(5000L, sendTemps); // Temperature sensor polling interval (5000L = 5 seconds) } void sendTemps() { sensors.requestTemperatures(); // Polls the sensors float tempBabyRoom = sensors.getTempCByIndex(0); // 温度センサーから摂氏気温を取得 float tempBabyRoom1 = sensors.getTempCByIndex(1); // 温度センサーから摂氏気温を取得 Blynk.virtualWrite(4, tempBabyRoom); //BlynkアプリでV4ピンを指定する Blynk.virtualWrite(5, tempBabyRoom1); //BlynkアプリでV5ピンを指定する } void loop() { Blynk.run(); timer.run(); }
センサー3本接続のスケッチ例です。
#include <ESP8266WiFi.h> #include <BlynkSimpleEsp8266.h> #include <OneWire.h> #include <DallasTemperature.h> #include <TimeLib.h> #include <SimpleTimer.h> #define ONE_WIRE_BUS 14 //温度センサーをESP-WROOM-02の14番ピンに接続 OneWire oneWire(ONE_WIRE_BUS); DallasTemperature sensors(&oneWire); char auth[] = "fromBlynkApp"; //Blynkで生成されるAuth Token SimpleTimer timer; void setup() { Serial.begin(9600); Blynk.begin(auth, "SSID", "password"); //無線ルーターのSSIDとパスワード sensors.begin(); timer.setInterval(5000L, sendTemps); // Temperature sensor polling interval (5000L = 5 seconds) } void sendTemps() { sensors.requestTemperatures(); // Polls the sensors float tempBabyRoom = sensors.getTempCByIndex(0); // 温度センサーから摂氏気温を取得 float tempBabyRoom1 = sensors.getTempCByIndex(1); // 温度センサーから摂氏気温を取得 float tempBabyRoom2 = sensors.getTempCByIndex(2); // 温度センサーから摂氏気温を取得 Blynk.virtualWrite(4, tempBabyRoom); //BlynkアプリでV4ピンを指定する Blynk.virtualWrite(5, tempBabyRoom1); //BlynkアプリでV5ピンを指定する Blynk.virtualWrite(6, tempBabyRoom2); //BlynkアプリでV6ピンを指定する } void loop() { Blynk.run(); timer.run(); }
スマホの設定等
コメント
この記事へのトラックバックはありません。
いつも参考にさせていただいてます。
おかげさまで、温度計二つでの試作もできました。
すごく初歩的な質問で申し訳ないですが、
この温度計は、各々シリアルがあるとのことですが
試しに3本つけてみました。
この場合、3本のうち2本が同じ数値をさしました。
電力不足?
抵抗のを変更?
2本より多い場合はシリアルが認識できなくなる?
などなどもやもや考えてました。
もし同じようなことをトライされてたりしたら教えていただければと思いコメントさせていただきました。
御回答頂ければ幸いです。
モリミさん、コメントありがとうございます。
記事が参考になったようで良かったです。
センサー3個以上でのトライは、残念ながら試した事がないので分かりません。
お役に立てず申し訳ありません。
モリミさん、
センサー3本の場合、温度取得部分のスケッチを下記のように変更してみてはいかがでしょうか?
「sensors.getTempCByIndex(n)」は個別IDを取得しなくても、0..n個の温度が読み取れるようです。
float tempBabyRoom = sensors.getTempCByIndex(0);
float tempBabyRoom1 = sensors.getTempCByIndex(1);
float tempBabyRoom2 = sensors.getTempCByIndex(2);
Blynk.virtualWrite(4, tempBabyRoom);
Blynk.virtualWrite(5, tempBabyRoom1);
Blynk.virtualWrite(6, tempBabyRoom2);