#include <Arduino.h>
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <WiFiClientSecureBearSSL.h>
#include <ArduinoJson.h>
#include <MD_Parola.h>
#include <MD_MAX72xx.h>
#include <SPI.h>
#include <NTPClient.h>
#include <WiFiUdp.h>
#define HARDWARE_TYPE MD_MAX72XX::FC16_HW
#define MAX_DEVICES 4
#define CS_PIN 15
MD_Parola Display = MD_Parola(HARDWARE_TYPE, CS_PIN, MAX_DEVICES);
const char* ssid = "wokwi";
const char* password = "";
int ranIdx=0;
int ledtime=-295000;
int z = 0;
#define BUF_SIZE 75
char zon[BUF_SIZE] = { "" };
char nos_line_0_text[BUF_SIZE] = { "" };
// tijd //
WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, "pool.ntp.org");
// end tijd //
// Sprite Definitions
const uint8_t F_PMAN1 = 6;
const uint8_t W_PMAN1 = 8;
const uint8_t PROGMEM PMAN1[F_PMAN1 * W_PMAN1] = // gobbling pacman animation
{
0x00, 0x81, 0xc3, 0xe7, 0xff, 0x7e, 0x7e, 0x3c,
0x00, 0x42, 0xe7, 0xe7, 0xff, 0xff, 0x7e, 0x3c,
0x24, 0x66, 0xe7, 0xff, 0xff, 0xff, 0x7e, 0x3c,
0x3c, 0x7e, 0xff, 0xff, 0xff, 0xff, 0x7e, 0x3c,
0x24, 0x66, 0xe7, 0xff, 0xff, 0xff, 0x7e, 0x3c,
0x00, 0x42, 0xe7, 0xe7, 0xff, 0xff, 0x7e, 0x3c,
};
const uint8_t F_CAR = 1;
const uint8_t W_CAR = 8;
const uint8_t PROGMEM CAR[F_CAR * W_CAR] = // auto
{
0b00110000,0b00110000,0b01111000,0b00110100,0b00110000,0b01110000,0b00110000,0b00110000, // auto licht aan
};
void setup() {
Serial.begin (115200);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password, 6);
Serial.println("Connecting to WiFi");
delay(3000);
while (WiFi.status() != WL_CONNECTED) {
delay(100);
Serial.print(".");
}
Serial.println(WiFi.localIP());
delay(500);
Display.begin();
Display.setIntensity(0,01);
Display.displayClear();
Display.displayText("welkom" ,PA_CENTER, 100, 1000, PA_PRINT, PA_PRINT);
timeClient.begin();
timeClient.setTimeOffset(7200);
int epochTime1 = 1000;
}
void loop() {
static uint8_t curFX = 0;
if (Display.displayAnimate())
{
switch(ranIdx)
{
case 0:
{
//if ( (millis()-ledtime) > 300000)
//{
char data[50];
String bufferr;
bufferr = String("de zonnepanelen leveren nu ") + String(watt()) + String(" Watt");
bufferr.toCharArray(data, 50);
strcpy(zon, data);
ledtime = millis();
//}
Display.displayText(zon, PA_CENTER, 100, 3000, PA_SCROLL_LEFT, PA_SCROLL_LEFT);
ranIdx++;}
delay(1000);
return;
case 1:
{
String currentTime = String(formattedhours()) + String(":") + String(formattedmins());
String currentTime1 = String(formattedhours()) + String(" ") + String(formattedmins());
for (int i = 0; i <= 30; i++)
{
Display.setTextAlignment(PA_CENTER);
Display.print(currentTime);
delay(1000);
Display.print(currentTime1);
delay(1000);
}
ranIdx++;
}
delay(1000);
return;
case 2:
Display.displayText(" ", PA_CENTER, 50, 2000, PA_SPRITE, PA_SPRITE);
Display.setSpriteData(PMAN1, W_PMAN1, F_PMAN1, PMAN1, W_PMAN1, F_PMAN1);
ranIdx++;
delay(1000);
return;
case 3:
{
char data[150];
String bufferr;
bufferr = String(nos_line_0());
bufferr.toCharArray(data, 150);
strcpy(nos_line_0_text, data);
Display.displayText(nos_line_0_text, PA_CENTER, 100, 3000, PA_SCROLL_LEFT, PA_SCROLL_LEFT);
ranIdx=0;
}
delay(1000);
return;
}
Display.displayReset();
}
}
int watt()
{
std::unique_ptr<BearSSL::WiFiClientSecure>client(new BearSSL::WiFiClientSecure);
client->setInsecure();
HTTPClient https;
https.begin(*client, "https://monitoringapi.solaredge.com/site/1/overview.json?api_key="); // HTTPS
int httpCode = https.GET();
DynamicJsonDocument doc(2048);
deserializeJson(doc, https.getString());
JsonObject overview = doc["overview"];
int watt = overview["currentPower"]["power"]; // 2426
Serial.println("Watt = ");
Serial.print(watt);
https.end();
return watt;
}
int formattedhours()
{
timeClient.update();
time_t epochTime = timeClient.getEpochTime();
int formattedhours = timeClient.getHours();
struct tm *ptm = gmtime ((time_t *)&epochTime);
return formattedhours;
}
int formattedmins()
{
timeClient.update();
time_t epochTime = timeClient.getEpochTime();
int formattedmins = timeClient.getMinutes();
struct tm *ptm = gmtime ((time_t *)&epochTime);
return formattedmins;
}
String nos_line_0()
{
std::unique_ptr<BearSSL::WiFiClientSecure>client(new BearSSL::WiFiClientSecure);
client->setInsecure();
HTTPClient https;
https.begin(*client, "https://api.rss2json.com/v1/api.json?rss_url=https%3A%2F%2Ffeeds.nos.nl%2Fnosnieuwsalgemeen"); // HTTPS
int httpCode = https.GET();
DynamicJsonDocument doc(2048);
deserializeJson(doc, https.getString());
//JsonObject items = doc["items"];
JsonObject items_0 = doc["items"][0];
//String nos_line_0 = items["0"]["link"];
String nos_line_0 = items_0["title"];
Serial.println("nos_line_0 = ");
Serial.print(nos_line_0);
https.end();
return nos_line_0;
}