ラベル DHT11 の投稿を表示しています。 すべての投稿を表示
ラベル DHT11 の投稿を表示しています。 すべての投稿を表示

2019年11月18日月曜日

ESP8266 温湿度モニターの筐体の検討

取り敢えず、100均でPPの小さな容器を買ってきて、これに断熱テープを張り付けて、内部に基板を入れて、窓際に置いて、数日間温湿度を計測してみました。 また、対照として、卓上にブレッドボード上に同じものを作り、これも計測データをサーバーに送らせて、比較してみました。

結果はOMG! 何を測っているのか分からなーい! 断熱テープで太陽光を遮っても、容器内に暖められた空気がこもり、この温度を測ってしまっていますね。 
太陽電池に太陽光を当てて、且つ周りの雰囲気温度を計測するのは思ったより難しそうです。 
今度は、100均で台所で使う少し大きめの網目のPP籠で実験してみることにします。  雨が当たらないように、配置を考える必要があります。 
電子的にはあまり問題はありませんが、筐体には結構頭を使わないといけませんね。これは難しい。





2019年11月13日水曜日

ESP8266 WiFi 温度湿度モニター

そもそも太陽電池、LiPo、充電モジュールを興味本位でAmazonで買ってしまったので、昔考えていたWiFi温度湿度モニターが復活してしまいました。 で、deepsleep(60分は出来なかったので、15分)を使ってこの組み合わせでどの位使えるのか、実証してみようと、100均でPPの容器を買ってきて、取り敢えずバージョンを作ってみました。
取り敢えずのブレッドボードでdeepSleepを確認してみましたが、30分程度にしかならない(60x60x1000x1000と引数に書くと、符号付と解釈される?)ので、15分毎にアップデートすることとしました(3,600,000,000って書くとちゃんと60分になるのかは未確認)。

> 数字を直接入れると60分位になることを確認しましたが、 3600000000を入れても、実際には11:50:21 - 12:45:50 = 55:29と正確ではありませんね。 
ま、esp8266のタイマーに精度を求めるのには無理があるので、もう少し細かい間隔で記録を取って、平均したほうが良いと思います


秋月の46X72の基盤を46X36に2分して、JRCのNJU7223DL1-33を電池からの電源に噛まして、47μFをパラにして安定化を図り、RSTとD0をショートピンでショート出来るようにしただけの超簡単基板ですが、まともに動きますねー。

さて、消費電流ですが、microUSBでPCと繋いでいると常時13mA位流れていますが、プログラムの書き込み後、自走させると、アップロード時に64mA、それ以外は0.01mA或いはそれ以下(使った電流計が0.01mA以下が読めなかった)で、アップロードは数秒で終わりますので、これだとかなり行けそうです。


「さー、これでいけるぞ!」とPPの容器に、断熱テープ(Amazonで購入した、ガラスウールとアルミのラミネート)を張り付け、容器の上に太陽電池、下は解放という形状にしてみました。 
断熱テープって、アルミなので電波シールドになっちゃうんじゃ?とESP8266の基板を取り付けた方は断熱材を剥がしています(こちら側に太陽光が当たらないように設置する必要があります)。 ケース内の取り付けは、両面テープでちょこっと張り付けただけの、超いい加減バージョン!

1週間ほど、室内の窓際に置いて、問題が無ければ、実際に庭に設置して計測を開始することにする予定。
あ、電源のon/offスイッチ付けるの忘れてる!!

使用しているコード














2019年11月10日日曜日

ESP8266 Arduino 続き)

アマゾンで”Aideepen 2個セット ESP8266 ESP-12F CH340G CH340 V2 3.3V USB WeMos D1 Mini WIFI開発ボードD1 Mini NodeMCU IOTボード”を購入しましたが、Serial Monitorがうまく動作しなくて、昨日から四苦八苦していましたが、やっと解決策を見つけました。 (これ、技適マーク無いので、WiFiは使っちゃダメです)。
「ツール」->「ボード」で、LOLIN WeMosがらみの物を指定すると、ちゃんと表示されるようになりました(もっとも、最初に表示されるゴミは相変わらずですが、、、。中国語のバナーかなんかかな?)。
 LOLIN WeMOS, WeMOSで4種類ありますが、取り敢えず、どれでも動いていますが、正しくはメモリの量などでちゃんと選ぶ必要があるのでしょう



早速、ブレッドボード上にDHT11を乗っけてWiFiで定期的に温度湿度を送信できるようにしてみました。 「わーお、なんて簡単なんでしょ。 プルアップ抵抗も何もいらず、あまりにも簡単」


スケッチは、以前作ったもののコピペで、、、。 消費電力を抑えるためにdeepsleep()を使って1時間毎に! ただし、以前deepsleep()では1時間は出来なかったように記憶していたので、ググってみたら、ココが出てきましたが、実際にやるとやはり60分を指定するとうまくゆかないので、30分にすることにしました。 何故60分が出来ないんだろう?

deepsleep()を利用するために、RSTとDPIO16(D0)を接続する必要がありますが、これ接続しておくと、スケッチの書き込みが出来なくなるので、スケッチの書き込みが終了した後にD0とRSTをショートさせる必要があります。

後は、来週以降PPかなんかの容器に入れて、太陽電池とリチウム電池の電源で実際にどの位の期間使えるのか、検証することにします。

 3-4年前に購入した素のESP8266-WROOM2が幾つかあるのですが、うまくプログラムの書き込みが出来なくて、このままでは廃棄かな? 今更メンドクサくなってしまいました。

参考にした記事; 
 WeMos D1 (ESP8266) を動かす
 Get started with Arduino[D1/D1 mini series] 
   ESP8266の真骨頂Deep-Sleepモードの使い方

   ESP-WROOM-02のDeep-sleepはどれだけ寝ていられるのか 



====== Sketch =======

/*
    This sketch establishes a TCP connection to a "quote of the day" service.
    It sends a "hello" message, and then prints received data.
*/

#include 
#include 

#ifndef STASSID
#define STASSID "XXXXXXXX"
#define STAPSK  "YYYYYYYYYYYYY"
#define IDENTIFIER "Garden Center"




//#define IDENTIFIER "Garden East"
//#define IDENTIFIER "Garden West"
#endif
#define DHTPIN 14
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);

const char* ssid     = STASSID;
const char* password = STAPSK;
const char* Identifier = IDENTIFIER;

const char* host = "192.168.1.3";
const uint16_t port = 80;

void setup() {
  Serial.begin(115200);
  // We start by connecting to a WiFi network
  /* Explicitly set the ESP8266 to be a WiFi-client, otherwise, it by default,
     would try to act as both a client and an access-point and could cause
     network-issues with your other WiFi-devices on your WiFi-network. */
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
  // dht to start
  dht.begin();
}

void loop() {
  // Serial.print("connecting to ");
  // Serial.print(host);
  // Serial.print(':');
  // Serial.println(port);

  // Use WiFiClient class to create TCP connections
  WiFiClient client;
  if (!client.connect(host, port)) {
    Serial.println("connection failed");
    delay(5000);
    return;
  }

  // Reading temperature or humidity takes about 250 milliseconds!
  // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
  float h = dht.readHumidity();
  // Read temperature as Celsius (the default)
  float t = dht.readTemperature();
  // Read temperature as Fahrenheit (isFahrenheit = true)
  float f = dht.readTemperature(true);
  // Check if any reads failed and exit early (to try again).
  if (isnan(h) || isnan(t) || isnan(f)) {
    Serial.println("Failed to read from DHT sensor!");
    delay(100);
    return;
  }
    // Compute heat index in Fahrenheit (the default)
  float hif = dht.computeHeatIndex(f, h);
  // Compute heat index in Celsius (isFahreheit = false)
  float hic = dht.computeHeatIndex(t, h, false);
  Serial.print("Temperature: ");
  Serial.print(t);
  Serial.print(" *C\t");
  //Serial.print(f);
  //Serial.print(" *F\t");
  Serial.print("; Humidity: ");
  Serial.print(h);
  Serial.print(" %\t");
  Serial.print("Heat index: ");
  Serial.print(hic);
  Serial.print(" *C ");
  // Serial.print(hif);
  // Serial.println(" *F");

  // WEB serverにデータをアップロードする。
  String url = "/weather/weather_log.php";
        url += "?location=" + String(Identifier); // ID to identify location
        url += "&temperature="+String(t);
        url += "&humidity=" +String(h);
  Serial.print("Requesting URL: ");
  Serial.println("GET "+url);
  client.print(String("GET ") + url + " HTTP/1.1\r\n" +
                "Host: " + host + "\r\n" +
                "Connection: close\r\n\r\n");
  delay(50); 
  // Read all the lines of the reply from server and print them to Serial
  Serial.println("Returned message from server: ");
  while(client.available()){
    String line = client.readStringUntil('\r');
    Serial.print(line);
  }
  client.stop();
  // 30分deepsleepする。
  ESP.deepSleep(30*60*1000*1000, WAKE_RF_DEFAULT); // 60*1000*1000 = 1min, 30 min
  delay(1000); // execute once every 5 minutes, don't flood remote service
}
 







2016年1月26日火曜日

ESP-WROOM-02を使ってみるー気温、湿度モニター

思い通りに動くので気をよくして、温度湿度モニターまで進めることに、、、。
手元に秋月で買ったDHT11があったので早速動かしてみることにした。 DHT11を使ったモニタはArduinoIDEのスケッチのサンプルにDHTtesterというのがあるので、それを使いました。 全く問題なく動くことを確認したので、これにWiFiClient機能を追加しました。  サーバーにLoggerを立てていないので、実際に接続しての動作は確認していませんが、文字列として確かに送信されているので、動作しているようです。 deep sleepを60分にして、シリアルモニターで動作確認を実施中。 これがうまくゆけば、取りあえず庭で使う温湿度計として筐体を含めて検討することにします。 (サーバープログラムはphpでもデータを取得時間とともにファイルに書き込むだけなので省略)

あれ、deep sleepがこれでは動きません?! メッセージが文字化けしているので、どうなっているのか、見当がつかない。
参考文献3を見て、簡単なプログラムで確認したのですが、何故か立ち上がらない(PG startが出てこない!)。  使ったボードの内部でRSTがどっかに接続されているとか、、、。 SwitchScienceのfull set versionでもう一度確認する必要がありますが、少なくともこのボードではdeep sleepが使えないのかもしれません。(要確認)



次は土壌水分のセンサーの検討を始めなくては、、、。


参考にした記事:
  WROOM から温度湿度センサー値を スマホ ストリーミング 表示
  ESP-WROOM-02 を使った リモート温度・湿度・気圧計の製作
   ESP8266の真骨頂Deep-Sleepモードの使い方 
   ESP-WROOM-02プログラミング:スリープのテスト


20160127 追記 > apahce24/php55をFreeBSDサーバに立ち上げて、取りあえずデータ送信の確認。 phpは10年近く前に弄ったことがありましたが大きなプログラムを書くのには適さないのとデバグが面倒で捨てましたが、今回もちっちゃなプログラムの癖して . (ピリオド)が一個抜けていて手こずりました。 その上に、スケッチも”Connection: close\r\:n\r\n"のコロンがセミコロンになっていたのに気が付くのに半日掛かってしまいました。 目が悪いkとを言い訳にしよう!!
 取りあえず、これでサーバにデータの蓄積は出来るようになりましたので、csvでなくてPostgreSQLに蓄積させてゆくようにしよう! ave/min/max等便利な関数があるので、データを取り出すときの処理が簡単になる可能性がありますし、データの安全性も向上させることが出来ますので、、、。 何故PostgreSQLって? 慣れているから。


================== WeatherMonitorUsing DHT11.ino ====================
// Example testing sketch for various DHT humidity/temperature sensors

#include "DHT.h"
#include

#define DHTPIN 5     // Use IO5

// Uncomment whatever type you're using!
#define DHTTYPE DHT11   // DHT 11

// Initialize DHT sensor.
DHT dht(DHTPIN, DHTTYPE);

const char* ssid = "Buffalo-G-4CC0"; // SSID to access network
const char* password = "65rhwrit3nnee"; // password to connect to the network
const char* host = "192.168.1.3"; // host address
const char* Identifier = "A";  // Identifier to locate the monitor

// Create an instance of the server
// specify the port to listen on as an argument
WiFiServer server(80);

unsigned long number = 0;
 
void setup() {
  Serial.begin(115200);
  Serial.println("DHTxx test!");
   
  delay(10);
  // We start by connecting to a WiFi network
  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);
 
  WiFi.begin(ssid, password);
 
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
 
  Serial.println("");
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
  // DHT11 to start.
  dht.begin();
}
int value = 0;

void loop() {
  // Wait a few seconds between measurements.
  delay(5000);
  ++value;

  // Reading temperature or humidity takes about 250 milliseconds!
  // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
  float h = dht.readHumidity();
  // Read temperature as Celsius (the default)
  float t = dht.readTemperature();
  // Read temperature as Fahrenheit (isFahrenheit = true)
  float f = dht.readTemperature(true);
  // Check if any reads failed and exit early (to try again).
  if (isnan(h) || isnan(t) || isnan(f)) {
    Serial.println("Failed to read from DHT sensor!");
    return;
  }

  // Compute heat index in Fahrenheit (the default)
  float hif = dht.computeHeatIndex(f, h);
  // Compute heat index in Celsius (isFahreheit = false)
  float hic = dht.computeHeatIndex(t, h, false);
  Serial.print("Temperature: ");
  Serial.print(t);
  Serial.print(" *C\t");
  Serial.print(f);
  Serial.print(" *F\t");
  Serial.print("; Humidity: ");
  Serial.print(h);
  Serial.print(" %\t");
  Serial.print("Heat index: ");
  Serial.print(hic);
  Serial.print(" *C ");
  Serial.print(hif);
  Serial.println(" *F");

  // Use WiFiClient class to create TCP connection
  Serial.print("connecting to ");
  Serial.println(host);
  WiFiClient client;
  const int httpPort = 80;
  if (!client.connect(host, httpPort)){
    Serial.println("connection failed");
    //return;
  }
  String url = "/temperature/tempera_log.php";
        url = url + "?ID"= Identifier; // ID to identify location
        url = url + "&temperature="+String(t);
        url = url + "&humidity=" +String(h);
  Serial.print("Requesting URL: ");
  Serial.println(url);

  client.print(String("Get ")+url+" HTTP/1.1\r\n"
                + "Host: " + host + "\r\n"
                + "Connection; close\r\n\r\n");   <--- connection="" span="">
  delay(10);
   
  // Read all the lines of the reply from server and print them to Serial
  while(client.available()){
    String line = client.readStringUntil('\r');
    Serial.print(line);
  }
 
  Serial.println();
  Serial.println("closing connection");

 //ESP8266 Deep Sleap mode
 //1:μ秒での復帰までのタイマー時間設定 (60分)  2:復帰するきっかけの設定(モード設定)
  ESP.deepSleep(60 * 60 * 1000 * 1000 , WAKE_RF_DEFAULT); 

  //deepsleepモード移行までのダミー命令
  delay(1000);
}

=================================================================


  

同軸ケーブルCの高周波耐圧

3バンドダイポールのトラップCに同軸ケーブルを使っていますが、時々この同軸Cが放電して壊れることがあり、「トラップで発生する電圧ってそんな高いの?」 と思っていましたが、実際の電圧については?? (計算する方法ご存じの方教えてください)。 左から8D,8D,10D,左だけ通常の防...