LoginSignup
4
7

More than 5 years have passed since last update.

ESP8266とNode-REDで環境測定

Last updated at Posted at 2018-06-26

多数のサイトの記事を参考にしたので、お礼の意味をこめてまとめてみる。

  • ESP8266側

Wemos D1を使用(Aliexpressで300円程度)
センサはBME280(Aliexpressで300円程度)

pic.jpg

GPIO(D1)でBME280に電源供給する。
Wemos D1のD0とRSTを繋ぎDeepSleepさせる。
UDP接続でデータを送信する。

ESP8266_BME280.ino
#include <Wire.h>
#include <ESP8266WiFi.h>
#include <WiFiUdp.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>

Adafruit_BME280 bme; // I2C
WiFiUDP port;

// 環境にあわせて設定
const char* ssid = "Wifi SSID";
const char* password = "Wifi Password";
const char* RemoteIP = "Node-RED PC IP Address";
const int RemoteUdpPort = "Port Number (Node-RED PC)";
const int LocalUdpPort = "Port Number (Wemos D1);

float h, t, p;
char tempStr[6];
char humidStr[6];
char presStr[7];

WiFiClient client;

void setup() {

  pinMode(D1, OUTPUT);
  digitalWrite(D1, HIGH);
  delay(500);
  Wire.begin(D3, D4);
  Wire.setClock(100000);
  // Connecting to WiFi network

  WiFi.begin(ssid, password);
  delay(500);
  port.begin(LocalUdpPort);
}

void loop() {

  digitalWrite(D1, HIGH);
  delay(500);
  bme.begin();
  delay(500);

  h = bme.readHumidity();
  t = bme.readTemperature();
  p = bme.readPressure() / 100.0F;

  dtostrf(t, 5, 1, tempStr);
  dtostrf(h, 5, 1, humidStr);
  dtostrf(p, 6, 1, presStr);
  delay(500);

  port.beginPacket(RemoteIP, RemoteUdpPort);
  port.write(tempStr);
  port.write(",");
  port.write(humidStr);
  port.write(",");
  port.write(presStr);
  port.endPacket();

  delay(500);
  client.stop();

  digitalWrite(D1, LOW);

  ESP.deepSleep(60 * 1000 * 1000);
  delay(1000);

}
  • Node-RED側

Node-red.png

On/OffのスライドスイッチをOnにすると測定がはじまる。
測定中のデータはDownload dataのリンクからダウンロードできる。

node-red-dashboardをインストールしておく。

データファイルはC:\Users\ユーザー名.node-red\public\data.txtに保存する。このため、setting.jsを一部書き換える。

\Users\ユーザー名\.node-red\setting.js

// When httpAdminRoot is used to move the UI to a different root path, the
    // following property can be used to identify a directory of static content
    // that should be served at http://localhost:1880/.
    httpStatic: 'C:\\Users\\ユーザー名\\.node-red\\public\\',

グラフ表示をリセットするには、msg.payload = [];で空データを送ればよい。

全体のプログラムはこのようなもの。

無題.png.jpg

Node-RED.json
[{"id":"875e011d.8c9b1","type":"udp in","z":"c7bd4892.5ff33","name":"","iface":"","port":"9000","ipv":"udp4","multicast":"false","group":"","datatype":"utf8","x":89,"y":20,"wires":[["f1039d99.7a42d"]]},{"id":"80368a94.88c5c8","type":"file","z":"c7bd4892.5ff33","name":"","filename":"C:\\Users\\ユーザー名\\.node-red\\public\\data.txt","appendNewline":true,"createDir":true,"overwriteFile":"false","x":585,"y":124,"wires":[]},{"id":"6b7eefba.564318","type":"ui_chart","z":"c7bd4892.5ff33","name":"","group":"8bb76dfe.1b24e8","order":3,"width":"11","height":"4","label":"グラフ(温度)","chartType":"line","legend":"false","xformat":"HH:mm:ss","interpolate":"linear","nodata":"","dot":false,"ymin":"","ymax":"","removeOlder":1,"removeOlderPoints":"","removeOlderUnit":"3600","cutout":0,"useOneColor":false,"colors":["#1f77b4","#aec7e8","#ff7f0e","#2ca02c","#98df8a","#d62728","#ff9896","#9467bd","#c5b0d5"],"useOldStyle":false,"x":594,"y":356,"wires":[[],[]]},{"id":"a2865f64.6d69f8","type":"ui_chart","z":"c7bd4892.5ff33","name":"","group":"8bb76dfe.1b24e8","order":4,"width":"11","height":"4","label":"グラフ(湿度)","chartType":"line","legend":"false","xformat":"HH:mm:ss","interpolate":"linear","nodata":"","dot":false,"ymin":"","ymax":"","removeOlder":1,"removeOlderPoints":"","removeOlderUnit":"3600","cutout":0,"useOneColor":false,"colors":["#1f77b4","#aec7e8","#ff7f0e","#2ca02c","#98df8a","#d62728","#ff9896","#9467bd","#c5b0d5"],"useOldStyle":false,"x":599,"y":414,"wires":[[],[]]},{"id":"f87cbe7b.9915","type":"ui_chart","z":"c7bd4892.5ff33","name":"","group":"8bb76dfe.1b24e8","order":5,"width":"11","height":"4","label":"グラフ(気圧)","chartType":"line","legend":"false","xformat":"HH:mm:ss","interpolate":"linear","nodata":"","dot":false,"ymin":"","ymax":"","removeOlder":1,"removeOlderPoints":"","removeOlderUnit":"3600","cutout":0,"useOneColor":false,"colors":["#1f77b4","#aec7e8","#ff7f0e","#2ca02c","#98df8a","#d62728","#ff9896","#9467bd","#c5b0d5"],"useOldStyle":false,"x":600,"y":477,"wires":[[],[]]},{"id":"a04b648d.63b7d8","type":"ui_template","z":"c7bd4892.5ff33","group":"8bb76dfe.1b24e8","name":"ダウンロードリンク","order":2,"width":0,"height":0,"format":"  <a href=\"\\data.txt\" download=\"data.txt\"> Download Data </a>","storeOutMessages":true,"fwdInMessages":false,"templateScope":"local","x":586,"y":533,"wires":[[]]},{"id":"ede8ec78.465c5","type":"function","z":"c7bd4892.5ff33","name":"温度","func":"    msg={\"payload\":msg.data.split(\",\")[0],\"_msgid\":msg._msgid}\n    return msg;","outputs":1,"noerr":0,"x":357,"y":317.5,"wires":[["6b7eefba.564318"]]},{"id":"99103733.337488","type":"ui_switch","z":"c7bd4892.5ff33","name":"","label":"On/Off","group":"8bb76dfe.1b24e8","order":1,"width":0,"height":0,"passthru":true,"decouple":"false","topic":"","style":"","onvalue":"true","onvalueType":"bool","onicon":"","oncolor":"","offvalue":"false","offvalueType":"bool","officon":"","offcolor":"","x":143,"y":166,"wires":[["c54f1a54.cdf26"]]},{"id":"f1039d99.7a42d","type":"change","z":"c7bd4892.5ff33","name":"","rules":[{"t":"set","p":"data","pt":"msg","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":115,"y":87.5,"wires":[["99103733.337488"]]},{"id":"d7dfeaf8.9a68c","type":"function","z":"c7bd4892.5ff33","name":"湿度","func":"if (msg.payload === true){\n    msg={\"payload\":msg.data.split(\",\")[1],\"_msgid\":msg._msgid}\n    return msg;\n}\nelse {\n    msg.payload = [];\n    return msg;\n}","outputs":1,"noerr":0,"x":360,"y":365,"wires":[["a2865f64.6d69f8"]]},{"id":"9a713371.3670b","type":"function","z":"c7bd4892.5ff33","name":"圧力","func":"if (msg.payload === true){\n    msg={\"payload\":msg.data.split(\",\")[2],\"_msgid\":msg._msgid}\n    return msg;\n}\nelse {\n    msg.payload = [];\n    return msg;\n}","outputs":1,"noerr":0,"x":363,"y":406,"wires":[["f87cbe7b.9915"]]},{"id":"33df85cb.326322","type":"file","z":"c7bd4892.5ff33","name":"","filename":"C:\\Users\\dino\\.node-red\\public\\data.txt","appendNewline":true,"createDir":true,"overwriteFile":"true","x":585,"y":169.5,"wires":[]},{"id":"4890f48b.3ec35c","type":"function","z":"c7bd4892.5ff33","name":"Onで追記保存","func":"\n    //タイムスタンプの生成\n  \n    var getTimestamp = function (date) {\n        var yyyy = date.getFullYear();\n        var mm = ('0' + (date.getMonth() + 1)).slice(-2);\n        var dd = ('0' + date.getDate()).slice(-2);\n        var h = ('0' + date.getHours()).slice(-2);\n        var m = ('0' + date.getMinutes()).slice(-2);\n        var s = ('0' + date.getSeconds()).slice(-2);\n        var temp = msg.data.split(\",\")[0];\n        var humid = msg.data.split(\",\")[1];\n        var pres = msg.data.split(\",\")[2];\n        var ts = yyyy + '/' + mm + '/' + dd + ',' + h + ':' + m + ':' + s+ ',' + temp + ',' + humid + ','+ pres;\n        return ts;\n    };\n    \n\n        msg.payload = getTimestamp(new Date());\n    \n    return msg;\n\n","outputs":1,"noerr":0,"x":343,"y":124,"wires":[["80368a94.88c5c8"]]},{"id":"2869448f.21bb54","type":"function","z":"c7bd4892.5ff33","name":"Offで新規保存","func":"\n    //タイムスタンプの生成\nif (msg.payload === true){\n    msg.payload = \"date,time,temp,humid,pres\";\n    return msg;\n}\n\n","outputs":1,"noerr":0,"x":342,"y":169,"wires":[["33df85cb.326322"]]},{"id":"c54f1a54.cdf26","type":"switch","z":"c7bd4892.5ff33","name":"","property":"payload","propertyType":"msg","rules":[{"t":"neq","v":"","vt":"prev"},{"t":"true"}],"checkall":"true","repair":true,"outputs":2,"x":149,"y":250.5,"wires":[["59f90ab8.8953dc","2869448f.21bb54"],["ede8ec78.465c5","d7dfeaf8.9a68c","9a713371.3670b","4890f48b.3ec35c"]]},{"id":"59f90ab8.8953dc","type":"function","z":"c7bd4892.5ff33","name":"非表示","func":"if (msg.payload === true){\n    msg.payload = [];\n    return msg;\n}","outputs":1,"noerr":0,"x":360,"y":456,"wires":[["6b7eefba.564318","a2865f64.6d69f8","f87cbe7b.9915"]]},{"id":"8bb76dfe.1b24e8","type":"ui_group","z":"","name":"温度・湿度・気圧測定","tab":"76ac02e3.760fb4","disp":true,"width":"11","collapse":false},{"id":"76ac02e3.760fb4","type":"ui_tab","z":"c7bd4892.5ff33","name":"ホーム","icon":"dashboard"}]
4
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
7