summaryrefslogtreecommitdiff
path: root/src/main.cpp
diff options
context:
space:
mode:
authorvlapa <vlapa@ya.ru>2026-06-13 17:21:19 +0300
committervlapa <vlapa@ya.ru>2026-06-13 17:21:19 +0300
commit41d41a2173a30988c544d55307c919d316d74895 (patch)
tree1404721f0c833a1e4dc2004a7be04441721d7f78 /src/main.cpp
Firstmain
Diffstat (limited to 'src/main.cpp')
-rw-r--r--src/main.cpp388
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