#include <WiFi.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C LCD = LiquidCrystal_I2C(0x27, 16, 2);
#define NTP_SERVER "pool.ntp.org"
#define UTC -3 //Informar Fuso UTC
//Criação de caracteres personalizado
byte SIMB1[] = {B00000,B00000,B00000,B00100,B00000,B00000,B00000,B00000};
byte SIMB2[] = {B00000,B00000,B00100,B01010,B00100,B00000,B00000,B00000};
byte SIMB3[] = {B00000,B00100,B01010,B10001,B01010,B00100,B00000,B00000};
byte SIMB4[] = {B00000,B01010,B10001,B00000,B10001,B01010,B00000,B00000};
byte SIMB5[] = {B01010,B10001,B00000,B00000,B00000,B10001,B01010,B00000};
int db = 0;
//Função para animação utilizando os caracteres personalizado
void Animacao() {
static int8_t counter = 0;
const char* char_byte = "\x01\x02\x03\x04\x05\x04\x03\x02";
LCD.setCursor(15, 1);
LCD.write(char_byte[counter++]);
if (counter == strlen(char_byte)) {
counter = 0;
}
}
//Função para atualizar a data e hora no Display
void printLocalTime() {
struct tm timeinfo;
if (!getLocalTime(&timeinfo)) {
LCD.setCursor(0, 1);
LCD.print("Connection Err");
return;
}
LCD.setCursor(8, 0);
LCD.print(&timeinfo, "%H:%M:%S");
LCD.setCursor(0, 1);
LCD.print(&timeinfo, " %d/%m/%Y");
Serial.print(&timeinfo, "%H:%M:%S");
Serial.print(&timeinfo, "%d/%m/%Y");
}
//Função de configuração e inicialização dos dispositivos
void setup() {
Serial.begin(115200);
LCD.init();
LCD.createChar(1,SIMB1);
LCD.createChar(2,SIMB2);
LCD.createChar(3,SIMB3);
LCD.createChar(4,SIMB4);
LCD.createChar(5,SIMB5);
LCD.backlight();
LCD.setCursor(0, 0);
LCD.print("Conectando no");
LCD.setCursor(0, 1);
LCD.print("WiFi ");
WiFi.begin("Wokwi-GUEST", "", 6);
while (WiFi.status() != WL_CONNECTED) {
delay(100);
Animacao();
}
Serial.println("");
Serial.print(" Conectando WIFI");
Serial.println("IP Dispositivo: ");
Serial.print(WiFi.localIP());
LCD.clear();
delay(1000);
LCD.setCursor(0, 0);
LCD.print("Online");
delay(1000);
LCD.setCursor(0, 1);
LCD.print("Carregando Dados");
delay(1000);
configTime((UTC*3600), 0, NTP_SERVER);
delay(1000);
LCD.setCursor(0, 0);
LCD.print(" ");
}
//Função principal de repetição
void loop() {
printLocalTime();
db = db + 1;
LCD.setCursor(0,0);
LCD.print(db+"");
if (db > 10){
configTime((UTC*60*60), 0, NTP_SERVER);
db = 1;
}
int i;
for (i=0;i<7; i++){
static int8_t counter = 0;
const char* char_byte = "\x01\x02\x03\x04\x05\x04\x03\x02";
LCD.setCursor(0, 1);
LCD.write(char_byte[counter++]);
if (counter == strlen(char_byte)) {
counter = 0;}
delay(80);
}
}