Vrijeme s interneta


Zatreba li vam vrijeme u vašem projektu a nemate RTC modul možete ga saznati i na internetu.

Zatreba li vam vrijeme u vašem projektu a nemate RTC modul možete ga saznati i na internetu

Ovaj primjer je realiziran korištenjem mikrokontrolera NodeMCU baziranog oko ESP8266 čipa.

#include <Arduino.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2); 
#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>
#include <ESP8266HTTPClient.h>
#include <WiFiClient.h>
ESP8266WiFiMulti WiFiMulti;
#include <Wire.h> 
int sat,minuta,sekunda,sat_off,minuta_off,sekunda_off;
unsigned long pocetak_sat_web,sek_od_web_sync;
int last = millis();
unsigned long pocetak_web,razlika_web;
String rijec,primljeno;

void setup()
{
  Serial.begin(115200);
  Serial.println("Spajanje na WiFi");
  WiFi.mode(WIFI_STA);
  WiFiMulti.addAP("MojaWiFi", "12345678");//ovdje dodajte parametre svoje wifi mreže
  WiFiMulti.addAP("TvojaWiFi", "11112222");
  delay(1000);
  web();  // dohvaćanje vremena s web-a
  pocetak_web=millis();
  lcd.init();
  lcd.backlight();
  lcd.print("Vrijeme"); 
  }

void loop(void)
{ 
razlika_web=millis()-pocetak_web;
if (millis() - last >= 1000) { //osvježavanje svakih 1 sec
      last = millis();
      int sek_sa_web=sat*60*60+minuta*60+sekunda;
      sek_od_web_sync=int((millis()-pocetak_sat_web)/960);
      int sek_offline=sek_sa_web+sek_od_web_sync;
      sat_off=int(sek_offline /3600);
      int ostatak_sek_za_proracun = sek_offline-sat_off*3600;
      minuta_off=int(ostatak_sek_za_proracun/60);
      ostatak_sek_za_proracun = ostatak_sek_za_proracun-(minuta_off*60);
      sekunda_off=ostatak_sek_za_proracun;
      Serial.print(sat_off);
      Serial.print(":");
      Serial.print(minuta_off);
      Serial.print(":");
      Serial.println(sekunda_off);  
      lcd.setCursor(0,1);
      lcd.print(sat_off);
      lcd.print(":");
      lcd.print(minuta_off);  
      lcd.print(":");
      if (sekunda_off<10){
          lcd.print("0");
          lcd.print(sekunda_off); 
          }   
      else
          {
          lcd.print(sekunda_off);  
          }           
     }      

 if (razlika_web>600000){ //osvježavanje vremena s web-a
    web();              // nakon 10 minuta
     pocetak_web=millis();
     }
}

void web (){
 Serial.println("Web dohvat vremena"); 
  if (  (WiFiMulti.run() == WL_CONNECTED)) {
    WiFiClient client;
    HTTPClient http;
    String url = "http://tehnooz.hr/vrijeme.php";    
    Serial.println(url);
    if (http.begin(client,url )) {  
    int httpCode = http.GET();  
    if (httpCode > 0) {
      if (httpCode == HTTP_CODE_OK || httpCode == HTTP_CODE_MOVED_PERMANENTLY) {
          String primljeno = http.getString();
          rijec=primljeno.substring(primljeno.indexOf("sat")+6,primljeno.indexOf("minuta")-3);
          sat=rijec.toInt();
            rijec=primljeno.substring(primljeno.indexOf("minuta")+9,primljeno.indexOf("sekunda")-3);
          minuta=rijec.toInt();
          rijec=primljeno.substring(primljeno.indexOf("sekunda")+10,primljeno.indexOf("end")-3);
          sekunda=rijec.toInt();
          pocetak_sat_web=millis();
          Serial.println("WEB REFRESH OK");
          }
      primljeno=""; 
      Serial.println();   
      }
    } else {
        Serial.print("Greška u prijemu");
      }
      http.end();
    } else {
    Serial.printf("Nemoguće spajanje na WEB");
    }
  }

Kako bi uspješno koristili LCD display koji je spojen preko I2C sučelja morate koristiti sljedeću biblioteku.