Update: animation, backup WiFi, docs

This commit is contained in:
UA1ZBE
2026-05-15 13:09:48 +03:00
parent ccc7cdf19f
commit 2a8a192f3a
7 changed files with 23595 additions and 23433 deletions

Binary file not shown.

Binary file not shown.

File diff suppressed because one or more lines are too long

Binary file not shown.

View File

@@ -2,7 +2,7 @@
## Описание
ESP32 часы с OLED дисплеем 1.3" (SH1106), синхронизация времени по NTP, отображение температуры из MQTT.
ESP32 часы с OLED дисплеем 1.3" (SH1106), синхронизация времени по NTP, отображение температуры из MQTT. При включении показывает анимационную заставку UA1ZBE.
## Аппаратная часть
@@ -21,12 +21,17 @@ GPIO21 → SDA
GPIO22 → SCL
```
## Настройка WiFi
## WiFi настройки
В файле `src/main.cpp`:
```cpp
// Основная сеть
const char* ssid = "Keenetic-3222";
const char* password = "28021980";
// Резервная сеть (подключается если основная недоступна)
const char* ssid2 = "TP-Link_45EC";
const char* password2 = "16314733";
```
## MQTT настройки
@@ -34,8 +39,8 @@ const char* password = "28021980";
```cpp
const char* mqtt_server = "ua1zbe.ru";
const int mqtt_port = 1883;
const char* mqtt_topic_pz = "/Meteo/dsw1";
const char* mqtt_topic_kand = "max_kand/temp";
const char* mqtt_topic_pz = "/Meteo/dsw1"; // Температура П-Зори
const char* mqtt_topic_kand = "max_kand/temp"; // Температура Кандалакша
```
## Режимы отображения
@@ -47,11 +52,20 @@ const char* mqtt_topic_kand = "max_kand/temp";
| 30-45 | Температура Кандалакша |
| 45-60 | Часы + дата |
## Последовательность запуска
1. Анимационная заставка UA1ZBE (рамка с надписью, 2 цикла)
2. "Connecting..." - подключение к WiFi
3. "NTP sync..." - синхронизация времени
4. "WiFi + MQTT OK" - всё готово
5. Режим отображения часов и температур
## Структура проекта
```
esp32_oled_clock/
├── platformio.ini # конфигурация PlatformIO
├── README.md # документация
└── src/
└── main.cpp # основной код
```

View File

@@ -64,9 +64,40 @@ void setup() {
Wire.begin(21, 22);
u8g2.begin();
u8g2.setFont(u8g2_font_ncenB14_tr);
int16_t txtW = u8g2.getStrWidth("UA1ZBE");
int16_t framePad = 8;
int16_t txtX = (128 - txtW) / 2;
int16_t txtY = 28;
int16_t frmX = txtX - framePad;
int16_t frmY = txtY - 16;
int16_t frmW = txtW + framePad * 2;
int16_t frmH = 22;
for (int i = 0; i < 2; i++) {
for (int offset = 5; offset >= 0; offset--) {
u8g2.clearBuffer();
u8g2.drawFrame(frmX - offset, frmY - offset, frmW + offset * 2, frmH + offset * 2);
u8g2.drawStr(txtX, txtY, "UA1ZBE");
u8g2.sendBuffer();
delay(60);
}
for (int offset = 0; offset <= 5; offset++) {
u8g2.clearBuffer();
u8g2.drawFrame(frmX - offset, frmY - offset, frmW + offset * 2, frmH + offset * 2);
u8g2.drawStr(txtX, txtY, "UA1ZBE");
u8g2.sendBuffer();
delay(60);
}
}
u8g2.clearBuffer();
u8g2.drawFrame(frmX - 2, frmY - 2, frmW + 4, frmH + 4);
u8g2.drawStr(txtX, txtY, "UA1ZBE");
u8g2.sendBuffer();
delay(1500);
u8g2.clearBuffer();
u8g2.drawStr(20, 40, "Connecting...");
u8g2.drawStr(5, 40, "Connecting...");
u8g2.sendBuffer();
Serial.println("Connecting to WiFi...");
@@ -82,7 +113,7 @@ void setup() {
if (WiFi.status() != WL_CONNECTED) {
Serial.println("\nTrying backup WiFi...");
u8g2.clearBuffer();
u8g2.drawStr(10, 40, "Backup WiFi...");
u8g2.drawStr(5, 40, "Backup WiFi...");
u8g2.sendBuffer();
WiFi.begin(ssid2, password2);
@@ -99,7 +130,7 @@ void setup() {
configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);
Serial.println("Waiting for NTP sync...");
u8g2.clearBuffer();
u8g2.drawStr(10, 40, "NTP sync...");
u8g2.drawStr(5, 40, "NTP sync...");
u8g2.sendBuffer();
int syncAttempts = 0;
@@ -117,19 +148,19 @@ void setup() {
client.setCallback(callback);
reconnect();
u8g2.clearBuffer();
u8g2.drawStr(10, 40, "WiFi + MQTT OK");
u8g2.drawStr(5, 40, "WiFi + MQTT OK");
u8g2.sendBuffer();
delay(1500);
} else {
u8g2.clearBuffer();
u8g2.drawStr(10, 40, "NTP failed!");
u8g2.drawStr(5, 40, "NTP failed!");
u8g2.sendBuffer();
delay(2000);
}
} else {
Serial.println("\nWiFi failed! Status: " + String(WiFi.status()));
u8g2.clearBuffer();
u8g2.drawStr(10, 40, "No WiFi!");
u8g2.drawStr(5, 40, "No WiFi!");
u8g2.sendBuffer();
delay(2000);
}
@@ -138,7 +169,7 @@ void setup() {
configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);
Serial.println("Waiting for NTP sync...");
u8g2.clearBuffer();
u8g2.drawStr(10, 40, "NTP sync...");
u8g2.drawStr(5, 40, "NTP sync...");
u8g2.sendBuffer();
int syncAttempts = 0;
@@ -156,12 +187,12 @@ void setup() {
client.setCallback(callback);
reconnect();
u8g2.clearBuffer();
u8g2.drawStr(10, 40, "WiFi + MQTT OK");
u8g2.drawStr(5, 40, "WiFi + MQTT OK");
u8g2.sendBuffer();
delay(1500);
} else {
u8g2.clearBuffer();
u8g2.drawStr(10, 40, "NTP failed!");
u8g2.drawStr(5, 40, "NTP failed!");
u8g2.sendBuffer();
delay(2000);
}