WeatherTime スクリーン¶
このスケッチはWi-Fiネットワークに接続し、毎分OpenWeatherMapから天気データを取得し、NTPサーバーから現在時刻を取得し、OLEDスクリーンに日付、時刻、天気情報を表示します。
必要なコンポーネント
このプロジェクトには以下のコンポーネントが必要です。
全体のキットを購入すると便利です。こちらがリンクです:
名称 |
このキットのアイテム数 |
リンク |
---|---|---|
Elite Explorer Kit |
300+ |
以下のリンクから別々に購入することもできます。
コンポーネント紹介 |
購入リンク |
---|---|
- |
|
配線図
回路図
OpenWeather
OpenWeather APIキーの取得
OpenWeather は、OpenWeather Ltdが所有するオンラインサービスで、API経由でグローバルな天気データを提供しています。これには、現在の天気データ、予報、ナウキャスト、歴史的天気データが任意の地理的位置に含まれます。
OpenWeatherにログインするか、アカウントを作成します。
ナビゲーションバーからAPIページに移動します。
Current Weather Data を見つけて、サブスクライブをクリックします。
Current weather and forecasts collection の下で、適切なサービスにサブスクライブします。私たちのプロジェクトでは、Freeで十分です。
API keys ページからキーをコピーします。
それを
arduino_secrets.h
にコピーします。#define SECRET_SSID "<SSID>" // your network SSID (name) #define SECRET_PASS "<PASSWORD>" // your network password #define API_KEY "<OpenWeather_API_KEY>" #define LOCATION "<YOUR CITY>"
あなたの場所のタイムゾーンを設定します。
スウェーデンの首都ストックホルムを例に取ります。Googleで「stockholm timezone」と検索します。
検索結果で、「GMT+1」を見ることができますので、以下の関数のパラメータを
3600 * 1
秒に設定します。timeClient.setTimeOffset(3600 * 1); // Adjust for your time zone (this is +1 hour)
ライブラリのインストール
ライブラリをインストールするには、Arduinoライブラリマネージャーを使用し、「ArduinoMqttClient」、「FastLED」、「Adafruit GFX」、「Adafruit SSD1306」を検索してインストールします。
ArduinoJson.h
:JSONデータ(openweathermapから取得されたデータ)を扱うために使用します。
NTPClient.h
:リアルタイムの時間を取得するために使用します。
Adafruit_GFX.h
、 Adafruit_SSD1306.h
:OLEDモジュール用に使用します。
コードの実行
注釈
ファイル
06_weather_oled.ino
をelite-explorer-kit-main\iot_project\06_weather_oled
のパスから直接開くことができます。または、このコードをArduino IDEにコピーしてください。
注釈
コード内で、SSIDとパスワードは arduino_secrets.h
に格納されています。この例をアップロードする前に、自分のWiFiの認証情報でそれらを修正する必要があります。さらに、コードを共有または保存する際には、この情報を機密に保つためのセキュリティ対策を講じてください。
どのように動作するのか?
ライブラリと定義:
WiFiS3.h
:これは、特定のWiFiモジュールやボードに特有のライブラリで、WiFi接続を管理します。ArduinoJson.h
:このライブラリはJSONデータのデコード(およびエンコード)に使用されます。arduino_secrets.h
:機密データ(WiFiの認証情報など)が格納されている別のファイルです。これは、認証情報をメインコードから外しておくための良い習慣です。NTPClient & WiFiUdp:NTP(Network Time Protocol)サーバーから現在時刻を取得するために使用されます。
Adafruitライブラリ:OLEDディスプレイを管理するために使用されます。
さまざまなグローバル変数:これにはWiFiの認証情報、サーバーの詳細などが含まれ、スクリプト全体で使用されます。
setup()
:シリアル通信を初期化します。
WiFiモジュールのファームウェアバージョンをチェックして印刷します。
提供されたSSIDとパスワードを使用してWiFiネットワークに接続を試みます。
接続されたWiFiのステータス(SSID、IP、信号強度)を印刷します。
OLEDディスプレイを初期化します。
NTPクライアントを開始して現在時刻を取得し、タイムオフセットを設定します(この場合は8時間で、特定のタイムゾーンに対応する可能性があります)。
read_response()
:サーバーからの応答を読み取り、特にJSONデータ(
{
and}
で示される)を探します。JSONデータが見つかった場合、データをデコードして、気温、湿度、気圧、風速、風向きなどの天気の詳細を抽出します。
OLEDスクリーンに天気情報を表示する
displayWeatherData
関数を呼び出します。
httpRequest()
:既存の接続を閉じて、WiFiモジュールのソケットが空いていることを確認します。
OpenWeatherMapサーバーに接続を試みます。
接続された場合、
LOCATION
で定義された特定の場所(おそらくarduino_secrets.h
または他の場所で定義)の天気データを取得するためにHTTP GETリクエストを送信します。リクエストが行われた時間を記録します。
loop()
:サーバーからの受信データを処理するために
read_response
関数を呼び出します。NTPサーバーから時刻を更新します。
天気サーバーに別のリクエストを行う時刻かどうかをチェックします(
postingInterval
に基づいて)。そうであれば、httpRequest
関数を呼び出します。
printWifiStatus()
:接続されているネットワークのSSID。
ボードのローカルIPアドレス。
信号強度(RSSI)。
displayWeatherData()
:OLEDスクリーンをクリアします。
現在の曜日を表示します。
現在時刻をHH:MM形式で表示します。
提供された天気データ(気温、湿度、気圧、風速)を表示します。