Уроки / Урок 11

Часы из интернета

Подключаемся к Wi-Fi и берём точное время по NTP.

У платы нет часов с батарейкой, зато она может спросить точное время у серверов NTP в интернете. Впишите имя и пароль своей сети.

#include <U8g2lib.h>
#include <Wire.h>

// Встроенный экран 0.42": контроллер SSD1306, видимая область 72×40.
// Аргументы: поворот, вывод сброса (нет), SCL = GPIO6, SDA = GPIO5.
U8G2_SSD1306_72X40_ER_F_HW_I2C u8g2(U8G2_R0, U8X8_PIN_NONE, 6, 5);
#include <WiFi.h>
#include <time.h>

const char* WIFI_NAME = "ИмяСети";
const char* WIFI_PASS = "Пароль";

void setup() {
  u8g2.begin();
  u8g2.setFont(u8g2_font_5x8_tf);
  u8g2.drawStr(0, 8, "Wi-Fi...");
  u8g2.sendBuffer();

  WiFi.begin(WIFI_NAME, WIFI_PASS);
  while (WiFi.status() != WL_CONNECTED) {
    delay(300);
  }
  configTzTime("MSK-3", "pool.ntp.org");  // часовой пояс: Москва
}

void loop() {
  struct tm t;
  if (!getLocalTime(&t)) {
    delay(200);
    return;
  }
  char hm[6], sec[3], date[11];
  strftime(hm, sizeof(hm), "%H:%M", &t);
  strftime(sec, sizeof(sec), "%S", &t);
  strftime(date, sizeof(date), "%d.%m.%Y", &t);

  u8g2.clearBuffer();
  u8g2.setFont(u8g2_font_logisoso16_tn);
  u8g2.drawStr(0, 20, hm);
  u8g2.setFont(u8g2_font_5x8_tf);
  u8g2.drawStr(60, 20, sec);
  u8g2.drawStr(0, 36, date);
  u8g2.sendBuffer();
  delay(200);
}

Плата не подключается к Wi-Fi? У маленьких плат ESP32-C3 часто слабая антенна, которая сбивается на полной мощности. Добавьте сразу после WiFi.begin(...) строку WiFi.setTxPower(WIFI_POWER_8_5dBm);

Другие часовые пояса: "EET-2" — Калининград, "SAMT-4" — Самара, "YEKT-5" — Екатеринбург, "NOVT-7" — Новосибирск.