在上一个教程中,我们使用DS3231和ESP32制作了RTC时钟。为了最小化硬件要求,我们将不使用RTC模块制作Internet时钟。与RTC时钟相比,这更准确。ESP32是一个Wi-Fi模块,可以轻松连接到互联网,因此我们将使用NTP(网络时间协议)和UDP(用户数据报协议)来使用Wi-Fi从互联网获取时间。在构建IoT项目时,此Internet时钟可能非常有用。
什么是NTP?
网络时间协议(NTP)是一种网络协议,用于同步系统与数据网络之间的时间。NTP框架取决于Internet时间服务器。NTP具有精确调整一天中时间的算法。NTP服务器具有使用UDPport 123将时钟的时间发送到客户端计算机的软件。因此,在此项目中,我们使用ESP32从NTP服务器获取时间并将其显示在OLED显示屏上。
所需材料:
- ESP32
- 128 * 64 OLED显示屏
- 面包板
- 公母线
电路原理图:
在这里,我们使用 SPI模式将我们的128×64 OLED显示模块(SSD1306)连接 到ESP32。因此,它将使用7个引脚。与ESP32的连接如下:
- OLED的CS(芯片选择)引脚-> ESP32的PIN D5
- OLED的DC引脚-> ESP32的PIN D4
- OLED的RES引脚-> ESP32的PIN D2
- OLED的SDA引脚-> PIN D23,即ESP32的MOSI
- OLED的SCK引脚-> PIN D18,即ESP32的SCK
- OLED的Vdd-> ESP32的Vcc
- OLED的GND-> ESP32的GND
ESP32需要板文件。用于ESP32开发套件的Arduino IDE的签入板管理器下拉菜单。如果不存在,请遵循以下链接中给出的步骤:
circuitdigest.com/microcontroller-projects/getting-started-with-esp32-with-arduino-ide
您还可以在此项目中使用ESP12,在此处了解如何使用ESP12。
如上一篇文章所述,我们将使用Arduino IDE编写程序。
代码说明:
本文末尾提供了ESP32 Internet Clock的完整代码。在这里,我们解释了代码的几个重要部分。
我们需要在代码中使用几个库,这些库可以从以下链接下载:
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名称和密码的变量。
#包括
此处 NTPClient.h 库用于连接时间服务器。从NTP服务器花费时间并保持同步。Hhre WiFiUdp.h库用于发送和接收UDP消息。UDP是一种协议,可以从我们的系统向NTP服务器发送和接收短消息。
因此,为了从Internet上获取时间,我们必须在NTP程序中定义三个变量。
NTP_OFFSET ,这是您所在国家/地区的时区,例如,印度为+5:30小时。所以是19800秒。
NTP_INTERVAL ,这是NTP更新时间所用的时间间隔。这是60-64秒。
NTP_ADDRESS 是您所在国家/地区的NTP服务器。对于印度,您可以使用“ in.pool.ntp.org ”。
#define NTP_OFFSET 19800 //以秒为单位 #define NTP_INTERVAL 60 * 1000 //以毫秒为单位 #define NTP_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,密码); 而(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,您的Internet Clock准备显示时间了。