組み込みのタイマーはそれほど正確ではないため、ESP32 またはその他のマイクロコントローラーの時間を使用することは非常に重要です。 NTP サーバーはリアルタイムでフェッチし、後で ESP32 コード内で使用できる変数内に格納できます。
ネットワーク タイム プロトコル (NTP) は、システム クロックを高い精度と精度で同期させる協定世界時 (UTC) を使用します。小規模なネットワークでは、NTP は 1 ミリ秒の精度のクロックを提供できますが、LAN (ローカル エリア ネットワーク) NTP などの大規模なネットワークでは、インターネット上で数十ミリ秒の精度を提供できます。この正確なクロックを使用して、ESP32 は特定の時間に命令を実行できます。
このガイドには、次の内容が含まれています。
1: NTP (Network Time Protocol) の紹介
NTP は の頭字語です。 N ネットワーク T する P rotocol は、デバイスの時刻をタイム ゾーンと同期するために使用される標準です。ネットワーク タイム プロトコルは、すべてのネットワーク デバイスの時刻を協定世界時とも呼ばれる UTC と同期させます。
UTC は GMT (グリニッジ標準時) に似ていますが、変更されることはなく、世界中で同じままです。 UTC を使用する主な目的は、UTC から時刻を読み取ることです。 NTP サーバーに接続し、UTC オフセットを適用することで、タイム ゾーンに従って現地時間を取得できます。
2: NTP サーバーと時刻の設定
NTP サーバーから時刻を読み取るには、NTP サーバーから時刻を取得できるこれらの変数を使用して、コード内で次の変数を宣言する必要があります。
- NTP サーバー
- GMT オフセット
- 昼光オフセット
2.1: NTP サーバー
から時間をリクエストします。 pool.ntp.org これにはサーバー上の世界時間データが含まれており、誰でもこのプールを使用してローカル時間を要求できます。以下は、アクセスできる他のサーバーです。
領域 | ホスト名 |
---|---|
世界的に | pool.ntp.org |
アジア | asia.pool.ntp.org |
ヨーロッパ | europe.pool.ntp.org |
北米 | north-america.pool.ntp.org |
オセアニア | Oceania.pool.ntp.org |
南アメリカ | south-america.pool.ntp.org |
2.2: GMT オフセット
GMTオフセットは、あなたが住んでいるタイムゾーンとGMTとの間の時差を時間単位で表します.たとえば、米国のタイム ゾーンを使用する場合は、次のように設定できます。 UTC = -11:00 .
2.3: 昼光オフセット
ここでのサマータイム オフセットは、通常 1 時間とされるサマータイムです。サマータイムとは、夏に時計を 1 時間進め、冬に戻すことです。このコマンドは通常、カスタム タイム ゾーンが使用され、夏時間ルールが適用される場合に使用されます。
NTP サーバーの基本について説明したので、NTP サーバーにリクエストを送信し、Arduino IDE コードで ESP32 を使用して現地時間を読み取る方法を確認します。
3: printLocalTime() 関数を使用してリアルタイムで印刷する
の printLocalTime() 関数は getLocalTime() NTP サーバーにリクエストを送信し、受信した日付と時刻を 時間情報 変数。
3.1: リアルタイムで出力するコード
Arduino IDE エディターに NTP クライアント サーバーの所定のコードを貼り付けます。 ESP32 を PC に接続し、COM ポートを選択してコードをアップロードします。
#include#include 'time.h'
定数文字 * ssid = 'REPLACE_WITH_YOUR_SSID';
定数文字 * パスワード = “REPLACE_WITH_YOUR_PASSWORD”;
定数文字 * ntp サーバー = 'pool.ntp.org' ;
const long gmtOffset_sec = 18000 ; /* GMT オフセット + 5 時間 ( 18000 SEC ) */
const int daylightOffset_sec = 3600 ; /* 1 時間夏時間オフセット */
void printLocalTime ( )
{
struct tm timeinfo;
もしも ( ! getLocalTime ( & 時間情報 ) ) {
Serial.println ( 「時間の取得に失敗しました」 ) ;
戻る ;
}
Serial.println ( & 時間情報、 '%A, %B %d %Y %H:%M:%S' ) ;
}
ボイド設定 ( )
{
Serial.begin ( 115200 ) ;
/// WiFiに接続する
シリアル.printf ( '%s に接続しています' 、ssid ) ;
WiFi.begin ( ssid、パスワード ) ;
その間 ( WiFi ステータス ( ) ! = WL_CONNECTED ) {
遅れ ( 500 ) ;
シリアルプリント ( 「。」 ) ;
}
Serial.println ( 「接続しました」 ) ;
/// 初期化して取得 時間
configTime ( gmtOffset_sec、daylightOffset_sec、ntpServer ) ;
printLocalTime ( ) ;
/// WiFi を切断する なので それ はもう必要ありません
WiFi.disconnect(真);
WiFi.mode(WIFI_OFF);
}
空ループ()
{
遅延 (1000);
printLocalTime();
}
コードは、WiFi と時間ライブラリを含めることから始まりました。 Wi-Fi ライブラリは、ESP32 をネットワークに接続するのに役立ちます。 時間 ライブラリは NTP サーバーの同期を処理します。
その後、ESP32 が接続するネットワークの SSID とパスワードが定義されます。ここでネットワーク資格情報を置き換えます。その後、定義しました GMT オフセット (UTC+5 時間) である 18000 秒として。ここで、独自のタイム ゾーン UTC を置き換えることができます。フォローする リンク を取得するには GMT オフセット あなたのタイムゾーンのために。
さらに、次のコマンドを使用して NTP サーバー アドレスを指定します。
定数文字 * ntp サーバー = 'pool.ntp.org' ;このコマンドは、あなたを検索するタイム サーバーを自動的に選択します。ただし、 で説明されている NTP サーバーを使用してタイム ゾーンを設定することもできます。 NTP サーバー セクション。
最後に、ESP32 を NTP クライアントとして構成し、日付と時刻を取得します。そのために、 configTime() 関数。
最後に、 printLocalTime() 機能を使用すると、現在の日付と時刻がシリアル モニタに出力されます。この関数には時間構造が含まれています tm すべての情報を 時間情報 変数。
次のコマンドは、 時間情報 構造。
Serial.println ( & 時間情報、 '%A, %B %d %Y %H:%M:%S' ) ;時間構造の各文字は、特定の情報に関連しています。
指定子 | 情報 |
---|---|
%A | 曜日を返す |
%B | 返却月 |
%d | 月の戻り日 |
%Y | 現在の年を返す |
%H | 現在の時間を返す |
%M | 現在の分を返す |
%S | 現在の秒数を返す |
3.2: 出力
コードをアップロードした後、ESP32 は WiFi ネットワークに接続し、NTP サーバーにリクエストを送信して現在の日付と時刻を受け取ります。次の出力は、Arduino シリアル モニターで確認できます。
私のPCとESP32の現在の時刻は一致しています。
ESP32 をクライアントとして使用して、NTP サーバーから時刻を読み取ることができました。
結論
タイム スタンプや特定の時間に命令を実行して出力を生成するなどのアプリケーションにとって、時間は非常に重要です。組み込みのタイマーはそれほど正確ではないため、NTP サーバーを使用して現在の時刻と日付を読み取ることができます。今回は変数に格納して、コード内で使用できます。このレッスンは、ESP32 を使用して世界中の任意のタイム ゾーンの正確な時刻を取得するのに役立ちます。