【Arduino】 ESP32で雨をLINEでお知らせしてくれるデバイスの製作
イノ
イノの多趣味な記録
ESP32とDHT22を使用して、特定のHTTP(http://~)にアクセスすると、気温や湿度を取得出来るようなものを作ります。
ESP32とDHT22をそれぞれ、V5(VIN)とVCC、D13とS、GNDとGNDに接続します。
“DHT sensor library by Adafruit”、”ESPAsyncWebServer by ESP32Async”の2つのライブラリをインストールしてください。Arduino IDEのライブラリマネージャーからインストールできます。
追記:Arduino IDE 2.3.3で不具合が生じるようです。Arduino IDE2.3.2にて動作を確認できました。
ESPAsyncWebServer 3.7.7は動作が不安定でした。現状3.6.0が最も安定します。
IPアドレスはHTTP通信の際固定しておいたほうが良いので、固定しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 |
#include "DHT.h" #include <WiFi.h> #include <ESPAsyncWebServer.h> // WiFi設定 const char* ssid = "xxxxxx";//Wi-FiのSSID const char* password = "xxxxxx";//Wi-Fiのパスワード IPAddress ip(192, 168, 10, xxx); // ESP32のIPアドレス IPAddress gateway(xxx,xx, xx, xxx); // ESP32のゲートウェイ IPAddress subnet(255, 255, 255, 0); // ESP32のサブネット AsyncWebServer server(8080); //temperature、humidityを宣言 float temperature = 0.00; float humidity = 0.00; #define DHTPIN 13 // Digital pin connected to the DHT sensor #define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321 DHT dht(DHTPIN, DHTTYPE); void setup() { Serial.begin(115200); if (!WiFi.config(ip,gateway,subnet)){ Serial.println("Failed to configure!"); } WiFi.begin(ssid, password); // Wi-Fi接続完了 Serial.println("Connected to WiFi"); Serial.print("IP Address: "); Serial.println(WiFi.localIP()); // HTTPサーバーのエンドポイントを設定 server.on("/temperature", HTTP_GET, [](AsyncWebServerRequest *request){ String temperature_str = String(temperature, 1); // temperatureを文字列に変換 request->send(200, "text/plain", temperature_str); // temperatureの値を返す }); // HTTPサーバーのエンドポイントを設定 server.on("/humidity", HTTP_GET, [](AsyncWebServerRequest *request){ String humidity_str = String(humidity, 1); // humidityを文字列に変換 request->send(200, "text/plain", humidity_str); // humidityの値を返す }); // サーバー開始 server.begin(); Serial.println(F("DHTxx test!")); dht.begin(); } void loop() { // Wait a few seconds between measurements. delay(2000); float h = dht.readHumidity(); float t = dht.readTemperature(); 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(F("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(F("Humidity: ")); Serial.print(h); Serial.print(F("% Temperature: ")); Serial.print(t); Serial.print(F("°C ")); Serial.print(f); Serial.print(F("°F Heat index: ")); Serial.print(hic); Serial.print(F("°C ")); Serial.print(hif); Serial.println(F("°F")); //temperature、humidityに値を代入 temperature = t; humidity = h; } |
これで、ブラウザなどでhttp://IPアドレス:8080/temperatureにアクセスすると気温、http://IPアドレス:8080/humidityにアクセスすると湿度が返ってきます。尚、文字列データとして返ってくるので、計算に使用する際は注意してください。
あとはデータベースで収集したり、webに表示したりカスタマイズしてみてください。