Загрузка данных


void setup() {
  pinMode(LED_PIN, OUTPUT);
  digitalWrite(LED_PIN, LOW);

  themes[0] = {0x0000, 0xFFFF, 0x07E0, 0x39E7}; 
  themes[1] = {0x0000, 0xFFFF, 0xF6A0, 0x781F}; 
  themes[2] = {0x0000, 0xFFFF, 0xF800, 0x7800}; 

  prefs.begin("vape_stats", false);
  puff_total = prefs.getInt("total", 0);
  puff_day   = prefs.getInt("day", 0);
  current_theme_idx = prefs.getInt("theme", 0);
  watts = prefs.getInt("watts", 40);
  loadTheme(current_theme_idx);

  // Сначала ИНИЦИАЛИЗИРУЕМ Wi-Fi, пока экран еще не начал активно слать данные
  WiFi.softAP(ap_ssid, ap_password);
  IPAddress IP = WiFi.softAPIP();

  // Настраиваем Веб-Сервер
  ws.onEvent(onWsEvent);
  server.addHandler(&ws);
  server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){
    request->send_P(200, "text/html", index_html);
  });
  server.begin(); 

  // И только ПОТОМ включаем экран
  tft.initR(INITR_BLACKTAB); 
  tft.setRotation(1); 
  tft.fillScreen(C_BG);

  tft.setTextSize(1); tft.setTextColor(C_ACCENT); tft.setCursor(10, 35);
  tft.print("AP WI-FI READY!");
  tft.setCursor(10, 55); tft.print("IP: "); 
  tft.setTextColor(C_TEXT); tft.print(IP.toString());
  delay(1500); 

  tft.fillScreen(C_BG);
  pinMode(ENCODER_S1, INPUT_PULLUP);
  pinMode(ENCODER_S2, INPUT_PULLUP);
  pinMode(ENCODER_KEY, INPUT_PULLUP);
  last_s1_state = digitalRead(ENCODER_S1);

  drawStaticUI();
  updateWattsUI(true);
}