24時間稼働しているルーター、NAS、NVR等の温度を5分毎に測定しクラウド上のAmbientに
送信しモニターしてみました。
送信しモニターしてみました。
1.温度センサーとしてDS18B20の1-Wireデジタル温度計を使用しました。
下記マニュアルが参考となりました。
2.ライブラリは、下記のURLよりダウンロードしIDEにインストールします。
➂次のサイトを参考にしました。感謝 Arduino+DS18B20で温度測定してみた
3.IoTクラウドサービス「Ambient」を使用するには下記でユーザー登録します。
5.以下は、Ambientに送信した数日分のデータをグラフ化したものです。
◆温度7か所とWiFiのRSSIレベルのMAX8個のデータをAmbitntに送信しています。
6.配線は、DS18B20のデータ線を4.7kΩでプルアップして7個を並列に接続しています。
赤色->VCC(3.3V) 黒色->GND 黄色->データ(ESP32のGPIO33)に接続
7.最後に参考までにinoのソースファイルを記載します。
(保障なし。あくまでも自己責任で)
①ソースの中で、WiFi接続のためのssid,paswordを自分の環境に合わせて修正します。
②同じくAmbientに送信するために、AmbientのチャンネルID、ライトキーを修正します。
➂GPIO14は、デバッグ用のピンとしています。
デバッグ時は、ピンをオープン(HIGH)で Ambient送信間隔を20秒
通常時は、ピンをGNDに接続(LOW)で Ambient送信間隔を300秒(5分)
/* 2021/06/28 3F 温度センサー v1 */ #include <WiFi.h> #include <OneWire.h> #include <DallasTemperature.h> #include "Ambient.h" #define LED 2 #define ON HIGH #define OFF LOW #define ONE_WIRE_BUS 33 // DS18B20 温度センサー データ(オレンジ)で使用するポート番号 #define SENSER_BIT 9 // 精度の設定bit 0.5℃ #define DBG_PIN 14 //デバッグ時=1 input_pullup オープンでデバッグ int debug=1; //デバッグ時=1 int wt=0; String c_rssi; int rssi=0; const char* ssid = "ssid" ; const char* password = "pasword" ; unsigned int channelId = 12345; // AmbientのチャネルID const char* writeKey = "ffffffffffff1f32"; // ライトキー Ambient ambient; OneWire oneWire(ONE_WIRE_BUS); DallasTemperature sensors(&oneWire); WiFiClient client ; void setup() { pinMode(LED, OUTPUT); pinMode(DBG_PIN, INPUT_PULLUP); Serial.begin(115200); Serial.println("Program Start"); sensors.setResolution(SENSER_BIT); sensors.begin(); Serial.println("DS18B20 Start"); for (int i=0;i<5;i++) { digitalWrite(LED,ON); delay(200); digitalWrite(LED,OFF); delay(200); } //connect to WiFi // WiFi.disconnect(); int ct=0; Serial.printf("Connecting to %s ", ssid); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); ct++; Serial.print("."); if (ct>20) ESP.restart(); } Serial.println(""); Serial.println("WiFi connected."); Serial.println("IP address: "); Serial.println(WiFi.localIP()); Serial.println("Start"); ambient.begin(channelId, writeKey, &client); // チャネルIDとライトキーを指定してAmbientの初期化 Serial.println("Ambient Start"); delay(2000); } void loop() { float temp1; // 温度 float temp2; // 温度 float temp3; // 温度 float temp4; // 温度 float temp5; // 温度 float temp6; // 温度 float temp7; // 温度 debug=digitalRead(DBG_PIN); digitalWrite(LED,ON); c_rssi=WiFi.RSSI(); rssi=c_rssi.toInt(); //DS18B20にて温度取得時 sensors.requestTemperatures(); // 温度取得要求 temp1=sensors.getTempCByIndex(0); //温度の取得 temp2=sensors.getTempCByIndex(1); //温度の取得 temp3=sensors.getTempCByIndex(2); //温度の取得 temp4=sensors.getTempCByIndex(3); //温度の取得 temp5=sensors.getTempCByIndex(4); //温度の取得 temp6=sensors.getTempCByIndex(5); //温度の取得 temp7=sensors.getTempCByIndex(6); //温度の取得 // 測定値をシリアルに表示 Serial.printf("デバッグ=%d 温度1=%2.1f ℃ 2=%2.1f ℃ 3=%2.1f ℃ 4=%2.1f ℃ 5=%2.1f ℃ 6=%2.1f ℃ 7=%2.1f ℃ RSSI=%2.2f",debug,temp1,temp2,temp3,temp4,temp5,temp6,temp7,(((float)rssi)/100.0)); Serial.println(); // 温度、湿度、バッテリ電圧などの値をAmbientに送信する digitalWrite(LED,ON); ambient.set(1, temp1); // 温度1をデータ1にセット ambient.set(2, temp2); // 温度2をデータ2にセット ambient.set(3, temp3); // 温度3をデータ3にセット ambient.set(4, temp4); // 温度4をデータ4にセット ambient.set(5, temp5); // 温度5をデータ5にセット ambient.set(6, temp6); // 温度6をデータ6にセット ambient.set(7, temp7); // 温度7をデータ7にセット ambient.set(8, ((float)rssi)/100.0); // wifiレベルをデータ8にセット if (ambient.send()) { Serial.println(" Ambient Send OK"); } else { Serial.println(" Ambient Send NG"); } digitalWrite(LED,OFF); while(1) { sleep(9); digitalWrite(LED,ON); sleep(1); digitalWrite(LED,OFF); wt++; if (debug) { if (wt>=2) break; } else { if (wt>=30) break; } } wt=0; }












































































































