#include <Adafruit_NeoPixel.h>
#include <WiFi.h>
#include "time.h"
#include <PubSubClient.h>
#define NTP_SERVER "pool.ntp.org"
#define UTC_OFFSET 3600
#define UTC_OFFSET_DST 3600
struct tm badam;
const char* ssid = "Wokwi-GUEST";
const char* password = "";
const char* mqtt_server = "broker.hivemq.com";
WiFiClient espClient;
PubSubClient client(espClient);
int sekundy = 0;
int minuty = 0;
int hodiny = 0;
int cas = 0;
unsigned long secs = 0;
unsigned long mins = 0;
unsigned long hours = 0;
#define LED_PIN_H 12
#define LED_COUNT_H 24
#define LED_PIN_M 14
#define LED_COUNT_M 60
#define LED_PIN_S 27
#define LED_COUNT_S 60
Adafruit_NeoPixel ring_h(LED_COUNT_H, LED_PIN_H, NEO_RGB + NEO_KHZ800);
Adafruit_NeoPixel ring_m(LED_COUNT_M, LED_PIN_M, NEO_RGB + NEO_KHZ800);
Adafruit_NeoPixel ring_s(LED_COUNT_S, LED_PIN_S, NEO_RGB + NEO_KHZ800);
long cervena_s = ring_s.Color(0,255,0);
long zelena_m = ring_m.Color(255,0,0);
long modra_h = ring_h.Color(0,0,255);
long nic_s = ring_s.Color(0,0,0);
long nic_m = ring_m.Color(0,0,0);
long nic_h = ring_h.Color(0,0,0);
void setup() {
Serial.begin(9600);
Serial.println("Hello, ESP32!");
ring_h.begin();
ring_m.begin();
ring_s.begin();
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected.");
client.setServer(mqtt_server, 1883);
configTime(UTC_OFFSET, UTC_OFFSET_DST, NTP_SERVER);
reconnect();
}
void loop() {
getLocalTime_H();
/*
for(int i; i <= 10; i++){
ring_s.setPixelColor(i, ring_s.Color(255,0,0));
ring_s.show();
}
*/
for(uint16_t i = 0; i < sekundy; i++){
ring_s.setPixelColor(i, cervena_s);
ring_s.show();
}
if(sekundy >= 59){
sekundy = 0;
for(uint16_t p; p < LED_COUNT_S; p++){
ring_s.setPixelColor(p, nic_s);
}
}
if(minuty > 0){
for(uint16_t i = 0; i < minuty; i++){
ring_m.setPixelColor(i, zelena_m);
ring_m.show();
}
if(minuty >= 59){
minuty = 0;
for(uint16_t l; l < LED_COUNT_M; l++){
ring_m.setPixelColor(l, nic_m);
ring_m.show();
}
}
}
if(hodiny > 0){
for(uint16_t y; y < hodiny; y++){
ring_h.setPixelColor(y, modra_h);
ring_h.show();
}
}
if(millis() >= cas){
getLocalTime_H();
String sprava = String(hodiny) + ":" + String(minuty) + ":" + String(sekundy);
if (!client.connected())
{
reconnect();
}
client.loop();
client.publish("remisko", sprava.c_str());
Serial.println(sprava);
cas = millis() + 1000;
}
}
void getLocalTime_H(){
struct tm badam;
if (!getLocalTime(&badam) )
{
Serial.println("Server nefachci");
return;
}
sekundy = badam.tm_sec;
minuty = badam.tm_min;
hodiny = badam.tm_hour;
}
void reconnect()
{
while (!client.connected())
{
Serial.print("Nejsom pripojeny");
String clientId = "KubkoJeEspNervyMam";
if (client.connect(clientId.c_str()))
{
Serial.println("pripojene...");
}
else
{
Serial.print("nepripojene (3sek)...");
delay(3000);
}
}
}