update dengan fitur NTP
parent
bb63725781
commit
0d8ab3ea6e
|
@ -18,6 +18,7 @@ lib_deps =
|
||||||
adafruit/Adafruit BusIO
|
adafruit/Adafruit BusIO
|
||||||
adafruit/Adafruit GFX Library
|
adafruit/Adafruit GFX Library
|
||||||
https://github.com/mrfaptastic/ESP32-HUB75-MatrixPanel-I2S-DMA.git
|
https://github.com/mrfaptastic/ESP32-HUB75-MatrixPanel-I2S-DMA.git
|
||||||
|
arduino-libraries/NTPClient @ ^3.2.1
|
||||||
upload_speed = 460800
|
upload_speed = 460800
|
||||||
monitor_speed = 115200
|
monitor_speed = 115200
|
||||||
monitor_filters = esp32_exception_decoder
|
monitor_filters = esp32_exception_decoder
|
||||||
|
|
117
src/main.cpp
117
src/main.cpp
|
@ -1,20 +1,127 @@
|
||||||
#include <led-matrix-32-16.hpp>
|
#include <led-matrix-32-16.hpp>
|
||||||
#include <Arduino.h>
|
#include <Arduino.h>
|
||||||
|
#include <WiFi.h>
|
||||||
|
#include <NTPClient.h>
|
||||||
|
#include <WiFiUdp.h>
|
||||||
|
|
||||||
LedMetrix32x16 ledMatrix; // Create an instance of the LedMetrix32x16 class
|
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() {
|
void setup() {
|
||||||
Serial.begin(115200); // Initialize serial communication for debugging
|
Serial.begin(115200); // Initialize serial communication for debugging
|
||||||
ledMatrix.begin(1, 3); // Initialize the LED matrix with 1 rows and 3 column of panels
|
delay(1000); // Give time for system to stabilize
|
||||||
MatrixPanel_I2S_DMA *display = ledMatrix.getDisplay(); // Get the DMA display object
|
|
||||||
display->setBrightness(50); // Set the brightness of the display to 50%
|
// 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() {
|
void loop() {
|
||||||
MatrixPanel_I2S_DMA *display = ledMatrix.getDisplay(); // Get the DMA display object
|
// Use static display pointers to reduce memory allocation
|
||||||
CustomPxBasePanel *virtualDisplay = ledMatrix.getVirtualDisplay(); // Get the virtual display object
|
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
|
// draw a red pixel at each position on the display
|
||||||
for (int i = 0; i < virtualDisplay->height(); i++)
|
for (int i = 0; i < virtualDisplay->height(); i++)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue