#include <WiFi.h>
#include <time.h>
#include <MD_Parola.h>
#include <MD_MAX72xx.h>
#include <SPI.h>
#include <ThingSpeak.h>
#include "Font_Data.h"
#include <HTTPClient.h>
#define HARDWARE_TYPE MD_MAX72XX::PAROLA_HW
#define MAX_DEVICES 4
#define CLK_PIN 18 // or SCK
#define DATA_PIN 19 // or MOSI
#define CS_PIN 5 // or SS
#include "DHT.h"
#define DHTPIN 23
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
MD_Parola P = MD_Parola(HARDWARE_TYPE, DATA_PIN, CLK_PIN, CS_PIN, MAX_DEVICES);
#define SPEED_TIME 20
#define PAUSE_TIME 0
#define MAX_MESG 150
int timezone = 10800;
int dst = 0;
int mode=1;
int say=0;
int num=0;
const char* ssid = "Wokwi-GUEST";
const char* password = "";
const char* apiURL = "https://api.thingspeak.com/apps/thinghttp/send_request?api_key=L9NQTIWI3MPZ0712";
WiFiClient client;
char Message[MAX_MESG+1] ="";
char WeatherTh[MAX_MESG+1] = "";
bool durum=true;
uint16_t h, m, s;
uint8_t dow;
int day;
uint8_t month;
String year;
// Global variables
char szTime[9]; // mm:ss\0
char szsecond[4]; // ss
char szMesg[MAX_MESG+1] = "";
String mesaj="ESP32 WiFi Clock ";
float hum;
float temp;
// Gram altın fiyatını tutan değişken
String response;
String mesaj_1="Arduino DS1307";//Açılış mesajı,sadece bir kere çalışsın diye
char *mon2str(uint8_t mon, char *psz, uint8_t len)
// Get a label from PROGMEM into a char array
{
static const char str[][12] PROGMEM =
{
"Ocak", "Şubat", "Mart", "Nisan", "Mayıs", "Haziran",
"Temmuz", "Agustos", "Eylül", "Ekim", "Kasım", "Aralıkc"
};
*psz = '\0';
mon--;
if (mon < 12)
{
strncpy_P(psz, str[mon], len);
psz[len] = '\0';
}
return(psz);
}
//********************HAFTANIN GÜNÜ*********************************
char dayofweek[7][12] = {"Pazar", "Pazartesi", "Salı", "Çarşamba", "Perşembe", "Cuma", "Cumartesi"};
//********************HAFTANIN GÜNÜ*********************************
char *dow2str(uint8_t code, char *psz, uint8_t len)
{
static const char str[][12] PROGMEM =
{
"Pazar", "Pazartesi", "Salı", "Çarşamba",
"Perşembe", "Cuma", "Cumartesi"
};
*psz = '\0';
code--;
if (code < 7)
{
strncpy_P(psz, str[code], len);
psz[len] = '\0';
}
return(psz);
}
void getsec(char *psz)
// Code for reading clock date
{
sprintf(psz, "%02d", s);
}
void getTime(char *psz, bool f = true)
// Code for reading clock time
{
time_t now = time(nullptr);
struct tm* p_tm = localtime(&now);
h = p_tm->tm_hour;
m = p_tm->tm_min;
s = p_tm->tm_sec;
sprintf(psz, "%02d%c%02d", h, (f ? ':' : ' '), m);
}
//************AY****************************
char dayofmonth[12][10]= {"Ocak", "Şubat", "Mart", "Nisan", "Mayıs", "Haziran", "Temmuz","Agustos","Eylül","Ekim","Kasım","Aralık"};
//************AY****************************
void getDate(char *psz)
// Code for reading clock date
{
char szBuf[10];
time_t now = time(nullptr);
struct tm* p_tm = localtime(&now);
dow = p_tm->tm_wday;
day = p_tm->tm_mday;
month = p_tm->tm_mon;
Serial.println("******************");
Serial.println(dow);
Serial.println("----------------------");
Serial.println(day);
Serial.println("----------------------");
Serial.println(month);
Serial.println("----------------------");
Serial.println(p_tm->tm_year + 1900);
Serial.println("******************");
//sprintf(psz, "%d %s %04d", day, mon2str(month, szBuf, sizeof(szBuf)-1), (p_tm->tm_year + 1900));
//*****************************
char szMonth[10];
char szDow[15];
sprintf(psz, "%d %s %s %04d",day,dayofmonth[month],dayofweek[dow],(p_tm->tm_year + 1900));
//******************************
}
void getHumidit(char *psz)
{
char hm[8];
hum = dht.readHumidity();
hum=56.8;
if (isnan(hum)) {
String mesaj="***";
mesaj.toCharArray(psz,mesaj.length()+1);
//Serial.println(F("Failed to read from DHT sensor!"));
return;
}else {
dtostrf(hum,2,0,hm);
sprintf(psz,"%s%s%s","Nem : ","% ",hm);
}
}
void getTemperatur(char *psz)
{
char tmp[8];
temp = dht.readTemperature();
temp=20.3;
if (isnan(temp)) {
String mesaj="***";
mesaj.toCharArray(psz,mesaj.length()+1);
//Serial.println(F("Failed to read from DHT sensor!"));
return;
}else{
dtostrf(temp,2,1,tmp);
sprintf(psz,"%s%s%s","Sıcaklık : ",tmp,"°C");
}
}
void setup(void)
{
Serial.begin(115200);
delay(100);
Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
num++;
if(num==10){
ESP. restart();
num=0;
}
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
delay(1000);
getTimentp();
modeB();
dht.begin();
getTime(szTime);
//**********************
P.displayZoneText(0, szMesg, PA_CENTER, SPEED_TIME, 500, PA_SCROLL_UP, PA_SCROLL_LEFT);
mesaj_1.toCharArray(szMesg,mesaj.length()+1);//açılış mesajı için burada olması gerekiyor
//****************************
}
void loop(void)
{
static uint32_t lastTime = 0; // millis() memory
static uint8_t display = 0; // current display mode
static bool flasher = false; // seconds passing flasher
P.displayAnimate();
if(mode==0){
// Finally, adjust the time string if we have to
if (millis() - lastTime > 1000)
{
lastTime = millis();
getsec(szsecond);
getTime(szTime, flasher);
flasher = !flasher;
P.displayReset(0);
P.displayReset(1);
say++;
if(say==10){
say=0;
modeB();
mode=1;
}
}
}
//***********************************
if(mode==1){
if (P.getZoneStatus(0))
{
switch (display)
{
case 0: // takvim ve ilk açılış mesajı
P.setTextEffect(0, PA_SCROLL_LEFT, PA_SCROLL_LEFT);
if(durum==true){
mesaj ="ESP32 WiFi Clock";
mesaj = mesaj + WiFi.localIP().toString();
mesaj = mesaj + " ip ile baglandı";
mesaj.toCharArray(szMesg,mesaj.length()+1);
durum=false;
display=0;
}else{
display++;
getDate(szMesg);
}
break;
case 1: // sıcaklık
P.setTextEffect(0, PA_SCROLL_LEFT, PA_SCROLL_LEFT);
display++;
getTemperatur(szMesg);
break;
case 2: // nem
P.setTextEffect(0, PA_SCROLL_LEFT, PA_SCROLL_LEFT);
display++;
getHumidit(szMesg);
break;
case 3://Altın fiyatları
P.setTextEffect(0, PA_SCROLL_LEFT, PA_SCROLL_LEFT);
display++;
gram_altin();
response.toCharArray(szMesg,response.length()+1);
//gram_altin(szMesg);
break;
case 4: // mesaj
P.setTextEffect(0, PA_SCROLL_LEFT, PA_SCROLL_LEFT);
display++;
mesaj = "Buraya mesaj yazılacak";
mesaj.toCharArray(szMesg,mesaj.length()+1);
break;
case 5: // mesaj
P.setTextEffect(0, PA_SCROLL_LEFT, PA_SCROLL_LEFT);
getsec(szsecond);
// mesaj = "";
//mesaj.toCharArray(szMesg,mesaj.length()+1);
display=0;
modeA();
mode=0;
break;
}
P.displayReset(0);
}
}
}
//**************************************
void getTimentp()
{
configTime(timezone , dst, "pool.ntp.org","time.nist.gov");
while(!time(nullptr)){
delay(100);
Serial.print(".");
}
Serial.print("Time Update");
}
//************************
void modeA()
{
P.begin(2);
P.setInvert(false);
P.setZone(0, 0, 0);
P.setZone(1, 1, 3);
P.setFont(0, numeric7Seg);
P.setFont(1, numeric7Se);
//P.displayZoneText(0, szMesg, PA_CENTER, SPEED_TIME, 0, PA_PRINT, PA_SCROLL_LEFT);
P.displayZoneText(0, szsecond, PA_LEFT, SPEED_TIME, 0, PA_PRINT, PA_NO_EFFECT);
P.displayZoneText(1, szTime, PA_CENTER, SPEED_TIME, PAUSE_TIME, PA_PRINT, PA_NO_EFFECT);
}
//***********************************
void modeB()
{
P.begin(1);
P.setInvert(false);
P.setZone(0, 0, 3);
P.setFont(0, turkce);
P.displayZoneText(0, szMesg, PA_CENTER, SPEED_TIME, 0, PA_PRINT, PA_SCROLL_LEFT);
}
//********************
//**************************
void gram_altin(){
HTTPClient http;
http.begin(apiURL);
int httpResponseCode = http.GET();
if(httpResponseCode > 0){
response = http.getString();
//Serial.print("Thingspeak API cevabı : altın fiyatı : ");
//Serial.println(response);
}else{
//Serial.print("HTTP hata kodu: ");
//Serial.println(httpResponseCode);
}
http.end();
}