//******************************************************************** //* //* Tablo na LED 8s5r //* 2021.02.01 - 2026.02.14 //* //* DEC - HEX //* E - пусто //* F - минус //* G - градус //* H - P //* I - h //* J - v //* //******************************************************************** #include #include #include #include #include #include #include #include const char *ssid = "link"; const char *pass = "dkfgf#*12091997"; const char *ntp_server = "ntp3.vniiftri.ru"; const char *host = "89.110.92.137"; const uint16_t port = 8000; const char *address_page = "/"; const uint32_t utcOffsetInSeconds = 10800; const uint32_t utcPeriodMseconds = 86400000; // 86400000-р/сут; 604800000-р/нед WiFiUDP ntpUDP; NTPClient timeClient(ntpUDP, ntp_server, utcOffsetInSeconds, utcPeriodMseconds); const char *tablo_client = "Tablo_Home_2393"; const char *sensor_1 = "Home_bme280_home_in"; const char *sensor_2 = "Villa_bme280_base"; String temp_in, pres_in, hum_in, temp_out; String sensorKeys; WiFiClient espClient; HTTPClient http; uint32_t timeUpdateH = 02; // время обновления NTP uint32_t timeUpdateM = 05; // время обновления NTP String z = ""; // строка данных для отображения // 0-время, 1-темп, 2-давл, 3-влажн, 4-темп2, 5-влажн2 uint16_t visData[] = {5, 2, 2, 2, 2}; uint8_t count_data = 4; // сколько еще отображать показаний uint16_t strOld = 0; uint8_t count = 0; uint32_t timeReadOld = 0; uint32_t color = 0; bool flagSec = true; bool flagTemp = false; bool flagTemp2 = false; bool flagTempOut = false; bool flagPress = false; bool flagHum = false; bool flagHumOut = false; bool flagVis = true; uint32_t timeOld = 0; ESP8266WebServer server(80); ESP8266HTTPUpdateServer httpUpdater; //******************************************************************** // подключение к WiFi void setupWiFi() { digitalWrite(LED_BUILTIN, LOW); // Serial.println("\n\nSetup WiFi: "); Serial.println(); Serial.println("GFGFG"); WiFi.begin(ssid, pass); uint8_t countWiFi = 20; while (WiFi.status() != WL_CONNECTED) { delay(500); // Serial.print('.'); if (!countWiFi--) ESP.restart(); } digitalWrite(LED_BUILTIN, HIGH); //----------------------------------- // индикация IP String l = WiFi.localIP().toString(); l = l.substring(l.lastIndexOf('.') + 1, l.length()); // Serial.print("\nWiFi connected !\n"); // Serial.println(WiFi.localIP()); Serial.println(); if (l.toInt() < 100) { Serial.print("EEE"); } else { Serial.print("EE"); } Serial.println(l); delay(2000); //----------------------------------- // индикация силы сигнала int16_t RSSI_MAX = -50; int16_t RSSI_MIN = -100; int16_t dBm = WiFi.RSSI(); // Serial.print("RSSI dBm = "); // Serial.println(dBm); l = "EEE"; (dBm <= RSSI_MIN) ? l += 0 : (dBm >= RSSI_MAX) ? l += 100 : l += 2 * (dBm + 100); // Serial.print("RSSI % = "); Serial.println(l); // Serial.println("\n"); delay(2000); // Serial.println("DDDDD"); while (!timeClient.update()) { delay(500); // Serial.print('.'); } flagVis = true; count = 0; } //******************************************************************** //******************************************************************** // пересчет millis() void TimeMillis() { timeClient.update(); z = ""; if (timeClient.getHours() < 10) z += "E"; z += timeClient.getHours(); // часы (flagSec) ? z += "F" : z += "E"; if (timeClient.getMinutes() < 10) z += "0"; z += timeClient.getMinutes(); // минуты } //******************************************************************** // BME280 void Temp_in() { if (temp_in.charAt(0) == '-') { if (temp_in.indexOf('.') == 3) { z = "EF" + temp_in.substring(1, temp_in.indexOf('.')); } else { z = "EEF" + temp_in.substring(1, temp_in.indexOf('.')); } } else { if (temp_in.indexOf('.') == 2) { z = "EE" + temp_in.substring(0, temp_in.indexOf('.')); } else { z = "EEE" + temp_in.substring(0, temp_in.indexOf('.')); } } temp_in.substring(0, 1); z += 'G'; flagTemp = true; } void Temp_out() { if (temp_out.charAt(0) == '-') { if (temp_out.indexOf('.') == 3) { z = "EF" + temp_out.substring(1, temp_out.indexOf('.')); } else { z = "EEF" + temp_out.substring(1, temp_out.indexOf('.')); } } else { if (temp_out.indexOf('.') == 2) { z = "EE" + temp_out.substring(0, temp_out.indexOf('.')); } else { z = "EEE" + temp_out.substring(0, temp_out.indexOf('.')); } } temp_in.substring(0, 1); z += 'G'; flagTempOut = true; } void Press() { z += "HE" + pres_in.substring(0, 3); flagPress = true; } void Hum() { (hum_in.length() > 2) ? z = "IE" : z = "IEE"; z += hum_in.substring(0, 2); flagHum = true; } String http_response() { String payload; String url = "http://" + String(host) + ":" + String(port) + address_page; // Serial.println("Sending POST to: " + url); // Serial.println("Data: " + sensorKeys); http.begin(espClient, url); http.addHeader("Content-Type", "text/plain"); // http.setTimeout(10000); // Отправляем POST с нашими ключами int httpCode = http.POST(sensorKeys); // Анализируем ответ if (httpCode > 0) { // Serial.printf("Response code: %d\n", httpCode); if (httpCode == HTTP_CODE_OK) { payload = http.getString(); // Serial.println("Server response: \n" + payload); } } else { // Serial.printf("POST failed, error: %s\n", http.errorToString(httpCode).c_str()); } http.end(); return payload; } void parse_data(String data) { // Serial.println(data); temp_in = data.substring(1, data.indexOf(";")); data = data.substring(data.indexOf(";") + 1, data.length()); // Serial.println(data); pres_in = data.substring(0, data.indexOf(";")); data = data.substring(data.indexOf(";") + 1, data.length()); // Serial.println(data); hum_in = data.substring(0, data.indexOf(";")); data = data.substring(data.indexOf(";") + 7, data.length()); // Serial.println(data); temp_out = data.substring(0, data.indexOf(";")); } //******************************************************************** void setup() { Serial.begin(9600); pinMode(LED_BUILTIN, OUTPUT); digitalWrite(LED_BUILTIN, HIGH); setupWiFi(); timeClient.begin(); server.begin(); httpUpdater.setup(&server); sensorKeys = sensor_1; sensorKeys += ","; sensorKeys += sensor_2; // Serial.println(); // Serial.println(http_response()); // Serial.println(); parse_data(http_response()); delay(1000); timeOld = millis(); } //******************************************************************** void loop() { if (WiFi.status() != WL_CONNECTED) { setupWiFi(); } if (flagVis) { z = ""; switch (count) { case 0: { TimeMillis(); flagTemp = false; flagPress = false; flagHum = false; flagTempOut = false; flagHumOut = false; break; } case 1: { if (flagTemp == false) Temp_in(); break; } case 2: { if (flagPress == false) Press(); break; } case 3: { if (flagHum == false) Hum(); break; } case 4: { if (flagTempOut == false) Temp_out(); break; } } flagVis = false; Serial.println(z); // timeReadOld = millis(); } // Отображение секундного тире if (millis() - timeReadOld >= 500 && (!count)) // || count == 1)) { flagSec = !flagSec; timeReadOld = millis(); flagVis = true; } // Счетчик отображаемых данных if (millis() - timeOld >= (visData[count] * 1000)) { (count >= count_data) ? count = 0 : count++; if (count == 0) parse_data(http_response()); flagVis = true; timeOld = millis(); } server.handleClient(); delay(10); } //********************************************************************