#include <MD_Parola.h>
#include <MD_MAX72xx.h>
#include <SPI.h>
// #include <ArduinoJson.h>
#include <WiFi.h>
#include <HTTPClient.h>
#define CONNECTION_TIMEOUT 10
#define API_INTERVAL 30000
// #define HARDWARE_TYPE MD_MAX72XX::FC16_HW
#define HARDWARE_TYPE MD_MAX72XX::PAROLA_HW
#define MAX_DEVICES 4
#define CS_PIN1 5
#define CS_PIN2 15
#define CS_PIN3 2
// Setup Wifi
const char* ssid = "Wokwi-GUEST";
const char* password = "";
// End setup
MD_Parola Display1 = MD_Parola(HARDWARE_TYPE, CS_PIN1, MAX_DEVICES);
MD_Parola Display2 = MD_Parola(HARDWARE_TYPE, CS_PIN2, MAX_DEVICES);
MD_Parola Display3 = MD_Parola(HARDWARE_TYPE, CS_PIN3, MAX_DEVICES);
int text_pause = 0;
int speed = 50;
unsigned long lastApiCallTime = 0;
unsigned long lastApiUpdateTime = 0;
char text1[256] = "";
char text2[256] = "";
char text3[256] = "";
void setup() {
Serial.begin(115200);
printAvailableNetworks();
connectWiFi();
// Setup Dot Matrix
Display1.begin();
Display1.setTextAlignment(PA_CENTER);
Display1.setPause(text_pause);
Display1.setSpeed(speed);
Display1.displayClear();
Display2.begin();
Display2.setTextAlignment(PA_CENTER);
Display2.setPause(text_pause);
Display2.setSpeed(speed);
Display2.displayClear();
Display3.begin();
Display3.setTextAlignment(PA_CENTER);
Display3.setPause(text_pause);
Display3.setSpeed(speed);
Display3.displayClear();
}
void loop() {
if (WiFi.status() != WL_CONNECTED) {
connectWiFi();
}
if (WiFi.status() == WL_CONNECTED) {
unsigned long currentTime = millis();
if (currentTime - lastApiUpdateTime >= API_INTERVAL) {
String url1 = "https://gcc.gistexgarmenindonesia.com:7186/api/meeting-room?branch=CLN&room=Meeting1";
String url2 = "https://gcc.gistexgarmenindonesia.com:7186/api/meeting-room?branch=CLN&room=Meeting2";
String url3 = "https://gcc.gistexgarmenindonesia.com:7186/api/meeting-room?branch=CLN&room=Meeting3";
getTextFromAPI(url1, text1);
getTextFromAPI(url2, text2);
getTextFromAPI(url3, text3);
lastApiUpdateTime = currentTime;
}
if (Display1.displayAnimate()) {
Display1.displayText(text1, Display1.getTextAlignment(), Display1.getSpeed(), Display1.getPause(), PA_SCROLL_LEFT, PA_SCROLL_LEFT);
Display1.displayReset();
}
if (Display2.displayAnimate()) {
Display2.displayText(text2, Display2.getTextAlignment(), Display2.getSpeed(), Display2.getPause(), PA_SCROLL_LEFT, PA_SCROLL_LEFT);
Display2.displayReset();
}
if (Display3.displayAnimate()) {
Display3.displayText(text3, Display3.getTextAlignment(), Display3.getSpeed(), Display3.getPause(), PA_SCROLL_LEFT, PA_SCROLL_LEFT);
Display3.displayReset();
}
}
}
void getTextFromAPI(String url, char* text) {
HTTPClient http;
http.begin(url);
int httpCode = http.GET();
if (httpCode == HTTP_CODE_OK) {
String payload = http.getString();
Serial.println("Response: " + payload);
payload.toCharArray(text, 256);
} else {
Serial.println("Error on HTTP request");
strcpy(text, ".");
}
http.end();
}
void printAvailableNetworks() {
int numNetworks = WiFi.scanNetworks();
if (numNetworks == 0) {
Serial.println("No networks found");
} else {
Serial.println("Available networks:");
for (int i = 0; i < numNetworks; ++i) {
Serial.print("SSID: ");
Serial.print(WiFi.SSID(i));
Serial.print("\tSignal Strength (RSSI): ");
Serial.println(WiFi.RSSI(i));
}
}
}
void connectWiFi() {
WiFi.mode(WIFI_OFF);
delay(1000);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
Serial.println("Connecting to WiFi");
int timeout_counter = 0;
while (WiFi.status() != WL_CONNECTED){
delay(500);
Serial.print(".");
timeout_counter++;
if(timeout_counter >= CONNECTION_TIMEOUT*5){
ESP.restart();
}
}
Serial.print("Connected to: "); Serial.println(ssid);
Serial.print("IP Address: "); Serial.println(WiFi.localIP());
}