diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/main.cpp | 388 |
1 files changed, 388 insertions, 0 deletions
diff --git a/src/main.cpp b/src/main.cpp new file mode 100644 index 0000000..a5ce2af --- /dev/null +++ b/src/main.cpp @@ -0,0 +1,388 @@ +//******************************************************************** +//* +//* Tablo na LED 8s5r +//* 2021.02.01 - 2026.02.14 +//* +//* DEC - HEX +//* E - пусто +//* F - минус +//* G - градус +//* H - P +//* I - h +//* J - v +//* +//******************************************************************** +#include <Arduino.h> +#include <ESP8266WiFi.h> +#include <ESP8266WebServer.h> +#include <ESP8266HTTPUpdateServer.h> +#include <ESP8266HTTPClient.h> +#include <WiFiClient.h> +#include <NTPClient.h> +#include <WiFiUdp.h> + +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); +} + +//********************************************************************
\ No newline at end of file |
