{"id":344897,"date":"2023-02-02T15:03:18","date_gmt":"2023-02-02T15:03:18","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=344897"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=344897","title":{"rendered":"<span>HabraTab \u2014 \u0434\u0435\u0432\u0430\u0439\u0441 \u0434\u043b\u044f \u0445\u0430\u0431\u0440\u043e\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0445<\/span>"},"content":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0427\u0442\u043e-\u0442\u043e \u0447\u0430\u0441\u0442\u043e \u0441\u0442\u0430\u043b \u0437\u0430\u0433\u043b\u044f\u0434\u044b\u0432\u0430\u0442\u044c \u0432 \u043f\u0440\u043e\u0444\u0438\u043b\u044c \u043f\u043e\u0441\u043b\u0435 \u043a\u0430\u0436\u0434\u043e\u0439 \u043d\u043e\u0432\u043e\u0439 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438. \u0422\u0430\u043a \u0432\u043e\u0442 \u044f \u0438 \u0440\u0435\u0448\u0438\u043b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0442\u0430\u0431\u043b\u043e, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0441\u0442\u043e\u044f\u043b\u043e \u0431\u044b \u043d\u0430 \u0441\u0442\u043e\u043b\u0435, \u0438 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u043b\u043e \u043c\u0435\u0441\u0442\u043e \u0432 \u0440\u0435\u0439\u0442\u0438\u043d\u0433\u0435, \u043a\u0430\u0440\u043c\u0443, \u043d\u0443 \u0438 \u0441\u0430\u043c\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043e\u0447\u043a\u043e\u0432 \u0440\u0435\u0439\u0442\u0438\u043d\u0433\u0430. <\/p>\n<p>\u0414\u043b\u044f \u0436\u0435\u043b\u0430\u044e\u0449\u0438\u0445 \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u044c \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0441\u0431\u043e\u0440\u043a\u0438 \u0438\u0437 \u043c\u043e\u0434\u0443\u043b\u0435\u0439, \u0442\u0430\u043a \u0438 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u0436\u0435\u043b\u0435\u0437\u043a\u0430. \u041d\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0432 \u043e\u0431\u0449\u0435\u043c \u043e\u0447\u0435\u043d\u044c \u0434\u0430\u0436\u0435 \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u043e\u0435, \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0435 \u0441 Arduino IDE, \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0432\u043e\u0442\u043a\u043d\u0443\u0442\u044c USB \u0438 \u043c\u043e\u0436\u043d\u043e \u0448\u0438\u0442\u044c. \u041f\u043e\u0440\u043e\u0433 \u0432\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439. \u0410 \u043f\u043e\u0447\u0435\u043c\u0443 \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u043e\u0435- \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435\u043c \u043a\u043e\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u043f\u0430\u0440\u0441\u0438\u0442\u044c \u0447\u0442\u043e \u0443\u0433\u043e\u0434\u043d\u043e \u0441 \u043b\u044e\u0431\u043e\u0433\u043e \u0441\u0430\u0439\u0442\u0430.<\/p>\n<p>\u0420\u0430\u0437 \u0443\u0436 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u043e \u0432\u0441\u0435\u0433\u0434\u0430 \u0438 \u0441\u0442\u043e\u044f\u0442\u044c \u043d\u0430 \u0441\u0442\u043e\u043b\u0435- \u043e\u043d\u043e \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0435\u0449\u0435 \u0438 \u0432\u0440\u0435\u043c\u044f, \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0443 \u0438 \u0432\u043b\u0430\u0436\u043d\u043e\u0441\u0442\u044c \u0432\u043e\u0437\u0434\u0443\u0445\u0430.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/805\/34b\/70b\/80534b70b058fecf1fbaaf5a0dd7ece2.jpeg\" width=\"1600\" height=\"1200\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/805\/34b\/70b\/80534b70b058fecf1fbaaf5a0dd7ece2.jpeg\" data-blurred=\"true\"\/><figcaption><\/figcaption><\/figure>\n<h3>API \u0445\u0430\u0431\u0440\u0430<\/h3>\n<h3>&#8230; \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043d\u0435\u0442 \ud83d\ude41<\/h3>\n<p>\u0422\u0443\u0442 \u044f \u0437\u0430\u0434\u0443\u043c\u0430\u043b\u0441\u044f \u043a\u0430\u043a\u00a0\u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435. \u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0441\u043a\u0430\u0437\u0430\u043b\u0430 \u0447\u0442\u043e\u00a0\u0410\u041f\u0418 \u0437\u0430\u0434\u0430\u0447\u0430 \u043d\u0435\u00a0\u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u043d\u0430\u044f, \u043d\u043e\u00a0\u0433\u0434\u0435\u2011\u0442\u043e \u0432\u00a0\u043f\u043b\u0430\u043d\u0430\u0445 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442. \u0417\u043d\u0430\u0447\u0438\u0442 \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u043f\u0430\u0440\u0441\u0438\u0442\u044c \u043f\u043e\u00a0\u044f\u043a\u043e\u0440\u044f\u043c. \u0422\u043e\u2011\u0435\u0441\u0442\u044c \u0438\u0449\u0435\u043c \u043a\u0443\u0441\u043e\u043a \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u0434 \u043d\u0443\u0436\u043d\u044b\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c, \u0438 \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u0443\u044f\u0441\u044c \u043f\u043e\u00a0\u043d\u0435\u043c\u0443 \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u0435\u043c \u043d\u0443\u0436\u043d\u044b\u0435.<\/p>\n<h2>\u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043a\u043e\u0434<\/h2>\n<p>\u0412\u0435\u0441\u044c \u043a\u043e\u0434 \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u0432\u00a0\u0441\u0440\u0435\u0434\u0435 ArduinoIDE. \u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f, \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u2011 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439. \u0413\u043e\u043b\u044b\u0439 \u043a\u043e\u0434 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u043f\u0440\u043e\u0444\u0438\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0432\u0435\u0441\u0438\u0442 \u043e\u043a\u043e\u043b\u043e 120\u043a\u0411. \u0425\u0440\u0430\u043d\u0438\u0442\u044c \u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0437\u0432\u0435 \u0447\u0442\u043e\u00a0\u0432\u00a0\u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435, \u043d\u043e\u00a0\u043e\u0441\u043e\u0431\u043e\u0433\u043e \u0441\u043c\u044b\u0441\u043b\u0430 \u043d\u0435\u0442. \u0414\u043b\u044f\u00a0\u043a\u043b\u0430\u0441\u0441\u0430 Stream \u0432\u00a0Arduino IDE \u0435\u0441\u0442\u044c \u043e\u0442\u043b\u0438\u0447\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f find(), \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043c\u044b \u0438 \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f.<\/p>\n<details class=\"spoiler\">\n<summary>\u041a\u043e\u0434 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430 \u0441 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u043c\u0438<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\"> if ((WiFi.status() == WL_CONNECTED)) {  \/\/\u0415\u0441\u043b\u0438 \u0435\u0441\u0442\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a Wifi     http.begin(client, SURL + USER + \"\/\");  \/\/\u041e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c HTTP \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 delay(10);     int httpCode = http.GET(); \/\/\u041f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u043c GET \u0437\u0430\u043f\u0440\u043e\u0441     delay(10); Serial.print(\"httpCode\");     Serial.println(httpCode);     if (httpCode==200) {   \/\/\u0415\u0441\u043b\u0438 \u043e\u0442\u0432\u0435\u0442 200          WiFiClient* stream = http.getStreamPtr();  \/\/\u041f\u0440\u0435\u0431\u0440\u0430\u0437\u0443\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u043f\u043e\u0442\u043e\u043a Stream          if (stream->available()) { \/\/\u0415\u0441\u043b\u0438 \u043f\u043e\u0442\u043e\u043a \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d            \/\/----------------\u043a\u0430\u0440\u043c\u0430           stream->find(R\"rawliteral(karma__votes_positive\">)rawliteral\");   \/\/\u0418\u0449\u0435\u043c \u044f\u043a\u043e\u0440\u044c           for (int i = 0; i &lt; 5; i++) {       \/\/\u041e\u0442\u0441\u0442\u0443\u043f \u043e\u0442 \u044f\u043a\u043e\u0440\u044f             stream->read();           }            for (byte i = 0; i &lt; 5; i++) {     \/\/\u0427\u0438\u0442\u0430\u0435\u043c \u043d\u0443\u0436\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432             KARMA[i] = stream->read();           }            \/\/----------------\u0440\u0435\u0439\u0442\u0438\u043d\u0433            stream->find(R\"rawliteral(tm-rating__counter\">)rawliteral\");            for (byte i = 0; i &lt; 7; i++) {             RATING[i] = stream->read();           }            \/\/----------------\u043f\u043e\u0437\u0438\u0446\u0438\u044f            stream->find(\"\u0412 \u0440\u0435\u0439\u0442\u0438\u043d\u0433\u0435\");           for (int i = 0; i &lt; 118; i++) {             stream->read();           }            for (byte i = 0; i &lt; 4; i++) {             RatingPos[i] = stream->read();           }             Serial.println(KARMA);           Serial.println(RATING);           Serial.println(RatingPos);           Serial.println(\"END\");         }         delay(10);           Serial.println();         Serial.print(\"[HTTP] connection closed or file end.\\n\");            } else {       Serial.printf(\"[HTTP] GET... failed, error: %s\\n\", http.errorToString(httpCode).c_str());     }      http.end();     delay(10);   }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0438<\/p>\n<details class=\"spoiler\">\n<summary>\u0412\u0435\u0441\u044c \u043a\u043e\u0434<\/summary>\n<div class=\"spoiler__content\">\n<details class=\"spoiler\">\n<summary>\u0413\u043b\u0430\u0432\u043d\u044b\u0439<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">    String USER = \"ENGIN33RRR\";  \/\/\u0418\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f const char ssid[] = \"Eng\";   \/\/SSID const char password[] = \"123456789h\";  \/\/\u041f\u0430\u0440\u043e\u043b\u044c \u043e\u0442 WiFi  const char* ntpServer1 = \"pool.ntp.org\";  \/\/\u041f\u0435\u0440\u0432\u044b\u0439 \u0441\u0435\u0440\u0432\u0435\u0440 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 const char* ntpServer2 = \"time.nist.gov\"; \/\/\u0412\u0442\u043e\u0440\u043e\u0439 \u0441\u0435\u0440\u0432\u0435\u0440 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 const long gmtOffset_sec = 21600;         \/\/\u0427\u0430\u0441\u043e\u0432\u043e\u0439 \u043f\u043e\u044f\u0441 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0430\u0445   String SURL = \"https:\/\/habr.com\/ru\/users\/\"; \/\/\u041d\u0430\u0447\u0430\u043b\u043e \u0430\u0434\u0440\u0435\u0441\u0430 \u0434\u043e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f     \/\/L\u041e\u0431\u044a\u044f\u0432\u043b\u044f\u0435\u043c \u0414\u0438\u0441\u043f\u043b\u0435\u0439 #include &lt;GxEPD2_BW.h> #define USE_VSPI_FOR_EPD #define GxEPD2_DISPLAY_CLASS GxEPD2_BW #define MAX_DISPLAY_BUFFER_SIZE 65536ul        #define GxEPD2_DRIVER_CLASS GxEPD2_290_T94_V2   #define MAX_HEIGHT(EPD) (EPD::HEIGHT &lt;= MAX_DISPLAY_BUFFER_SIZE \/ (EPD::WIDTH \/ 8) ? EPD::HEIGHT : MAX_DISPLAY_BUFFER_SIZE \/ (EPD::WIDTH \/ 8)) GxEPD2_DISPLAY_CLASS&lt;GxEPD2_DRIVER_CLASS, MAX_HEIGHT(GxEPD2_DRIVER_CLASS)> display(GxEPD2_DRIVER_CLASS(\/*CS=*\/5, \/*DC=*\/17, \/*RST=*\/16, \/*BUSY=*\/4));     \/\/\u0428\u0440\u0438\u0444\u0442\u044b #include &lt;Fonts\/FreeMonoBold9pt7b.h> #include &lt;Fonts\/FreeMonoBold12pt7b.h> #include &lt;Fonts\/FreeMonoBold18pt7b.h> #include &lt;Fonts\/FreeMonoBold24pt7b.h> #include &lt;Fonts\/FreeSerifBoldItalic18pt7b.h>               \/\/\u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 Wifi, HTTP \u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 #include &lt;WiFi.h> #include &lt;WiFiClient.h> #include &lt;WiFiClientSecure.h> WiFiClientSecure client;  #include &lt;HTTPClient.h> HTTPClient http;   #include \"time.h\" #include \"sntp.h\"      \/\/\u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0434\u043b\u044f \u0434\u0430\u0442\u0447\u0438\u043a\u0430 \u0442\u0435\u043c\u043f\u0440\u0435\u0430\u0442\u0443\u0440\u044b\/\u0432\u043b\u0430\u0436\u043d\u043e\u0441\u0442\u0438 #include &lt;Adafruit_Sensor.h> #include &lt;DHT.h>  #define DHTPIN 27      #define DHTTYPE DHT22   DHT dht(DHTPIN, DHTTYPE);      \/\/\u041f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u0444\u0438\u043a\u0441\u0430\u0446\u0438\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 String KARMA = \"000\"; String RATING = \"000.0\"; String RatingPos = \"999\";  String KARMA1; String RATING1; String RatingPos1;  float Temp; float Hum;  float HumR; float TempR;   char TimeDisp[9];  byte count; bool flag;  long ms; long ms1; bool blink; bool noWiFi; byte WS;   void setup() {    xTaskCreatePinnedToCore(     Graph,   \/\/\u0424\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u043e\u0442\u043e\u043a\u0430     \"Task2\", \/\/\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u0442\u043e\u043a\u0430     16000,   \/\/\u0421\u0442\u0435\u043a \u043f\u043e\u0442\u043e\u043a\u0430     NULL,    \/\/\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043f\u043e\u0442\u043e\u043a\u0430     1,       \/\/\u041f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442 \u043f\u043e\u0442\u043e\u043a\u0430     NULL,  \/\/\u0418\u0434\u0435\u043d\u0442\u0438\u0444\u043a\u0430\u0442\u043e\u0440 \u043f\u043e\u0442\u043e\u043a\u0430     0);      \/\/\u042f\u0434\u0440\u043e \u0434\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043f\u043e\u0442\u043e\u043a\u0430     delay(500);    xTaskCreatePinnedToCore(     FileUpdate, \/\/\u0424\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u043e\u0442\u043e\u043a\u0430     \"Task1\",    \/\/\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u0442\u043e\u043a\u0430     10000,      \/\/\u0421\u0442\u0435\u043a \u043f\u043e\u0442\u043e\u043a\u0430     NULL,       \/\/\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043f\u043e\u0442\u043e\u043a\u0430     2,          \/\/\u041f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442 \u043f\u043e\u0442\u043e\u043a\u0430     NULL,     \/\/\u0418\u0434\u0435\u043d\u0442\u0438\u0444\u043a\u0430\u0442\u043e\u0440 \u043f\u043e\u0442\u043e\u043a\u0430     1);         \/\/\u042f\u0434\u0440\u043e \u0434\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043f\u043e\u0442\u043e\u043a\u0430    delay(500); }     void FileUpdate(void* pvParameters) {  Serial.begin(115200);             \/\/\u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f UART   \/\/http.setReuse(true);               http.setTimeout(3000);  http.setReuse(true);   Connect();  \/\/\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c\u0441\u044f \u043a WiFi    client.setInsecure(); \/\/\u0418\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u043c \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u044b HTTPS    for (;;) \/\/\u0426\u0438\u043a\u043b \u043f\u043e\u0442\u043e\u043a\u0430   {      if (WiFi.status() == WL_CONNECTED) {  \/\/\u0415\u0441\u043b\u0438 \u0435\u0441\u0442\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435        if (WiFi.RSSI() > -60) {    \/\/\u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u043c \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0434\u043b\u044f \u0437\u043d\u0430\u0447\u043a\u0430         WS = 2;       } else if (WiFi.RSSI() > -70) {         WS = 1;       } else {         WS = 0;       }       noWiFi = 0;             findVAR();  \/\/\u0424\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439     } else {       Reconnect();   \/\/\u041f\u0435\u0440\u0435\u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c Wifi       noWiFi = 1;          }        if (!KARMA1.equals(KARMA) || !RATING1.equals(RATING) || !RatingPos1.equals(RatingPos)) {  \/\/\u0414\u0435\u0442\u0435\u043a\u0442\u0438\u0440\u0443\u0435\u043c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445       KARMA1 = KARMA;       RATING1 = RATING;       RatingPos1 = RatingPos;       flag = 1;             \/\/\u0418 \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u0435\u043c \u0444\u043b\u0430\u0433     }      vTaskDelay(20000);    \/\/\u041f\u0430\u0443\u0437\u0430 20 \u0441\u0435\u043a\u0443\u043d\u0434   } }    void Graph(void* pvParameters) {     \/\/\u041f\u043e\u0442\u043e\u043a \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438 \u043d\u0430 \u0434\u0438\u0441\u043f\u043b\u0435\u0439    configTime(gmtOffset_sec, 0, ntpServer1, ntpServer2); \/\/\u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u0441\u043b\u0443\u0436\u0431\u0443 \u0432\u0440\u0435\u043c\u0435\u043d\u0438   dht.begin();       \/\/\u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u0434\u0430\u0442\u0447\u0438\u043a \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u044b   display.init();    \/\/\u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u0434\u0438\u0441\u043f\u043b\u0435\u0439   display.setRotation(3);    display.clearScreen(); \/\/\u041e\u0447\u0438\u0441\u0442\u043a\u0430 \u044d\u043a\u0440\u0430\u043d\u0430   display.setTextColor(GxEPD_BLACK);   display.fillScreen(GxEPD_WHITE);   Static(); \/\/ \u041e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0430 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f   display.display(false);  \/\/\u041f\u043e\u043b\u043d\u044b\u0439 \u0432\u044b\u0432\u043e\u0434 \u043d\u0430 \u0434\u0438\u0441\u043f\u043b\u0435\u0439     for (;;) {   \/\/\u0426\u0438\u043a\u043b \u043f\u043e\u0442\u043e\u043a\u0430 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438 \u043d\u0430 \u0434\u0438\u0441\u043f\u043b\u0435\u0439      updLocalTime(); \/\/\u041e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u043c \u0432\u0440\u0435\u043c\u044f \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439      if (millis() > ms + 1000) {  \/\/\u041e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u043c \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u0434\u0430\u0442\u0447\u0438\u043a\u0430 \u0440\u0430\u0437 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443         ms = millis();       HumR = dht.readHumidity();       TempR = dht.readTemperature();     }      if (!isnan(HumR) || !isnan(TempR)) { \/\/\u0415\u0441\u043b\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043d\u0435 NAN, \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u043c \u0432 \u043f\u0435\u0440\u043c\u0435\u043d\u043d\u044b\u0435       Hum = HumR;       Temp = TempR;     }  if (millis() > ms1 + 1000) {  \/\/\u041c\u043e\u0440\u0433\u0430\u043b\u043a\u0430 \u0434\u043b\u044f \u043f\u043e\u0442\u0435\u0440\u0438 WiFi   ms1=millis();       blink = !blink;     }        Dynamic(); \/\/ \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438 \u043c\u0435\u043d\u044f\u044e\u0449\u0438\u0445\u0441\u044f \u0434\u0430\u043d\u043d\u044b\u0445        } }       void loop() { \/\/\u041d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u0420\u0430\u0431\u043e\u0442\u0430 \u0441 WiFi<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">    void Connect(void) {    WiFi.mode(WIFI_STA);  delay(10);   WiFi.begin(ssid, password); delay(10);   while (WiFi.status() != WL_CONNECTED &amp;&amp; count &lt; 15) {     count++;     delay(500);   }    delay(10);  }   void Reconnect(void) {  KARMA = \"000\"; RATING = \"000.0\"; RatingPos = \"999\";    WiFi.disconnect();   vTaskDelay(1000);   WiFi.begin(ssid, password);   count = 0;   while (WiFi.status() != WL_CONNECTED &amp;&amp; count &lt; 15 ) {     count++;     delay(500);       }     } <\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u0413\u0440\u0430\u0444\u0438\u043a\u0430<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\"> void Static() {    display.setFont(&amp;FreeMonoBold12pt7b);   display.fillRect(0, 0, 296, 20, GxEPD_BLACK);   display.setTextColor(GxEPD_WHITE);   display.setCursor(10, 16);   display.print(\"HabraTab\");  display.fillRect(10, 80, 276, 2, GxEPD_BLACK); display.fillRect(15, 50, 73, 2, GxEPD_BLACK); display.fillRect(103, 50, 90, 2, GxEPD_BLACK); display.fillRect(208, 50, 73, 2, GxEPD_BLACK);   display.setTextColor(GxEPD_BLACK);   display.setCursor(18, 72);   display.print(\"Karma\");   display.setCursor(115, 72);   display.print(\"Score\");   display.setCursor(215, 72);  display.print(\"R No\");  display.setFont(&amp;FreeSerifBoldItalic18pt7b);  display.fillRect(15, 22, 100, 26, GxEPD_WHITE);   display.setCursor(15, 45);   display.print(KARMA.toInt());   display.fillRect(110, 22, 100, 26, GxEPD_WHITE);   display.setCursor(110, 45);   display.print(RATING.toFloat(), 1);   display.fillRect(220, 22, 85, 26, GxEPD_WHITE);   display.setCursor(220, 45);   display.print(RatingPos.toInt()); display.setFont(&amp;FreeMonoBold12pt7b);   display.setCursor(5, 100);   display.print(\"@\");   display.print(USER);   display.setTextColor(GxEPD_BLACK); display.fillRect(0, 108, 296, 20, GxEPD_BLACK);  }   void Dynamic() {    display.setFont(&amp;FreeMonoBold12pt7b);     display.fillRect(145, 0, 150, 20, GxEPD_BLACK);              if (!noWiFi || blink) {       display.fillCircle(148, 9, 3, GxEPD_WHITE);       display.fillRect(156, 6, 2, 8, GxEPD_WHITE);        if (WS == 1) {          display.fillRect(162, 4, 2, 12, GxEPD_WHITE);       }       if (WS == 2) {         display.fillRect(162, 4, 2, 12, GxEPD_WHITE);         display.fillRect(168, 2, 2, 16, GxEPD_WHITE);       }     }     display.setTextColor(GxEPD_WHITE);     display.setCursor(175, 16);     display.print(TimeDisp);     vTaskDelay(1);       if (flag) {        display.setFont(&amp;FreeSerifBoldItalic18pt7b);       display.setTextColor(GxEPD_BLACK);       display.fillRect(15, 22, 95, 26, GxEPD_WHITE);       display.setCursor(15, 45);       display.print(KARMA.toInt());       display.fillRect(110, 22, 95, 26, GxEPD_WHITE);       display.setCursor(110, 45);       display.print(RATING.toFloat(), 1);       display.fillRect(220, 22, 76, 26, GxEPD_WHITE);       display.setCursor(220, 45);       display.print(RatingPos.toInt());       flag = 0;     }      display.setFont(&amp;FreeMonoBold12pt7b);     display.fillRect(0, 108, 200, 20, GxEPD_BLACK);     display.setTextColor(GxEPD_WHITE);     display.setCursor(10, 124);     vTaskDelay(1);     display.print(\"T\");           display.print(Temp, 1);          display.setFont(&amp;FreeMonoBold9pt7b);     display.setCursor(82, 118);     display.print(\"o\");     display.setFont(&amp;FreeMonoBold12pt7b);     display.setCursor(120, 124);     display.print(\"H\");          display.print(Hum, 1);       display.print(\"%\");          vTaskDelay(10);     display.display(true);     vTaskDelay(10);   }  <\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u0412\u0440\u0435\u043c\u044f<\/summary>\n<div class=\"spoiler__content\">\n<pre><code> void setTime (){    sntp_set_time_sync_notification_cb(timeavailable);   configTime(gmtOffset_sec, 0, ntpServer1, ntpServer2);    }   void updLocalTime() {   struct tm timeinfo; getLocalTime(&amp;timeinfo); strftime(TimeDisp,9, \"%H:%M:%S\", &amp;timeinfo); }  \/\/ Callback function (get's called when time adjusts via NTP) void timeavailable(struct timeval *t) {  } <\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<\/div>\n<\/details>\n<p>\u0412\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u043d\u0435\u00a0\u0442\u0430\u043a \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u2011 \u0440\u0430\u0431\u043e\u0442\u0430 \u0441\u00a0\u0434\u0438\u0441\u043f\u043b\u0435\u0435\u043c, \u0434\u0430\u0442\u0447\u0438\u043a\u043e\u043c \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u044b \u0438 \u0432\u043b\u0430\u0436\u043d\u043e\u0441\u0442\u0438, \u0432\u0440\u0435\u043c\u044f \u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\/\u043f\u0435\u0440\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a\u00a0WiFi. \u041d\u0443 \u0440\u0430\u0437\u0432\u0435 \u0447\u0442\u043e\u00a0\u043f\u0430\u0440\u0430 \u0441\u043b\u043e\u0432 \u043e\u00a0FreeRTOS.<\/p>\n<p>\u0422\u0430\u043a \u043a\u0430\u043a\u00a0\u0432\u0440\u0435\u043c\u044f \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u0432\u0438\u0434\u0435\u0442\u044c \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0435, \u0432\u043f\u043b\u043e\u0442\u044c \u0434\u043e\u00a0\u0441\u0435\u043a\u0443\u043d\u0434\u044b, \u0447\u0442\u043e\u0431\u044b \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043a\u00a0\u0441\u0435\u0440\u0432\u0435\u0440\u0443 \u0435\u043c\u0443 \u043d\u0435\u00a0\u043c\u0435\u0448\u0430\u043b\u043e\u2011 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0430 \u043d\u0430\u00a0\u0434\u0438\u0441\u043f\u043b\u0435\u0439 \u0432\u044b\u043d\u0435\u0441\u0435\u043d\u0430 \u0432\u00a0\u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u043e\u0442\u043e\u043a. \u0422\u0430\u043a \u0443\u00a0\u043d\u0430\u0441 \u0432\u0441\u0435 \u0447\u0442\u043e\u00a0\u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f \u0434\u0438\u0441\u043f\u043b\u0435\u044f \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043d\u0430\u00a0\u043e\u0434\u043d\u043e\u043c \u044f\u0434\u0440\u0435, \u0430\u00a0\u0432\u0441\u0435 \u0447\u0442\u043e\u00a0\u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f \u0441\u0435\u0442\u0438\u2011 \u043d\u0430\u00a0\u0434\u0440\u0443\u0433\u043e\u043c.<\/p>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438:<\/p>\n<ul>\n<li>\n<p><a href=\"https:\/\/github.com\/ZinggJM\/GxEPD2\" rel=\"noopener noreferrer nofollow\">GxEPD2<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/github.com\/adafruit\/Adafruit-GFX-Library\" rel=\"noopener noreferrer nofollow\">Adafruit GFX<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/github.com\/adafruit\/DHT-sensor-library\" rel=\"noopener noreferrer nofollow\">Adafruit DHT<\/a><\/p>\n<\/li>\n<\/ul>\n<p>\u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0434\u043b\u044f\u00a0\u0440\u0430\u0431\u043e\u0442\u044b \u0441\u00a0WiFi \u0438 HTTP \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u0432 <a href=\"https:\/\/github.com\/espressif\/arduino-esp32\" rel=\"noopener noreferrer nofollow\">\u044f\u0434\u0440\u0435 ESP32<\/a> \u0434\u043b\u044f\u00a0Arduino IDE.<\/p>\n<h2>\u0416\u0435\u043b\u0435\u0437\u043e<\/h2>\n<h3>\u0421\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u0438\u0437 \u043c\u043e\u0434\u0443\u043b\u0435\u0439<\/h3>\n<figure class=\"float full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/dce\/f72\/af0\/dcef72af033d47a1ec2d41c95dacaedc.jpg\" width=\"800\" height=\"800\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/dce\/f72\/af0\/dcef72af033d47a1ec2d41c95dacaedc.jpg\" data-blurred=\"true\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0425\u043e\u0442\u0435\u043b \u0431\u044b\u043b\u043e \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c TFT \u043d\u0430 3.5 \u0434\u044e\u0439\u043c\u0430, \u043d\u043e \u0447\u0442\u043e-\u0442\u043e \u043b\u0435\u043d\u044c \u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u043d\u043e\u0432\u0443\u044e \u043f\u043b\u0430\u0442\u0443, \u0430 \u0438\u0437 \u0441\u0442\u0430\u0440\u044b\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u043e\u0441\u043e\u0431\u043e \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043f\u043e\u0434\u0433\u043e\u043d\u0438\u0448\u044c. \u0412\u0441\u043f\u043e\u043c\u043d\u0438\u043b \u0447\u0442\u043e \u0435\u0441\u0442\u044c \u0443 \u043c\u0435\u043d\u044f E-Ink \u0434\u0438\u0441\u043f\u043b\u0435\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044f \u0435\u0449\u0435 \u043d\u0438\u0433\u0434\u0435 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b. \u0410 \u0442\u0443\u0442 \u043a\u0430\u043a \u0440\u0430\u0437- \u0438 \u0441\u0432\u0435\u0442\u0438\u0442\u0441\u044f \u043f\u043e \u043d\u043e\u0447\u0430\u043c \u043d\u0435 \u0431\u0443\u0434\u0435\u0442, \u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u0447\u0430\u0441\u0442\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e. \u0412\u044b\u0431\u043e\u0440 \u043f\u0430\u043b \u043d\u0430 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0434\u0438\u0441\u043f\u043b\u0435\u0439 \u0434\u0438\u0430\u0433\u043e\u043d\u0430\u043b\u044c\u044e 2.9 \u0434\u044e\u0439\u043c\u0430 c \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435\u043c 296\u0445128 \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439. \u041d\u043e \u0432\u0435\u0440\u0441\u0438\u044f \u0441 TFT \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0431\u0443\u0434\u0435\u0442, \u0438 \u0434\u0430\u0436\u0435 \u0431\u0443\u0434\u0435\u0442 \u0430\u0432\u0430\u0442\u0430\u0440 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c, \u043d\u043e \u043f\u043e\u0437\u0436\u0435.<\/p>\n<figure class=\"float full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/a5c\/2b0\/3ad\/a5c2b03ad91cad04b5e3af7fd2c59ce9.webp\" width=\"1400\" height=\"1400\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0421\u0435\u0440\u0434\u0446\u0435\u043c \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0431\u0443\u0434\u0435\u0442 ESP32. \u0414\u043b\u044f 8266 \u0434\u0430\u043d\u043d\u044b\u0445 \u043c\u043d\u043e\u0433\u043e\u0432\u0430\u0442\u043e \u0431\u0443\u0434\u0435\u0442, \u0440\u0430\u0431\u043e\u0442\u0430 \u0441\u043e \u0441\u0442\u0440\u043e\u043a\u0430\u043c\u0438 \u0438 \u0444\u0430\u0439\u043b\u0430\u043c\u0438 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u043c\u043d\u043e\u0433\u043e \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432, \u0434\u0430 \u0438 \u0432\u0442\u043e\u0440\u043e\u0435 \u044f\u0434\u0440\u043e \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 \u0441\u0435\u0442\u044c\u044e \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0435\u0442 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c \u0433\u043b\u044e\u043a\u043e\u0432. \u041a \u0442\u043e\u043c\u0443-\u0436\u0435 \u043d\u0430 \u0431\u0443\u0434\u0443\u0449\u0435\u0435 \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u0435\u0442\u0441\u044f TFT \u0434\u0438\u0441\u043f\u043b\u0435\u0439 \u0438 \u0433\u0440\u0430\u0444\u0438\u043a\u0430, \u0430 \u044d\u0442\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432. \u0417\u0434\u0435\u0441\u044c \u043f\u043e\u0434\u043e\u0439\u0434\u0435\u0442 \u043b\u044e\u0431\u0430\u044f \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u0430\u044f \u043f\u043b\u0430\u0442\u0430 \u0441 ESP32 Wroom \u043d\u0430 \u0431\u043e\u0440\u0442\u0443.<\/p>\n<h3>\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h3>\n<p>\u0422\u0443\u0442 \u043d\u0438\u0447\u0435\u0433\u043e \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0433\u043e, \u0443\u00a0\u043c\u043e\u0434\u0443\u043b\u044f 4\u00a0\u043f\u0440\u043e\u0432\u043e\u0434\u043d\u043e\u0439 SPI + 2\u00a0\u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0430. \u041a\u00a0ESP32\u00a0\u0446\u0435\u043f\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0441\u0442\u043e:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/b1f\/cae\/926\/b1fcae926674f4e5155807c3919207de.jpeg\" width=\"1277\" height=\"639\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b1f\/cae\/926\/b1fcae926674f4e5155807c3919207de.jpeg\" data-blurred=\"true\"\/><figcaption><\/figcaption><\/figure>\n<blockquote>\n<p>\/\/ BUSY -> 4, RST -> 16, DC -> 17, CS -> SS(5), CLK -> SCK(18), DIN -> MOSI(23), GND -> GND, 3.3V -> 3.3V<\/p>\n<\/blockquote>\n<p>\u0414\u0430\u0442\u0447\u0438\u043a DHT22\u00a0\u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432\u044b\u0445\u043e\u0434\u043e\u043c \u043d\u0430 27\u00a0\u043d\u043e\u0433\u0443 ESP32, \u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0435\u0449\u0435 \u043f\u0438\u0442\u0430\u043d\u0438\u0435.<\/p>\n<h2>\u0416\u0435\u043b\u0435\u0437\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f<\/h2>\n<p>\u0414\u043b\u044f\u00a0\u0437\u0430\u043a\u043e\u043d\u0447\u0435\u043d\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438\u00a0\u0431\u044b\u043b\u0430 \u043d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0430 \u0441\u0445\u0435\u043c\u0430:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/556\/d00\/00b\/556d0000b5fb6a5d8125a2649aa5a892.png\" width=\"3069\" height=\"1405\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/556\/d00\/00b\/556d0000b5fb6a5d8125a2649aa5a892.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0422\u0443\u0442 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0430\u044f \u0434\u043b\u044f ESP32 \u043e\u0431\u0432\u044f\u0437\u043a\u0430 \u0438 UART \u043c\u043e\u0441\u0442 \u043d\u0430 CH340. \u041f\u043e \u043f\u0438\u0442\u0430\u043d\u0438\u044e \u0441\u0442\u043e\u0438\u0442 1117 \u043d\u0430 3.3\u0412. \u041e\u0431\u0432\u044f\u0437\u043a\u0430 \u0434\u0438\u0441\u043f\u043b\u0435\u044f \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0430\u044f \u0438\u0437 <a href=\"https:\/\/www.waveshare.com\/w\/upload\/7\/79\/2.9inch-e-paper-v2-specification.pdf\" rel=\"noopener noreferrer nofollow\">\u0434\u0430\u0442\u0430\u0448\u0438\u0442\u0430.<\/a><\/p>\n<p>\u0418 \u043f\u043b\u0430\u0442\u0430:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/1ad\/354\/c7a\/1ad354c7aacae3eacd17ae898e80a53c.jpg\" width=\"1134\" height=\"539\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/1ad\/354\/c7a\/1ad354c7aacae3eacd17ae898e80a53c.jpg\" data-blurred=\"true\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041a\u043e\u0440\u043f\u0443\u0441\u0430 \u043a\u0430\u043a \u0442\u0430\u043a\u043e\u0432\u043e\u0433\u043e \u043d\u0435 \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u0435\u0442\u0441\u044f, \u043f\u043b\u0430\u0442\u0430 \u0431\u0443\u0434\u0435\u0442 \u0441\u0442\u043e\u044f\u0442\u044c \u043d\u0430 \u043d\u043e\u0436\u043a\u0435 \u0438\u0437 \u043c\u0435\u0442\u0430\u043b\u043b\u0430:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/ba5\/4f7\/977\/ba54f79777a40c3ebd1a394242505299.jpg\" width=\"1920\" height=\"1080\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ba5\/4f7\/977\/ba54f79777a40c3ebd1a394242505299.jpg\" data-blurred=\"true\"\/><figcaption><\/figcaption><\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/5a9\/bec\/cbf\/5a9beccbf9a95d63027e43f0a28abe2f.jpg\" width=\"1920\" height=\"1080\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/5a9\/bec\/cbf\/5a9beccbf9a95d63027e43f0a28abe2f.jpg\" data-blurred=\"true\"\/><figcaption><\/figcaption><\/figure>\n<figure class=\"float full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/269\/407\/d0c\/269407d0c70079b5444c907f9b70879f.png\" width=\"682\" height=\"769\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/269\/407\/d0c\/269407d0c70079b5444c907f9b70879f.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041d\u043e\u0436\u043a\u0430 \u0432\u044b\u0440\u0435\u0437\u0430\u043d\u0430 \u043d\u0430 \u043b\u0430\u0437\u0435\u0440\u0435 \u0438\u0437 \u043d\u0435\u0440\u0436\u0430\u0432\u0435\u044e\u0449\u0435\u0439 \u0441\u0442\u0430\u043b\u0438 \u0442\u043e\u043b\u0449\u0438\u043d\u043e\u0439 1\u043c\u043c. \u041c\u0435\u0442\u0430\u043b \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0442\u043e\u043d\u043a\u0438\u0439 \u0438 \u043d\u0438\u0436\u043d\u044f\u044f \u0447\u0430\u0441\u0442\u044c \u0441\u0433\u0438\u0431\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043b\u043e\u0441\u043a\u043e\u0433\u0443\u0431\u0446\u0430\u043c\u0438. \u0427\u0435\u0440\u0442\u0435\u0436 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 DXF \u0431\u0443\u0434\u0435\u0442 \u0432 \u0444\u0430\u0439\u043b\u0430\u0445.<br \/>\u041d\u0430 \u043d\u0438\u0436\u043d\u0438\u0435 \u0433\u0440\u0430\u043d\u0438 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e \u043d\u0430\u043a\u043b\u0435\u0438\u0442\u044c \u0440\u0435\u0437\u0438\u043d\u0443 \u0438\u043b\u0438 \u0432\u0441\u043f\u0435\u043d\u0435\u043d\u043d\u044b\u0439 \u0443\u043f\u043b\u043e\u0442\u043d\u0438\u0442\u0435\u043b\u044c \u043d\u0430 \u0441\u0430\u043c\u043e\u043a\u043b\u0435\u044f\u0449\u0435\u0439\u0441\u044f \u043e\u0441\u043d\u043e\u0432\u0435.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/dcd\/616\/c67\/dcd616c6784615b44ae3c5538a1f622e.jpeg\" alt=\"\u0412\u0438\u0434 \u0441\u0437\u0430\u0434\u0438\" title=\"\u0412\u0438\u0434 \u0441\u0437\u0430\u0434\u0438\" width=\"1280\" height=\"960\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/dcd\/616\/c67\/dcd616c6784615b44ae3c5538a1f622e.jpeg\" data-blurred=\"true\"\/><figcaption>\u0412\u0438\u0434 \u0441\u0437\u0430\u0434\u0438<\/figcaption><\/figure>\n<p>\u041d\u0430\u0432\u0435\u0441\u043d\u044b\u0435 \u0441\u043e\u043f\u043b\u0438 \u043d\u0430\u00a0\u0444\u043e\u0442\u043e \u0432\u044b\u0448\u0435 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442 \u043d\u0430\u00a0\u043c\u043e\u044e \u0437\u0430\u0431\u044b\u0432\u0447\u0438\u0432\u043e\u0441\u0442\u044c. \u041f\u0435\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u0440\u0430\u0437\u0432\u0435\u043b \u043f\u043b\u0430\u0442\u0443 \u043f\u043e\u0434\u00a0CH340C, \u0438 \u0443\u0436\u0435 \u043f\u0440\u0438\u00a0\u0441\u0431\u043e\u0440\u043a\u0435 \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0447\u0442\u043e\u00a0\u043e\u043d\u0438 \u0443\u00a0\u043c\u0435\u043d\u044f \u043a\u043e\u043d\u0447\u0438\u043b\u0438\u0441\u044c, \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0441\u0442\u0430\u0432\u0438\u0442\u044c CH340G \u0438 \u043d\u0430\u0432\u0435\u0448\u0438\u0432\u0430\u0442\u044c \u043a\u0432\u0430\u0440\u0446. \u041a\u0443\u0434\u0430 \u0434\u0435\u043b\u0430\u0441\u044c \u043a\u0440\u044b\u0448\u043a\u0430 ESP32\u00a0\u0434\u0430\u0436\u0435 \u043d\u0435\u00a0\u0441\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0439\u0442\u0435:)<\/p>\n<h2>\u0424\u0430\u0439\u043b\u044b<\/h2>\n<p>\u0424\u0430\u0439\u043b\u044b \u043f\u0435\u0447\u0430\u0442\u043d\u043e\u0439 \u043f\u043b\u0430\u0442\u044b \u0438 \u0441\u0445\u0435\u043c\u044b \u0432 DipTrace + \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a \u0432 Arduino IDE:<\/p>\n<p><a href=\"https:\/\/github.com\/ENGIN33RRR\/HabraTab\" rel=\"noopener noreferrer nofollow\">https:\/\/github.com\/ENGIN33RRR\/HabraTab<\/a><\/p>\n<h2>\u0412\u043e\u043f\u0440\u043e\u0441 \u043a \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044f\u043c<\/h2>\n<p>\u041f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u043f\u0440\u043e\u0439\u0442\u0438 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043e\u043f\u0440\u043e\u0441, \u0434\u0430\u00a0\u0438 \u0432\u0430\u0448\u0435 \u043c\u043d\u0435\u043d\u0438\u0435 \u0432\u00a0\u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445 \u0431\u0443\u0434\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e.<\/p>\n<p>\u041d\u0443\u0436\u0435\u043d\u00a0\u043b\u0438 \u0442\u0430\u043a\u043e\u0439 \u0434\u0435\u0432\u0430\u0439\u0441 \u0445\u0430\u0431\u0440\u043e\u0432\u0447\u0430\u043d\u0430\u043c? \u041a\u0430\u043a\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c\u00a0\u0431\u044b \u0443\u0432\u0438\u0434\u0435\u0442\u044c? \u041c\u043e\u0436\u0435\u0442 \u043a\u0430\u043a\u0438\u0435 \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044f, \u0438\u043b\u0438\u00a0\u0434\u0430\u043d\u043d\u044b\u0435 \u0441\u00a0\u0441\u0430\u0439\u0442\u0430 \u0434\u043b\u044f\u00a0\u0447\u0438\u0442\u0430\u0442\u0435\u043b\u0435\u0439, \u043d\u043e\u00a0\u043d\u0435\u00a0\u043f\u0438\u0441\u0430\u0442\u0435\u043b\u0435\u0439? \u0412\u00a0\u043e\u0431\u0449\u0435\u043c \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0439\u0442\u0435, \u0430\u00a0\u044f \u0431\u0443\u0434\u0443 \u043f\u0438\u043b\u0438\u0442\u044c \u0441\u043e\u0444\u0442 \u0438 \u0432\u044b\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0442\u044c. \u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u043b\u043e\u0441\u044c \u043d\u0430\u00a0\u0441\u0442\u043e\u043b\u0435 \u0432\u043e\u0437\u043b\u0435 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0430 \u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043e \u043a\u00a0\u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0443, \u0442\u0430\u043a \u0447\u0442\u043e\u00a0\u0437\u0430\u043b\u0438\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u043a\u043e\u0434 \u0434\u0435\u043b\u043e \u043e\u0434\u043d\u043e\u0439 \u043c\u0438\u043d\u0443\u0442\u044b.<\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u0431\u0443\u0434\u0443 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0447\u0430\u0441\u0442\u043e \u043f\u043e\u0433\u043b\u044f\u0434\u044b\u0432\u0430\u0442\u044c \u043d\u0430\u00a0\u0442\u0430\u0431\u043b\u043e, \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0437\u0430\u0432\u0438\u0441\u044f\u0442 \u043e\u0442\u00a0\u0432\u0430\u0448\u0438\u0445 \u043f\u043b\u044e\u0441\u043e\u0432 \ud83d\ude09<\/p>\n<\/p>\n<\/div>\n<\/div>\n<\/div>\n<p> <!----> <!----><\/div>\n<p> <!----> <\/p>\n<div class=\"tm-article-poll\">\n<div class=\"tm-notice tm-article-poll__notice tm-notice_positive\"><!----> <\/p>\n<div class=\"tm-notice__inner\"><!----> <\/p>\n<div class=\"tm-notice__content\"><span>\u0422\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u043c\u043e\u0433\u0443\u0442 \u0443\u0447\u0430\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0432 \u043e\u043f\u0440\u043e\u0441\u0435. <a rel=\"nofollow\" href=\"\/kek\/v1\/auth\/habrahabr\/?back=\/ru\/post\/712114\/&#038;hl=ru\">\u0412\u043e\u0439\u0434\u0438\u0442\u0435<\/a>, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430.<\/span><\/div>\n<\/div>\n<\/div>\n<div class=\"tm-article-poll__header\">\u0418\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b\u2026<\/div>\n<div class=\"tm-article-poll__answers\">\n<div class=\"tm-article-poll__answer\">\n<div class=\"tm-article-poll__answer-data\"><span class=\"tm-article-poll__answer-percent\">             22.22%           <\/span> <span class=\"tm-article-poll__answer-label\">\u0412\u044b\u0442\u0440\u0430\u0432\u0438\u0442\u044c \u043f\u043b\u0430\u0442\u0443 \u0438 \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0434\u0435\u0432\u0430\u0439\u0441 \u0441\u0430\u043c\u043e\u043c\u0443<\/span> <span class=\"tm-article-poll__answer-votes\">             10           <\/span><\/div>\n<div class=\"tm-article-poll__answer-bar\">\n<div class=\"tm-article-poll__answer-progress\" style=\"width:22.22%;\"><\/div>\n<\/div>\n<\/div>\n<div class=\"tm-article-poll__answer\">\n<div class=\"tm-article-poll__answer-data\"><span class=\"tm-article-poll__answer-percent tm-article-poll__answer-percent_winning\">             44.44%           <\/span> <span class=\"tm-article-poll__answer-label\">\u0421\u043e\u0431\u0440\u0430\u0442\u044c \u043d\u0430 \u0433\u043e\u0442\u043e\u0432\u044b\u0445 \u043c\u043e\u0434\u0443\u043b\u044f\u0445<\/span> <span class=\"tm-article-poll__answer-votes\">             20           <\/span><\/div>\n<div class=\"tm-article-poll__answer-bar\">\n<div class=\"tm-article-poll__answer-progress tm-article-poll__answer-progress_winning\" style=\"width:44.44%;\"><\/div>\n<\/div>\n<\/div>\n<div class=\"tm-article-poll__answer\">\n<div class=\"tm-article-poll__answer-data\"><span class=\"tm-article-poll__answer-percent\">             42.22%           <\/span> <span class=\"tm-article-poll__answer-label\">\u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0431\u043e\u0440 \u0434\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438<\/span> <span class=\"tm-article-poll__answer-votes\">             19           <\/span><\/div>\n<div class=\"tm-article-poll__answer-bar\">\n<div class=\"tm-article-poll__answer-progress\" style=\"width:42.22%;\"><\/div>\n<\/div>\n<\/div>\n<div class=\"tm-article-poll__answer\">\n<div class=\"tm-article-poll__answer-data\"><span class=\"tm-article-poll__answer-percent\">             26.67%           <\/span> <span class=\"tm-article-poll__answer-label\">\u041a\u0443\u043f\u0438\u0442\u044c \u0433\u043e\u0442\u043e\u0432\u044b\u0439 \u0434\u0435\u0432\u0430\u0439\u0441<\/span> <span class=\"tm-article-poll__answer-votes\">             12           <\/span><\/div>\n<div class=\"tm-article-poll__answer-bar\">\n<div class=\"tm-article-poll__answer-progress\" style=\"width:26.67%;\"><\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"tm-article-poll__stats\">        \u041f\u0440\u043e\u0433\u043e\u043b\u043e\u0441\u043e\u0432\u0430\u043b\u0438 45 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439.          \u0412\u043e\u0437\u0434\u0435\u0440\u0436\u0430\u043b\u0438\u0441\u044c 15 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439.      <\/div>\n<\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/post\/712114\/\"> https:\/\/habr.com\/ru\/post\/712114\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0427\u0442\u043e-\u0442\u043e \u0447\u0430\u0441\u0442\u043e \u0441\u0442\u0430\u043b \u0437\u0430\u0433\u043b\u044f\u0434\u044b\u0432\u0430\u0442\u044c \u0432 \u043f\u0440\u043e\u0444\u0438\u043b\u044c \u043f\u043e\u0441\u043b\u0435 \u043a\u0430\u0436\u0434\u043e\u0439 \u043d\u043e\u0432\u043e\u0439 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438. \u0422\u0430\u043a \u0432\u043e\u0442 \u044f \u0438 \u0440\u0435\u0448\u0438\u043b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0442\u0430\u0431\u043b\u043e, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0441\u0442\u043e\u044f\u043b\u043e \u0431\u044b \u043d\u0430 \u0441\u0442\u043e\u043b\u0435, \u0438 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u043b\u043e \u043c\u0435\u0441\u0442\u043e \u0432 \u0440\u0435\u0439\u0442\u0438\u043d\u0433\u0435, \u043a\u0430\u0440\u043c\u0443, \u043d\u0443 \u0438 \u0441\u0430\u043c\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043e\u0447\u043a\u043e\u0432 \u0440\u0435\u0439\u0442\u0438\u043d\u0433\u0430. <\/p>\n<p>\u0414\u043b\u044f \u0436\u0435\u043b\u0430\u044e\u0449\u0438\u0445 \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u044c \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0441\u0431\u043e\u0440\u043a\u0438 \u0438\u0437 \u043c\u043e\u0434\u0443\u043b\u0435\u0439, \u0442\u0430\u043a \u0438 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u0436\u0435\u043b\u0435\u0437\u043a\u0430. \u041d\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0432 \u043e\u0431\u0449\u0435\u043c \u043e\u0447\u0435\u043d\u044c \u0434\u0430\u0436\u0435 \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u043e\u0435, \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0435 \u0441 Arduino IDE, \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0432\u043e\u0442\u043a\u043d\u0443\u0442\u044c USB \u0438 \u043c\u043e\u0436\u043d\u043e \u0448\u0438\u0442\u044c. \u041f\u043e\u0440\u043e\u0433 \u0432\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439. \u0410 \u043f\u043e\u0447\u0435\u043c\u0443 \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u043e\u0435- \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435\u043c \u043a\u043e\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u043f\u0430\u0440\u0441\u0438\u0442\u044c \u0447\u0442\u043e \u0443\u0433\u043e\u0434\u043d\u043e \u0441 \u043b\u044e\u0431\u043e\u0433\u043e \u0441\u0430\u0439\u0442\u0430.<\/p>\n<p>\u0420\u0430\u0437 \u0443\u0436 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u043e \u0432\u0441\u0435\u0433\u0434\u0430 \u0438 \u0441\u0442\u043e\u044f\u0442\u044c \u043d\u0430 \u0441\u0442\u043e\u043b\u0435- \u043e\u043d\u043e \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0435\u0449\u0435 \u0438 \u0432\u0440\u0435\u043c\u044f, \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0443 \u0438 \u0432\u043b\u0430\u0436\u043d\u043e\u0441\u0442\u044c \u0432\u043e\u0437\u0434\u0443\u0445\u0430.<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<h3>API \u0445\u0430\u0431\u0440\u0430<\/h3>\n<h3>&#8230; \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043d\u0435\u0442 \ud83d\ude41<\/h3>\n<p>\u0422\u0443\u0442 \u044f \u0437\u0430\u0434\u0443\u043c\u0430\u043b\u0441\u044f \u043a\u0430\u043a\u00a0\u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435. \u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0441\u043a\u0430\u0437\u0430\u043b\u0430 \u0447\u0442\u043e\u00a0\u0410\u041f\u0418 \u0437\u0430\u0434\u0430\u0447\u0430 \u043d\u0435\u00a0\u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u043d\u0430\u044f, \u043d\u043e\u00a0\u0433\u0434\u0435\u2011\u0442\u043e \u0432\u00a0\u043f\u043b\u0430\u043d\u0430\u0445 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442. \u0417\u043d\u0430\u0447\u0438\u0442 \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u043f\u0430\u0440\u0441\u0438\u0442\u044c \u043f\u043e\u00a0\u044f\u043a\u043e\u0440\u044f\u043c. \u0422\u043e\u2011\u0435\u0441\u0442\u044c \u0438\u0449\u0435\u043c \u043a\u0443\u0441\u043e\u043a \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u0434 \u043d\u0443\u0436\u043d\u044b\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c, \u0438 \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u0443\u044f\u0441\u044c \u043f\u043e\u00a0\u043d\u0435\u043c\u0443 \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u0435\u043c \u043d\u0443\u0436\u043d\u044b\u0435.<\/p>\n<h2>\u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043a\u043e\u0434<\/h2>\n<p>\u0412\u0435\u0441\u044c \u043a\u043e\u0434 \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u0432\u00a0\u0441\u0440\u0435\u0434\u0435 ArduinoIDE. \u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f, \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u2011 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439. \u0413\u043e\u043b\u044b\u0439 \u043a\u043e\u0434 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u043f\u0440\u043e\u0444\u0438\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0432\u0435\u0441\u0438\u0442 \u043e\u043a\u043e\u043b\u043e 120\u043a\u0411. \u0425\u0440\u0430\u043d\u0438\u0442\u044c \u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0437\u0432\u0435 \u0447\u0442\u043e\u00a0\u0432\u00a0\u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435, \u043d\u043e\u00a0\u043e\u0441\u043e\u0431\u043e\u0433\u043e \u0441\u043c\u044b\u0441\u043b\u0430 \u043d\u0435\u0442. \u0414\u043b\u044f\u00a0\u043a\u043b\u0430\u0441\u0441\u0430 Stream \u0432\u00a0Arduino IDE \u0435\u0441\u0442\u044c \u043e\u0442\u043b\u0438\u0447\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f find(), \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043c\u044b \u0438 \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f.<\/p>\n<details class=\"spoiler\">\n<summary>\u041a\u043e\u0434 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430 \u0441 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u043c\u0438<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\"> if ((WiFi.status() == WL_CONNECTED)) {  \/\/\u0415\u0441\u043b\u0438 \u0435\u0441\u0442\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a Wifi     http.begin(client, SURL + USER + \"\/\");  \/\/\u041e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c HTTP \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 delay(10);     int httpCode = http.GET(); \/\/\u041f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u043c GET \u0437\u0430\u043f\u0440\u043e\u0441     delay(10); Serial.print(\"httpCode\");     Serial.println(httpCode);     if (httpCode==200) {   \/\/\u0415\u0441\u043b\u0438 \u043e\u0442\u0432\u0435\u0442 200          WiFiClient* stream = http.getStreamPtr();  \/\/\u041f\u0440\u0435\u0431\u0440\u0430\u0437\u0443\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u043f\u043e\u0442\u043e\u043a Stream          if (stream->available()) { \/\/\u0415\u0441\u043b\u0438 \u043f\u043e\u0442\u043e\u043a \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d            \/\/----------------\u043a\u0430\u0440\u043c\u0430           stream->find(R\"rawliteral(karma__votes_positive\">)rawliteral\");   \/\/\u0418\u0449\u0435\u043c \u044f\u043a\u043e\u0440\u044c           for (int i = 0; i &lt; 5; i++) {       \/\/\u041e\u0442\u0441\u0442\u0443\u043f \u043e\u0442 \u044f\u043a\u043e\u0440\u044f             stream->read();           }            for (byte i = 0; i &lt; 5; i++) {     \/\/\u0427\u0438\u0442\u0430\u0435\u043c \u043d\u0443\u0436\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432             KARMA[i] = stream->read();           }            \/\/----------------\u0440\u0435\u0439\u0442\u0438\u043d\u0433            stream->find(R\"rawliteral(tm-rating__counter\">)rawliteral\");            for (byte i = 0; i &lt; 7; i++) {             RATING[i] = stream->read();           }            \/\/----------------\u043f\u043e\u0437\u0438\u0446\u0438\u044f            stream->find(\"\u0412 \u0440\u0435\u0439\u0442\u0438\u043d\u0433\u0435\");           for (int i = 0; i &lt; 118; i++) {             stream->read();           }            for (byte i = 0; i &lt; 4; i++) {             RatingPos[i] = stream->read();           }             Serial.println(KARMA);           Serial.println(RATING);           Serial.println(RatingPos);           Serial.println(\"END\");         }         delay(10);           Serial.println();         Serial.print(\"[HTTP] connection closed or file end.\\n\");            } else {       Serial.printf(\"[HTTP] GET... failed, error: %s\\n\", http.errorToString(httpCode).c_str());     }      http.end();     delay(10);   }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0438<\/p>\n<details class=\"spoiler\">\n<summary>\u0412\u0435\u0441\u044c \u043a\u043e\u0434<\/summary>\n<div class=\"spoiler__content\">\n<details class=\"spoiler\">\n<summary>\u0413\u043b\u0430\u0432\u043d\u044b\u0439<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">    String USER = \"ENGIN33RRR\";  \/\/\u0418\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f const char ssid[] = \"Eng\";   \/\/SSID const char password[] = \"123456789h\";  \/\/\u041f\u0430\u0440\u043e\u043b\u044c \u043e\u0442 WiFi  const char* ntpServer1 = \"pool.ntp.org\";  \/\/\u041f\u0435\u0440\u0432\u044b\u0439 \u0441\u0435\u0440\u0432\u0435\u0440 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 const char* ntpServer2 = \"time.nist.gov\"; \/\/\u0412\u0442\u043e\u0440\u043e\u0439 \u0441\u0435\u0440\u0432\u0435\u0440 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 const long gmtOffset_sec = 21600;         \/\/\u0427\u0430\u0441\u043e\u0432\u043e\u0439 \u043f\u043e\u044f\u0441 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0430\u0445   String SURL = \"https:\/\/habr.com\/ru\/users\/\"; \/\/\u041d\u0430\u0447\u0430\u043b\u043e \u0430\u0434\u0440\u0435\u0441\u0430 \u0434\u043e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f     \/\/L\u041e\u0431\u044a\u044f\u0432\u043b\u044f\u0435\u043c \u0414\u0438\u0441\u043f\u043b\u0435\u0439 #include &lt;GxEPD2_BW.h> #define USE_VSPI_FOR_EPD #define GxEPD2_DISPLAY_CLASS GxEPD2_BW #define MAX_DISPLAY_BUFFER_SIZE 65536ul        #define GxEPD2_DRIVER_CLASS GxEPD2_290_T94_V2   #define MAX_HEIGHT(EPD) (EPD::HEIGHT &lt;= MAX_DISPLAY_BUFFER_SIZE \/ (EPD::WIDTH \/ 8) ? EPD::HEIGHT : MAX_DISPLAY_BUFFER_SIZE \/ (EPD::WIDTH \/ 8)) GxEPD2_DISPLAY_CLASS&lt;GxEPD2_DRIVER_CLASS, MAX_HEIGHT(GxEPD2_DRIVER_CLASS)> display(GxEPD2_DRIVER_CLASS(\/*CS=*\/5, \/*DC=*\/17, \/*RST=*\/16, \/*BUSY=*\/4));     \/\/\u0428\u0440\u0438\u0444\u0442\u044b #include &lt;Fonts\/FreeMonoBold9pt7b.h> #include &lt;Fonts\/FreeMonoBold12pt7b.h> #include &lt;Fonts\/FreeMonoBold18pt7b.h> #include &lt;Fonts\/FreeMonoBold24pt7b.h> #include &lt;Fonts\/FreeSerifBoldItalic18pt7b.h>               \/\/\u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 Wifi, HTTP \u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 #include &lt;WiFi.h> #include &lt;WiFiClient.h> #include &lt;WiFiClientSecure.h> WiFiClientSecure client;  #include &lt;HTTPClient.h> HTTPClient http;   #include \"time.h\" #include \"sntp.h\"      \/\/\u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0434\u043b\u044f \u0434\u0430\u0442\u0447\u0438\u043a\u0430 \u0442\u0435\u043c\u043f\u0440\u0435\u0430\u0442\u0443\u0440\u044b\/\u0432\u043b\u0430\u0436\u043d\u043e\u0441\u0442\u0438 #include &lt;Adafruit_Sensor.h> #include &lt;DHT.h>  #define DHTPIN 27      #define DHTTYPE DHT22   DHT dht(DHTPIN, DHTTYPE);      \/\/\u041f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u0444\u0438\u043a\u0441\u0430\u0446\u0438\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 String KARMA = \"000\"; String RATING = \"000.0\"; String RatingPos = \"999\";  String KARMA1; String RATING1; String RatingPos1;  float Temp; float Hum;  float HumR; float TempR;   char TimeDisp[9];  byte count; bool flag;  long ms; long ms1; bool blink; bool noWiFi; byte WS;   void setup() {    xTaskCreatePinnedToCore(     Graph,   \/\/\u0424\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u043e\u0442\u043e\u043a\u0430     \"Task2\", \/\/\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u0442\u043e\u043a\u0430     16000,   \/\/\u0421\u0442\u0435\u043a \u043f\u043e\u0442\u043e\u043a\u0430     NULL,    \/\/\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043f\u043e\u0442\u043e\u043a\u0430     1,       \/\/\u041f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442 \u043f\u043e\u0442\u043e\u043a\u0430     NULL,  \/\/\u0418\u0434\u0435\u043d\u0442\u0438\u0444\u043a\u0430\u0442\u043e\u0440 \u043f\u043e\u0442\u043e\u043a\u0430     0);      \/\/\u042f\u0434\u0440\u043e \u0434\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043f\u043e\u0442\u043e\u043a\u0430     delay(500);    xTaskCreatePinnedToCore(     FileUpdate, \/\/\u0424\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u043e\u0442\u043e\u043a\u0430     \"Task1\",    \/\/\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u0442\u043e\u043a\u0430     10000,      \/\/\u0421\u0442\u0435\u043a \u043f\u043e\u0442\u043e\u043a\u0430     NULL,       \/\/\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043f\u043e\u0442\u043e\u043a\u0430     2,          \/\/\u041f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442 \u043f\u043e\u0442\u043e\u043a\u0430     NULL,     \/\/\u0418\u0434\u0435\u043d\u0442\u0438\u0444\u043a\u0430\u0442\u043e\u0440 \u043f\u043e\u0442\u043e\u043a\u0430     1);         \/\/\u042f\u0434\u0440\u043e \u0434\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043f\u043e\u0442\u043e\u043a\u0430    delay(500); }     void FileUpdate(void* pvParameters) {  Serial.begin(115200);             \/\/\u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f UART   \/\/http.setReuse(true);               http.setTimeout(3000);  http.setReuse(true);   Connect();  \/\/\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c\u0441\u044f \u043a WiFi    client.setInsecure(); \/\/\u0418\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u043c \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u044b HTTPS    for (;;) \/\/\u0426\u0438\u043a\u043b \u043f\u043e\u0442\u043e\u043a\u0430   {      if (WiFi.status() == WL_CONNECTED) {  \/\/\u0415\u0441\u043b\u0438 \u0435\u0441\u0442\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435        if (WiFi.RSSI() > -60) {    \/\/\u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u043c \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0434\u043b\u044f \u0437\u043d\u0430\u0447\u043a\u0430         WS = 2;       } else if (WiFi.RSSI() > -70) {         WS = 1;       } else {         WS = 0;       }       noWiFi = 0;             findVAR();  \/\/\u0424\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439     } else {       Reconnect();   \/\/\u041f\u0435\u0440\u0435\u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c Wifi       noWiFi = 1;          }        if (!KARMA1.equals(KARMA) || !RATING1.equals(RATING) || !RatingPos1.equals(RatingPos)) {  \/\/\u0414\u0435\u0442\u0435\u043a\u0442\u0438\u0440\u0443\u0435\u043c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445       KARMA1 = KARMA;       RATING1 = RATING;       RatingPos1 = RatingPos;       flag = 1;             \/\/\u0418 \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u0435\u043c \u0444\u043b\u0430\u0433     }      vTaskDelay(20000);    \/\/\u041f\u0430\u0443\u0437\u0430 20 \u0441\u0435\u043a\u0443\u043d\u0434   } }    void Graph(void* pvParameters) {     \/\/\u041f\u043e\u0442\u043e\u043a \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438 \u043d\u0430 \u0434\u0438\u0441\u043f\u043b\u0435\u0439    configTime(gmtOffset_sec, 0, ntpServer1, ntpServer2); \/\/\u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u0441\u043b\u0443\u0436\u0431\u0443 \u0432\u0440\u0435\u043c\u0435\u043d\u0438   dht.begin();       \/\/\u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u0434\u0430\u0442\u0447\u0438\u043a \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u044b   display.init();    \/\/\u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u0434\u0438\u0441\u043f\u043b\u0435\u0439   display.setRotation(3);    display.clearScreen(); \/\/\u041e\u0447\u0438\u0441\u0442\u043a\u0430 \u044d\u043a\u0440\u0430\u043d\u0430   display.setTextColor(GxEPD_BLACK);   display.fillScreen(GxEPD_WHITE);   Static(); \/\/ \u041e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0430 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f   display.display(false);  \/\/\u041f\u043e\u043b\u043d\u044b\u0439 \u0432\u044b\u0432\u043e\u0434 \u043d\u0430 \u0434\u0438\u0441\u043f\u043b\u0435\u0439     for (;;) {   \/\/\u0426\u0438\u043a\u043b \u043f\u043e\u0442\u043e\u043a\u0430 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438 \u043d\u0430 \u0434\u0438\u0441\u043f\u043b\u0435\u0439      updLocalTime(); \/\/\u041e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u043c \u0432\u0440\u0435\u043c\u044f \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439      if (millis() > ms + 1000) {  \/\/\u041e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u043c \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u0434\u0430\u0442\u0447\u0438\u043a\u0430 \u0440\u0430\u0437 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443         ms = millis();       HumR = dht.readHumidity();       TempR = dht.readTemperature();     }      if (!isnan(HumR) || !isnan(TempR)) { \/\/\u0415\u0441\u043b\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043d\u0435 NAN, \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u043c \u0432 \u043f\u0435\u0440\u043c\u0435\u043d\u043d\u044b\u0435       Hum = HumR;       Temp = TempR;     }  if (millis() > ms1 + 1000) {  \/\/\u041c\u043e\u0440\u0433\u0430\u043b\u043a\u0430 \u0434\u043b\u044f \u043f\u043e\u0442\u0435\u0440\u0438 WiFi   ms1=millis();       blink = !blink;     }        Dynamic(); \/\/ \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438 \u043c\u0435\u043d\u044f\u044e\u0449\u0438\u0445\u0441\u044f \u0434\u0430\u043d\u043d\u044b\u0445        } }       void loop() { \/\/\u041d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u0420\u0430\u0431\u043e\u0442\u0430 \u0441 WiFi<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">    void Connect(void) {    WiFi.mode(WIFI_STA);  delay(10);   WiFi.begin(ssid, password); delay(10);   while (WiFi.status() != WL_CONNECTED &amp;&amp; count &lt; 15) {     count++;     delay(500);   }    delay(10);  }   void Reconnect(void) {  KARMA = \"000\"; RATING = \"000.0\"; RatingPos = \"999\";    WiFi.disconnect();   vTaskDelay(1000);   WiFi.begin(ssid, password);   count = 0;   while (WiFi.status() != WL_CONNECTED &amp;&amp; count &lt; 15 ) {     count++;     delay(500);       }     } <\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u0413\u0440\u0430\u0444\u0438\u043a\u0430<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\"> void Static() {    display.setFont(&amp;FreeMonoBold12pt7b);   display.fillRect(0, 0, 296, 20, GxEPD_BLACK);   display.setTextColor(GxEPD_WHITE);   display.setCursor(10, 16);   display.print(\"HabraTab\");  display.fillRect(10, 80, 276, 2, GxEPD_BLACK); display.fillRect(15, 50, 73, 2, GxEPD_BLACK); display.fillRect(103, 50, 90, 2, GxEPD_BLACK); display.fillRect(208, 50, 73, 2, GxEPD_BLACK);   display.setTextColor(GxEPD_BLACK);   display.setCursor(18, 72);   display.print(\"Karma\");   display.setCursor(115, 72);   display.print(\"Score\");   display.setCursor(215, 72);  display.print(\"R No\");  display.setFont(&amp;FreeSerifBoldItalic18pt7b);  display.fillRect(15, 22, 100, 26, GxEPD_WHITE);   display.setCursor(15, 45);   display.print(KARMA.toInt());   display.fillRect(110, 22, 100, 26, GxEPD_WHITE);   display.setCursor(110, 45);   display.print(RATING.toFloat(), 1);   display.fillRect(220, 22, 85, 26, GxEPD_WHITE);   display.setCursor(220, 45);   display.print(RatingPos.toInt()); display.setFont(&amp;FreeMonoBold12pt7b);   display.setCursor(5, 100);   display.print(\"@\");   display.print(USER);   display.setTextColor(GxEPD_BLACK); display.fillRect(0, 108, 296, 20, GxEPD_BLACK);  }   void Dynamic() {    display.setFont(&amp;FreeMonoBold12pt7b);     display.fillRect(145, 0, 150, 20, GxEPD_BLACK);              if (!noWiFi || blink) {       display.fillCircle(148, 9, 3, GxEPD_WHITE);       display.fillRect(156, 6, 2, 8, GxEPD_WHITE);        if (WS == 1) {          display.fillRect(162, 4, 2, 12, GxEPD_WHITE);       }       if (WS == 2) {         display.fillRect(162, 4, 2, 12, GxEPD_WHITE);         display.fillRect(168, 2, 2, 16, GxEPD_WHITE);       }     }     display.setTextColor(GxEPD_WHITE);     display.setCursor(175, 16);     display.print(TimeDisp);     vTaskDelay(1);       if (flag) {        display.setFont(&amp;FreeSerifBoldItalic18pt7b);       display.setTextColor(GxEPD_BLACK); <\/code><\/pre>\n<\/div>\n<\/details>\n<\/div>\n<\/details>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-344897","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/344897","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=344897"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/344897\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=344897"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=344897"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=344897"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}