Compare commits
1 Commits
Author | SHA1 | Date |
---|---|---|
|
0d8ab3ea6e |
|
@ -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
|
||||
|
|
117
src/main.cpp
117
src/main.cpp
|
@ -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++)
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue