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はどれだけ寝ていられるのか 


  1. ====== Sketch =======
  2. /*
  3.     This sketch establishes a TCP connection to a "quote of the day" service.
  4.     It sends a "hello" message, and then prints received data.
  5. */
  6. #include
  7. #include
  8. #ifndef STASSID
  9. #define STASSID "XXXXXXXX"
  10. #define STAPSK  "YYYYYYYYYYYYY"
  11. #define IDENTIFIER "Garden Center"
  12. //#define IDENTIFIER "Garden East"
  13. //#define IDENTIFIER "Garden West"
  14. #endif
  15. #define DHTPIN 14
  16. #define DHTTYPE DHT11
  17. DHT dht(DHTPIN, DHTTYPE);
  18. const char* ssid     = STASSID;
  19. const char* password = STAPSK;
  20. const char* Identifier = IDENTIFIER;
  21. const char* host = "192.168.1.3";
  22. const uint16_t port = 80;
  23. void setup() {
  24.   Serial.begin(115200);
  25.   // We start by connecting to a WiFi network
  26.   /* Explicitly set the ESP8266 to be a WiFi-client, otherwise, it by default,
  27.      would try to act as both a client and an access-point and could cause
  28.      network-issues with your other WiFi-devices on your WiFi-network. */
  29.   WiFi.mode(WIFI_STA);
  30.   WiFi.begin(ssid, password);
  31.   while (WiFi.status() != WL_CONNECTED) {
  32.     delay(500);
  33.     Serial.print(".");
  34.   }
  35.   Serial.println("");
  36.   Serial.println("WiFi connected");
  37.   Serial.println("IP address: ");
  38.   Serial.println(WiFi.localIP());
  39.   // dht to start
  40.   dht.begin();
  41. }
  42. void loop() {
  43.   // Serial.print("connecting to ");
  44.   // Serial.print(host);
  45.   // Serial.print(':');
  46.   // Serial.println(port);
  47.   // Use WiFiClient class to create TCP connections
  48.   WiFiClient client;
  49.   if (!client.connect(host, port)) {
  50.     Serial.println("connection failed");
  51.     delay(5000);
  52.     return;
  53.   }
  54.   // Reading temperature or humidity takes about 250 milliseconds!
  55.   // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
  56.   float h = dht.readHumidity();
  57.   // Read temperature as Celsius (the default)
  58.   float t = dht.readTemperature();
  59.   // Read temperature as Fahrenheit (isFahrenheit = true)
  60.   float f = dht.readTemperature(true);
  61.   // Check if any reads failed and exit early (to try again).
  62.   if (isnan(h) || isnan(t) || isnan(f)) {
  63.     Serial.println("Failed to read from DHT sensor!");
  64.     delay(100);
  65.     return;
  66.   }
  67.     // Compute heat index in Fahrenheit (the default)
  68.   float hif = dht.computeHeatIndex(f, h);
  69.   // Compute heat index in Celsius (isFahreheit = false)
  70.   float hic = dht.computeHeatIndex(t, h, false);
  71.   Serial.print("Temperature: ");
  72.   Serial.print(t);
  73.   Serial.print(" *C\t");
  74.   //Serial.print(f);
  75.   //Serial.print(" *F\t");
  76.   Serial.print("; Humidity: ");
  77.   Serial.print(h);
  78.   Serial.print(" %\t");
  79.   Serial.print("Heat index: ");
  80.   Serial.print(hic);
  81.   Serial.print(" *C ");
  82.   // Serial.print(hif);
  83.   // Serial.println(" *F");
  84.   // WEB serverにデータをアップロードする。
  85.   String url = "/weather/weather_log.php";
  86.         url += "?location=" + String(Identifier); // ID to identify location
  87.         url += "&temperature="+String(t);
  88.         url += "&humidity=" +String(h);
  89.   Serial.print("Requesting URL: ");
  90.   Serial.println("GET "+url);
  91.   client.print(String("GET ") + url + " HTTP/1.1\r\n" +
  92.                 "Host: " + host + "\r\n" +
  93.                 "Connection: close\r\n\r\n");
  94.   delay(50);
  95.   // Read all the lines of the reply from server and print them to Serial
  96.   Serial.println("Returned message from server: ");
  97.   while(client.available()){
  98.     String line = client.readStringUntil('\r');
  99.     Serial.print(line);
  100.   }
  101.   client.stop();
  102.   // 30分deepsleepする。
  103.   ESP.deepSleep(30*60*1000*1000, WAKE_RF_DEFAULT); // 60*1000*1000 = 1min, 30 min
  104.   delay(1000); // execute once every 5 minutes, don't flood remote service
  105. }
  106.  

0 件のコメント:

RM Noise

最近Galaxyの携帯のCMで風のノイズ除去をしているシーンが気になっていて、「AIで処理すれば、ノイズ除去性能は上がるのでは?」なんて思いながら、 AIのopen source?の Hagging face をブラブラしていましたら、何故かFacebookで RM noize ...