update dengan fitur NTP

master
a2nr 2025-06-11 11:27:49 +07:00
parent bb63725781
commit 0d8ab3ea6e
2 changed files with 113 additions and 5 deletions

View File

@ -18,6 +18,7 @@ lib_deps =
adafruit/Adafruit BusIO
adafruit/Adafruit GFX Library
https://github.com/mrfaptastic/ESP32-HUB75-MatrixPanel-I2S-DMA.git
arduino-libraries/NTPClient @ ^3.2.1
upload_speed = 460800
monitor_speed = 115200
monitor_filters = esp32_exception_decoder

View File

@ -1,20 +1,127 @@
#include <led-matrix-32-16.hpp>
#include <Arduino.h>
#include <WiFi.h>
#include <NTPClient.h>
#include <WiFiUdp.h>
LedMetrix32x16 ledMatrix; // Create an instance of the LedMetrix32x16 class
#define YOUR_WIFI_SSID "WiFi - Mekatronika"
#define YOUR_WIFI_PASSWD "tanyapakimron"
#define SHOW_TIME_PERIOD 1000
// Reduce memory usage by using static allocation
static MatrixPanel_I2S_DMA *display = nullptr;
static CustomPxBasePanel *virtualDisplay = nullptr;
// NTP Client setup
WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, "pool.ntp.org", 25200); // UTC+7 for Jakarta
void setup() {
Serial.begin(115200); // Initialize serial communication for debugging
ledMatrix.begin(1, 3); // Initialize the LED matrix with 1 rows and 3 column of panels
MatrixPanel_I2S_DMA *display = ledMatrix.getDisplay(); // Get the DMA display object
display->setBrightness(50); // Set the brightness of the display to 50%
delay(1000); // Give time for system to stabilize
// Initialize WiFi with optimized settings
WiFi.mode(WIFI_STA);
WiFi.disconnect();
delay(1000);
// Optimize WiFi power and performance
WiFi.setTxPower(WIFI_POWER_19_5dBm);
WiFi.setSleep(false); // Disable WiFi sleep mode
// Connect to WiFi
Serial.println("Connecting to WiFi...");
Serial.print("SSID: ");
Serial.println(YOUR_WIFI_SSID);
WiFi.begin(YOUR_WIFI_SSID, YOUR_WIFI_PASSWD);
// Wait for connection with timeout
int timeout = 0;
while (WiFi.status() != WL_CONNECTED && timeout < 20) {
delay(500);
Serial.print(".");
Serial.print("Status: ");
switch(WiFi.status()) {
case WL_IDLE_STATUS:
Serial.println("WL_IDLE_STATUS");
break;
case WL_NO_SSID_AVAIL:
Serial.println("WL_NO_SSID_AVAIL");
break;
case WL_CONNECT_FAILED:
Serial.println("WL_CONNECT_FAILED");
break;
case WL_CONNECTION_LOST:
Serial.println("WL_CONNECTION_LOST");
break;
case WL_DISCONNECTED:
Serial.println("WL_DISCONNECTED");
break;
default:
Serial.println("Unknown status");
}
timeout++;
}
if (WiFi.status() != WL_CONNECTED) {
Serial.println("");
Serial.println("WiFi connection failed!");
Serial.println("Please check:");
Serial.println("1. WiFi SSID and password are correct");
Serial.println("2. WiFi router is in range");
Serial.println("3. WiFi router is working properly");
while (true) {
delay(1000);
Serial.print("Retrying connection... Status: ");
Serial.println(WiFi.status());
WiFi.begin(YOUR_WIFI_SSID, YOUR_WIFI_PASSWD);
}
}
Serial.println("");
Serial.println("WiFi connected!");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
Serial.print("Signal strength (RSSI): ");
Serial.println(WiFi.RSSI());
// Initialize LED matrix after WiFi is connected
ledMatrix.begin(1, 3);
display = ledMatrix.getDisplay();
virtualDisplay = ledMatrix.getVirtualDisplay();
display->setBrightness(50);
// Initialize NTP
timeClient.begin();
timeClient.update();
}
int last = 0;
void loop() {
MatrixPanel_I2S_DMA *display = ledMatrix.getDisplay(); // Get the DMA display object
CustomPxBasePanel *virtualDisplay = ledMatrix.getVirtualDisplay(); // Get the virtual display object
// Use static display pointers to reduce memory allocation
if (!display || !virtualDisplay)
while(1);
// Update time every minute
if (millis() - last >= 60000) {
timeClient.update();
last = millis();
}
// Get current time
String timeString = timeClient.getFormattedTime();
// Display time
virtualDisplay->clearScreen();
virtualDisplay->setTextSize(2);
virtualDisplay->setTextColor(virtualDisplay->color565(255, 255, 255));
virtualDisplay->setCursor(0, 0);
virtualDisplay->println(timeString);
delay(3000);
// draw a red pixel at each position on the display
for (int i = 0; i < virtualDisplay->height(); i++)
{