基于ESP32和OLED显示屏的互联网时钟

描述

为了尽量减少硬件要求,我们将在不使用RTC模块的情况下制作互联网时钟。与RTC时钟相比,这更准确。ESP32 是一个 Wi-Fi 模块,可以轻松连接到互联网,因此我们将使用 NTP(网络时间协议)和 UDP(用户数据报协议)使用 Wi-Fi 从互联网上获取时间。

什么是 NTP??

网络时间协议(NTP) 是一种网络协议,用于在系统和数据网络之间同步时间。NTP 框架依赖于 Internet Time 服务器。NTP 具有精确调整一天中时间的算法。NTP 服务器具有使用 UDP端口 123 将时钟的时间发送到客户端计算机的软件。因此,在本项目中,我们将使用 ESP32 从 NTP 服务器获取时间,并将其显示在 OLED 显示屏上。

ESP32

所需材料:

ESP32

128*64 OLED显示屏

面包板

公母线

威廉希尔官方网站 图:

ESP32

在这里,我们使用SPI 模式将 128×64 OLED 显示模块 (SSD1306) 连接到 ESP32。因此,它将使用 7 个引脚。与 ESP32 的连接方式如下:

OLED 的 CS(片选)引脚 -ESP32 的 > 引脚 D5

OLED 的直流引脚 -ESP32 的 > 引脚 D4

OLED 的 RES 引脚 -ESP32 的 > 引脚 D2

OLED 的 SDA 引脚 -> 引脚 D23 即 ESP32 的 MOSI

OLED 的 SCK 引脚 -> 引脚 D18 即 ESP32 的 SCK

OLED 的 Vdd -ESP32 的 > Vcc

OLED 的 GND -ESP32 的 GND >

我们包含了所有库和定义的变量,用于输入Wi-Fi名称和密码。

#include

#include

#include

#include

#include

#include

const char* ssid     = "*******";                          //WiFi Name

const char* password = "*********";                   // WiFi Password

这里NTPClient.h库用于连接时间服务器。NTP 服务器需要时间并保持同步。HhreWiFiUdp.h库用于发送和接收UDP消息。UDP 是一种从我们的系统向 NTP 服务器发送和接收短消息的协议。

因此,为了从互联网上获取时间,我们必须在程序中为 NTP 定义三个变量。

NTP_OFFSET哪个是您所在国家/地区的时区,即对于印度,它是+5:30小时。所以它是 19800 秒。

NTP_INTERVAL这是 NTP 更新时间所花费的时间间隔。它是60-64秒。

NTP_ADDRESS是您所在国家/地区的 NTP 服务器。对于印度,您可以使用“in.pool.ntp.org”。

#define NTP_OFFSET  19800 // In seconds

#define NTP_INTERVAL 60 * 1000    // In miliseconds

#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("Connecting to ");

Serial.println(ssid);

WiFi.begin(ssid, password);

while (WiFi.status() != WL_CONNECTED)

{

delay(500);

Serial.print(".");

}

Serial.println("");

Serial.println("WiFi connected.");

Serial.println("IP address: ");

Serial.println(WiFi.localIP());

timeClient.begin();

然后初始化显示函数以在OLED上显示时间。

display.begin(SSD1306_SWITCHCAPVCC);

在循环函数中,我们使用了timeClient.update(),这个函数以字符串的形式从NTP获取更新的时间,并将其存储在formattedTime变量中。然后使用 display.println() 函数在 OLED 上显示它。

void loop()

{

timeClient.update();

String formattedTime = timeClient.getFormattedTime();

display.clearDisplay();

display.setTextSize(2);                         // set these parameters according to your need..

display.setCursor(0, 0);

display.println(formattedTime);

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分