ESP32 チュートリアル 43/55 - IoT インターネット気象観測所 | SunFounder の ESP32 IoT 学習キット
このチュートリアルでは、ESP32とSunFounderのカメラ拡張ボードを使用して、インターネット接続の気象ステーションを構築します。このプロジェクトでは、ESP32が気温や湿度を含むリアルタイムの気象データを取得し、それをLCDスクリーンに表示することができます。このアプリケーションは、ESP32の機能を紹介するだけでなく、外部APIからデータを取得して解析する方法も示しています。
チュートリアルを進めるにつれて、コンポーネントを配線し、コードを構成し、すべてがシームレスに機能することを確認します。最終的な結果は、10秒ごとに読み取りを更新し、現在の気象条件を明確に表示する完全に機能する気象ステーションになります(ビデオの00:30で)。
ハードウェアの解説
このプロジェクトで使用される主なコンポーネントには、ESP32マイクロコントローラー、LCDディスプレイ、および必要な配線が含まれます。ESP32は内蔵のWi-FiとBluetoothを備えており、インターネットに接続してデータを取得することができます。LCDディスプレイは、温度と湿度を含む現在の天気情報を表示します。
私たちが使用しているLCDは16x2の文字表示で、2行の各16文字を表示できることを意味します。これで私たちの天気情報の出力には十分です。ESP32はI2Cを介してLCDと通信し、わずか2本のデータラインを使うことで配線が簡素化されます。
データシートの詳細
| 製造業者 | エスプレスシフ |
| 部品番号 | ESP32-WROOM-32 |
| 論理/IO電圧 | 3.3 V |
| 供給電圧 | 3.0-3.6 V |
| 出力電流(チャネルごと) | 最大12 mA |
| ピーク電流(チャンネルあたり) | 40 mA |
| PWM周波数ガイダンス | 1 kHz |
| 入力ロジック閾値 | 0.3 V(低)、0.7 V(高) |
| 電圧降下 / RDS(on)/ 飽和度 | 0.5 V |
| 熱的限界 | -40から85 °C |
| パッケージ | QFN48 |
| ノート / バリアント | さまざまな用途に応じた複数のバリアントが含まれています。 |
- ESP32に安定した3.3Vの電源が供給されていることを確認してください。
- すべてのコンポーネントに共通の基盤を使用して、通信の問題を回避してください。
- I2Cスキャナーを使用してLCDのI2Cアドレスを確認してください。
- データ取得中の接続切れを避けるために、Wi-Fi接続の状態を監視してください。
- データ取得の堅牢性のためにJSONパースエラーを処理する。
配線指示
esp32-43-weather_station-wiringコンポーネントを配線するには、まずLCDをESP32に接続します。LCDはI2Cインターフェースを使用するため、LCDのSDAピンをESP32のGPIO21に、SCLピンをGPIO22に接続してください。LCDの電源ピンとグラウンドピンをそれぞれESP32の5VピンとGNDピンに接続することを確認してください。
次に、付属のリチウムバッテリーまたはUSB接続を使用してESP32が正しく電源供給されていることを確認してください。バッテリーはポータビリティを提供しますが、USB接続はプログラミングやデバッグに便利です。最後に、すべての接続が確実であることを確認し、機能を妨げる可能性のある緩い配線の問題を避けてください。
コード例とウォークスルー
プログラムのセットアップフェーズでは、シリアル通信を初期化し、提供されたSSIDとパスワードを使用してWi-Fiネットワークに接続します。以下のコードスニペットはWi-Fi接続を処理します。
WiFi.begin(ssid, password);
while(WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("Connected to WiFi network with IP Address: ");
Serial.println(WiFi.localIP());
このコードは、データ取得に進む前にESP32が指定されたWi-Fiネットワークに接続することを確保します。接続に失敗した場合、再接続を継続的に試みます。
次に、天気データを取得するためにHTTP GETリクエストを送信する必要があります。これは以下のコードスニペットを使用して実現されます:
String serverPath = "http://api.openweathermap.org/data/2.5/weather?q=" + city + "," + countryCode + "&units=metric" + "&APPID=" + openWeatherMapApiKey;
jsonBuffer = httpGETRequest(serverPath.c_str());
ここでは、都市、国コード、そして私たちのAPIキーを含むAPIリクエストのURLを構築します。httpGETRequest関数が呼び出されて、天気データを取得します。
最後に、JSONレスポンスを解析し、LCDに関連データを表示します。
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(time);
lcd.print(" ");
lcd.print(myObject["weather"][0]["main"]);
lcd.setCursor(0, 1);
lcd.print("T:");
lcd.print(myObject["main"]["temp"]);
lcd.print("\xDF"); // "°" char
lcd.print("C ");
lcd.print("H:");
lcd.print(myObject["main"]["humidity"]);
lcd.print("%");
このコードスニペットは、LCDディスプレイを現在の時刻、天候、気温、湿度で更新します。以前の表示をクリアし、各行の適切な位置にカーソルを設定します。
デモンストレーション / 期待すること
成功に配線とプログラミングが完了すると、あなたの天気予報ステーションはWi-Fiに接続し、10秒ごとに天気データを取得し始めます。現在の温度、湿度、気象条件がLCD画面に表示されます。ESP32がWi-Fiに接続できない場合、シリアルモニターにエラーメッセージを表示します。
OpenWeatherMapサービスからブロックされないように、API呼び出し制限に注意してください。データの取得に問題がある場合は、APIキーを確認し、都市と国コードが正しく指定されているかを確認してください(動画の15:45にて)。
ビデオのタイムスタンプ
- 00:00 開始
- 2:00 プロジェクトの紹介
- 5:04 OpenWeather アカウント
- 6:11 配線
- 8:05 Arduino コードの説明
- 14:13 ジェイソン コード内の要素
- 20:23 Arduino IDEでESP32ボードとCOMポートを選択中
- 22:05 LCD1602での気象ステーションのデモンストレーション
- 23:45 LCD2004での気象ステーションのデモンストレーション
画像
esp32-43-weather_station-main
esp32-43-weather_station-wiring
esp32-43-weather_station-main
esp32-43-weather_station-wiring
844-ESP32 Tutorial 43/55- Arduino code for IoT Internet Weather Station
言語: C++