注釈
こんにちは、SunFounderのRaspberry Pi & Arduino & ESP32愛好家コミュニティへようこそ!Facebook上でRaspberry Pi、Arduino、ESP32についてもっと深く掘り下げ、他の愛好家と交流しましょう。
参加する理由は?
エキスパートサポート:コミュニティやチームの助けを借りて、販売後の問題や技術的な課題を解決します。
学び&共有:ヒントやチュートリアルを交換してスキルを向上させましょう。
独占的なプレビュー:新製品の発表や先行プレビューに早期アクセスしましょう。
特別割引:最新製品の独占割引をお楽しみください。
祭りのプロモーションとギフト:ギフトや祝日のプロモーションに参加しましょう。
👉 私たちと一緒に探索し、創造する準備はできていますか?[ ここ]をクリックして今すぐ参加しましょう!
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形式で表示します。
提供された天気データ(気温、湿度、気圧、風速)を表示します。