INT 21h

Домашняя страница самого страшного прерывания

ESP8266: Часы с NTP синхронизацией по WiFi

№ 8358 В разделах: Программирование Электроника от July 8th, 2017,

Использованы библиотеки:

Видеодемонстрация:

Код:

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <TimeLib.h>
#include <NtpClientLib.h>
#include <ESP8266WiFi.h>

#define YOUR_WIFI_SSID "mywifispot"
#define YOUR_WIFI_PASSWD "superpasswd"

#define ONBOARDLED 2 // Built in LED on ESP-12/ESP-07

LiquidCrystal_I2C lcd(0x20, 20, 4);
int8_t timeZone = 6;

// Start NTP only after IP network is connected
void onSTAGotIP(WiFiEventStationModeGotIP ipInfo) {
  Serial.printf("Got IP: %s\r\n", ipInfo.ip.toString().c_str());
  NTP.begin("ntp.tsu.ru", timeZone, true);
  NTP.setInterval(63);
  digitalWrite(ONBOARDLED, LOW); // Turn on LED
}

// Manage network disconnection
void onSTADisconnected(WiFiEventStationModeDisconnected event_info) {
  Serial.printf("Disconnected from SSID: %s\n", event_info.ssid.c_str());
  Serial.printf("Reason: %d\n", event_info.reason);
  digitalWrite(ONBOARDLED, HIGH); // Turn off LED
  //NTP.stop(); // NTP sync can be disabled to avoid sync errors
}

void processSyncEvent(NTPSyncEvent_t ntpEvent) {
  if (ntpEvent) {
    Serial.print("Time Sync error: ");
    lineClear(0);
    lcd.setCursor(0, 0);
    lcd.print("EE:");
    if (ntpEvent == noResponse) {
      Serial.println("NTP server not reachable");
      lcd.setCursor(4, 0);
      lcd.print("not reachable");
    }
    else if (ntpEvent == invalidAddress) {
      Serial.println("Invalid NTP server address");
      lcd.setCursor(4, 0);
      lcd.print("invalid address");
    }
  }
  else {
    Serial.print("Got NTP time: ");
    Serial.println(NTP.getTimeDateString(NTP.getLastNTPSync()));
    lineClear(0);
    lcd.setCursor(0, 0);
    lcd.print("NTP sync successful");
  }
}

void lineClear(uint8_t line)
{
  lcd.setCursor(0, line);
  lcd.print("                    ");
}

boolean syncEventTriggered = false;
NTPSyncEvent_t ntpEvent;

void setup()
{
  static WiFiEventHandler e1, e2;

  Serial.begin(115200);
  WiFi.mode(WIFI_STA);
  WiFi.begin(YOUR_WIFI_SSID, YOUR_WIFI_PASSWD);

  pinMode(ONBOARDLED, OUTPUT); // Onboard LED
  digitalWrite(ONBOARDLED, HIGH); // Switch off LED

  NTP.onNTPSyncEvent([](NTPSyncEvent_t event) {
    ntpEvent = event;
    syncEventTriggered = true;
  });

  e1 = WiFi.onStationModeGotIP(onSTAGotIP);// As soon WiFi is connected, start NTP Client
  e2 = WiFi.onStationModeDisconnected(onSTADisconnected);

  lcd.init();
  lcd.backlight();
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Device started");
  delay(1000);
}

void loop()
{
  static int i = 0;
  static int last = 0;

  if (syncEventTriggered) {
    processSyncEvent(ntpEvent);
    syncEventTriggered = false;
  }

  if ((millis() - last) > 5100) {
    last = millis();
    lineClear(0);
    Serial.print(i); Serial.print(" ");
    Serial.print(NTP.getTimeDateString()); Serial.print(" ");
    Serial.print(NTP.isSummerTime() ? "Summer Time. " : "Winter Time. ");
    Serial.print("WiFi is ");
    Serial.print(WiFi.isConnected() ? "connected" : "not connected"); Serial.print(". ");
    Serial.print("Uptime: ");
    lcd.setCursor(0, 0);
    lcd.print(WiFi.isConnected() ? "WiFi connected" : "not connected");
    lcd.setCursor(0, 3);
    lcd.print(NTP.isSummerTime() ? "Summer Time. " : "Winter Time. ");
    Serial.print(NTP.getUptimeString()); Serial.print(" since ");
    Serial.println(NTP.getTimeDateString(NTP.getFirstSync()).c_str());

    i++;
  }
  delay(100);
  lcd.setCursor(0, 2);
  lcd.print(NTP.getTimeDateString());
}

Нет комментариев »

Оставьте ваш комментарий »

Форма отправки комментария

*

Разрешенные HTML-теги:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

RSS RSS Feed только для этого поста |


Комментарии
  • 21h: нене ) без меня )
  • Серегй: Не совсем грабить)) если грабить можно и без рации, есть более благие цели, вы просто ответьте на мой вопрос,...
  • 21h: магазин грабить собрались? ) не, тут я не помощник ;)
  • Серегй: А что бы мне поймать чужую волну, что мне для этого нужно сделать? Допустим я купил данную рацию себе, мне...
  • 21h: слушать никто не запрещает. нет закона, который запрещает слушать. те, кто говорит иначе нагло врут. а если...
  • Серегй: Я хотел узнать могу ли я просто прийти с данной рацией baofeng uv-5r, допустим на объект, ну или вообще...
  • 21h: У меня есть только эти 2. По другим ничего не знаю. В интернете можно скачать инструкцию к вашей модели рации,...
  • Серегй: Добрый день! Хотелось бы задать пару вопросов по поводу раций, у Вас есть куда можно обратиться ТАТ.
  • 21h: потому, что нейросетью проще. яркость светофора меняется в зависимости от времени суток от маленькой красной...
  • Михаил: А зачем нейросеть? Почему цвет светофора определить без нейросетей?