ESP32-S3 RGB LED矩阵 Wi-Fi + NTP时间钟表项目 -1 基本钟表

ESP32-S3 RGB LED矩阵 Wi-Fi + NTP时间钟表项目 -1 基本钟表

ESP32-S3互联网时钟,配备8×8 NeoMatrix(Wi-Fi + NTP时间)

这个项目将一个ESP32-S3和一个8×8 RGB NeoMatrix(NeoPixel/WS2812)变成一个微型互联网时钟。ESP32连接到Wi-Fi,从NTP服务器同步本地时间,然后滚动显示时间。HH:MM在8×8显示屏上。

ESP32-s3互联网时钟动画

它是如何工作的(高层次)

ESP32-S3使用以下方式连接到您的路由器<WiFi.h>.
它通过使用NTP服务器同步时间"time.h"configTime().
时间格式为HH:MM并保存到一个小文本缓冲区中。
4) NeoMatrix 将文本渲染并在 8×8 面板上滚动。

RGB颜色

时钟文本颜色使用 RGB(红、绿、蓝)值进行控制,其中每个颜色通道的范围为 0 到 255,不同的组合会在 NeoMatrix 上创建不同的颜色。通过调整color_RED,color_GREENcolor_BLUE变量,您可以轻松自定义时钟的外观为任何您喜欢的颜色。要快速找到特定颜色的确切RGB值,您可以在此处使用在线RGB颜色选择器工具:RGB颜色选择器.

使用的库

这些包含告诉你草图到底依赖于什么:

#include <WiFi.h>
#include "time.h"
#include <Adafruit_GFX.h>
#include <Adafruit_NeoMatrix.h>
#include <Adafruit_NeoPixel.h>

安装Adafruit NeoMatrix使用Arduino库管理器。它还会拉取所需的依赖项,例如Adafruit GFX LibraryAdafruit NeoPixel.

您必须编辑的重要用户设置

文本颜色 (RGB)

使用0-255的值设置时钟文本颜色:

//set the color of display made of Red, Green and Blue 
unsigned int color_RED = 17;
unsigned int color_GREEN = 43;
unsigned int color_BLUE = 171;

这些值在这里使用:

matrix.setTextColor(matrix.Color(color_RED, color_GREEN, color_BLUE));

注意:如果您将所有颜色设置为 0(黑色),文本将变得不可见。草图包含一个安全检查:

// if user set all colors to 0, the display will be turned off so set it green
if (color_RED == 0 && color_GREEN == 0 && color_BLUE == 0) {
  color_GREEN = 200;
}

这确保了矩阵由于不可见的颜色设置而不会看起来“死”。

2) Wi-Fi SSID 和密码

将这些替换为您的真实 Wi-Fi 名称和密码:

const char* WIFI_SSID     = "WiFi";
const char* WIFI_PASSWORD = "passW0rd";

在启动期间,ESP32 在串口监视器中打印连接进度,约 15 秒后超时(30 次重试 × 500 毫秒)。

NTP 服务器

默认的 NTP 服务器是:

const char* ntpServer = "pool.ntp.org";

您可以保持原样。如果您想使用本地服务器,请将主机名替换为您首选的 NTP 服务器。

时区偏移和夏令时偏移

这两个设置控制当地时间:

// Toronto-ish: UTC-5, plus 1 hour DST
const long  gmtOffset_sec      = -5 * 3600;  // -5 hours
const int   daylightOffset_sec = 3600;       // +1 hour for DST

如何设置它们:

  • gmtOffset_sec= (UTC时区偏移小时) × 3600。例如:UTC-5 →-5*3600, UTC+2 →2*3600.
  • daylightOffset_sec=0如果您不想进行夏令时调整,或者3600如果您的地区目前正在实施夏令时(+1小时)。

这些在这里应用:

configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);

显示配置

矩阵数据引脚

数据引脚在这里定义:

#define MATRIX_PIN 14

如果您的接线使用不同的GPIO,请将此数字更改为匹配。

NeoMatrix 布局 + 颜色顺序

您的矩阵初始化如下:

Adafruit_NeoMatrix matrix(8, 8, MATRIX_PIN,
  NEO_MATRIX_TOP    + NEO_MATRIX_LEFT +
  NEO_MATRIX_ROWS   + NEO_MATRIX_PROGRESSIVE,
  NEO_RGB           + NEO_KHZ800);

显示看起来“错误”的两个常见原因:

  • 旋转 / 接线方向:如果文本显示为倒置或镜像,请调整。NEO_MATRIX_*标志(顶部/底部,左/右,行/列,逐步/锯齿状)。
  • 颜色顺序:此代码使用NEO_RGB一些面板是NEO_GRB如果红色/绿色/蓝色不匹配,请更改。NEO_RGB到正确的顺序。

亮度

亮度设置为initMatrix():

matrix.setBrightness(40);

提高以获得更亮的显示,降低以减少热量和功耗。

时间是如何生成的HH:MM

时钟将格式化时间存储在一个6个字符的缓冲区中:

char timeText[6] = "00:00";

那么updateTimeText()读取NTP同步的本地时间并写入文本:

// Format HH:MM
snprintf(timeText, sizeof(timeText), "%02d:%02d",
         timeinfo.tm_hour,
         timeinfo.tm_min);

这在主循环中每秒更新一次。

在8×8显示屏上滚动的工作原理

一个8×8的矩阵太窄了,无法显示。HH:MM立即,因此草图滚动文本。它在变化的X位置绘制时间。scrollX),然后在每次更新时向左移动一个像素。

int16_t scrollX = 8;
const uint16_t scrollIntervalMs = 120;

每个滚动步骤:

matrix.fillScreen(0);
matrix.setCursor(scrollX, 0);
matrix.print(timeText);
matrix.show();
scrollX--;

当文本完全退出左侧时,代码将其重置以从右边缘重新开始:

int16_t textWidth = 30;
if (scrollX < -textWidth) {
  scrollX = matrix.width();
}

串口监视器输出(调试)

该草图打印有用的消息:

  • Wi-Fi连接进度和IP地址
  • 时间同步是否成功
  • 格式化的时间字符串(例如,Time text: 14:32)

如果显示为空,则串行监视器是首先要检查的地方,以确认 Wi-Fi 和 NTP 是否正常工作。

项目演示

上传并重置后:

  • ESP32连接到Wi-Fi
  • 从同步时间pool.ntp.org
  • 演出OK简要介绍一下矩阵
  • 不断滚动当前时间为HH:MM

下载和链接

完整代码在本文下方提供。零件、工具和数据表也在本文下方链接。

图像

ESP32 S3 Matrix
ESP32 S3 Matrix
ESP32 S3 Matrix  pin out
ESP32 S3 Matrix pin out
ESP32-S3_RGB_8x8_matrix-3
ESP32-S3_RGB_8x8_matrix-3
ESP32-S3_RGB_8x8_matrix1
ESP32-S3_RGB_8x8_matrix1
ESP32-S3_RGB_8x8_matrix-2
ESP32-S3_RGB_8x8_matrix-2
ESP32-s3_internet_clock_animation
ESP32-s3_internet_clock_animation
868-ESP32-S3 RGB LED Matrix Internte Clock Project 1 - Basic Clock
语言: C++
已复制!

|||您可能需要的东西

文件📁

Fritzing 文件