前のチュートリアルでは、DS3231とESP32を使用してRTCクロックを作成しました。ハードウェア要件を最小限に抑えるために、RTCモジュールを使用せずにインターネットクロックを作成します。これは、RTCクロックと比較してより正確です。ESP32はWi-Fiモジュールであり、インターネットに簡単に接続できるため、NTP(ネットワークタイムプロトコル)とUDP(ユーザーデータグラムプロトコル)を使用して、Wi-Fiを使用してインターネットから時間を取得します。このインターネット時計は、IoTプロジェクトを構築する際に非常に役立ちます。
NTPとは??
ネットワークタイムプロトコル(NTP)は、システムとデータネットワーク間の時刻の同期に使用されるネットワークプロトコルです。NTPフレームワークは、インターネットタイムサーバーに依存しています。NTPには、時刻を正確に調整するためのアルゴリズムがあります。NTPサーバーには、UDPポート123を使用してクライアントコンピューターに時刻を送信するソフトウェアがあります。したがって、このプロジェクトでは、ESP32を使用してNTPサーバーから時刻を取得し、OLEDディスプレイに表示します。
必要な材料:
- ESP32
- 128 * 64OLEDディスプレイ
- ブレッドボード
- オス-メスワイヤー
回路図:
ここでは、 SPIモードを使用して128×64 OLEDディスプレイモジュール(SSD1306) をESP32に接続しています。したがって、7ピンを使用します。ESP32との接続は次のように与えられます。
- OLEDのCS(チップセレクト)ピン-> ESP32のPIND5
- OLEDのDCピン-> ESP32のPIND4
- OLEDのRESピン-> ESP32のPIND2
- OLEDのSDAピン-> PIN D23、つまりESP32のMOSI
- OLEDのSCKピン-> PIN D18、つまりESP32のSCK
- OLEDのVdd-> ESP32のVcc
- OLEDのGND-> ESP32のGND
ESP32用のボードファイルが必要です。ESP32開発キット用のArduinoIDEのチェックインボードマネージャードロップダウンメニュー。表示されない場合は、以下のリンクに記載されている手順に従ってください。
circuitdigest.com/microcontroller-projects/getting-started-with-esp32-with-arduino-ide
このプロジェクトでESP12を使用することもできます。ここで、ESP12の使用方法を学習してください。
上記の記事で説明したように、ArduinoIDEを使用してプログラムを作成します。
コードの説明:
ESP32インターネットクロックの完全なコード は、記事の最後に記載されています。ここでは、コードのいくつかの重要な部分について説明します。
以下のリンクからダウンロードできるコードで使用するいくつかのライブラリが必要です。
1. Adafruit_SSD1306:https://github.com/adafruit/Adafruit_SSD1306
2. SPI:https://github.com/PaulStoffregen/SPI
3. Adafruit_GFX:https://github.com/adafruit/Adafruit-GFX-Library
4. NTPClient:https://github.com/arduino-libraries/NTPClient
5.WiFiUdp:https://github.com/esp8266/Arduino/tree/master/libraries/ESP8266WiFi
そのため、Wi-Fi名とパスワードを入力するためのすべてのライブラリと定義済み変数が含まれています。
#include
ここでは、 NTPClient.h ライブラリを使用してタイムサーバーに接続します。NTPサーバーからの時間がかかり、同期を維持します。また、Hhre WiFiUdp.hライブラリは、UDPメッセージの送受信に使用されます。UDPは、システムとNTPサーバーとの間でショートメッセージを送受信するプロトコルです。
したがって、インターネットから時間を取得するには、NTPのプログラムで3つの変数を定義する必要があります。
あなたの国のタイムゾーンである NTP_OFFSET 、つまりインドの場合は+5:30時間です。つまり、秒単位で19800です。
NTP_INTERVAL は、NTPが時間を更新するのにかかる時間間隔です。60〜64秒です。
NTP_ADDRESS は、お住まいの国のNTPサーバーです。インドの場合は、「 in.pool.ntp.org」を使用できます。
#define NTP_OFFSET 19800 //秒単位 #defineNTP_INTERVAL 60 * 1000 //ミリ秒 単位#defineNTP_ADDRESS "1.asia.pool.ntp.org" WiFiUDP ntpUDP; NTPClient timeClient(ntpUDP、NTP_ADDRESS、NTP_OFFSET、NTP_INTERVAL);
では 、セットアップ 機能、インターネットに接続するためのWi-Fi設定初期化します。
void setup() { display.begin(); Serial.begin(9600); Serial.println(); Serial.println(); Serial.print( "接続中"); Serial.println(ssid); WiFi.begin(ssid、password); while(WiFi.status()!= WL_CONNECTED) { delay(500); Serial.print( "。"); } Serial.println( ""); Serial.println( "WiFi接続。"); Serial.println( "IPアドレス:"); Serial.println(WiFi.localIP()); timeClient.begin();
次に、表示機能を初期化して、OLEDに時間を表示します。
display.begin(SSD1306_SWITCHCAPVCC);
ループ関数では、 timeClient.update() を使用し ました。 この関数は、文字列の形式でNTPから更新された時間を取得し、 formattedTime 変数に格納します。次に、 display.println() 関数を使用してOLEDに表示します。
void loop() { timeClient.update(); 文字列formattedTime = timeClient.getFormattedTime(); display.clearDisplay(); display.setTextSize(2); //必要に応じてこれらのパラメータを設定します 。display.setCursor(0、0); display.println(formattedTime);
完全なプログラムを以下に示します。最後に、Arduino IDEでESP32をプログラムすると、インターネット時計が時間を表示する準備が整います。