Добрый день мудрецы. Если есть время, можете уделить внимание, как блок схему составить? Не силен. с циклами понятно. А прямоугольники куда.. Может этот код вообще не идеален, что скорее всего, я собрал его из готовых скетчей в интернете. Код (C++): // библиотеки #include <WiFi.h> #include <Wire.h> #include <Adafruit_Sensor.h> #include <Adafruit_BME280.h> #include <ESP32Servo.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 32 #define SEALEVELPRESSURE_HPA (1013.25) Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1); Adafruit_BME280 bme; //сервопривод Servo myservo; int pos = 0; const char* ssid = "ИМЯ"; const char* password = "ПАРОЛЬ"; WiFiServer server(80); String header; void setup() { Serial.begin(115200); myservo.attach(13); myservo.write(pos); //дисплей if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { Serial.println(F("SSD1306 allocation failed")); for(;;); } //датчик bool status = bme.begin(0x76); if (!status) { Serial.println("Could not find a valid BME280 sensor, check wiring!"); while (1); } delay(2000); display.clearDisplay(); display.setTextColor(WHITE); delay(500); //подключение к вифи Serial.print("Connecting to "); Serial.println(ssid); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } // Выдача ИП для подключения к веб.серверу Serial.println(""); Serial.println("WiFi connected."); Serial.println("IP address: "); Serial.println(WiFi.localIP()); server.begin(); delay(1000); } void loop() { WiFiClient client = server.available(); // Listen for incoming clients delay(100); //вывод данных на дисплей Display(); delay(100); //Условие для сервопривода if ( bme.readTemperature() >30 || bme.readHumidity() > 80) { Display(); delay(100); myservo.write(180); delay(100); }else { Display(); delay(100); myservo.write(pos); } //связанное с подключением пользователя к веб серверу if (client) { Serial.println("New Client."); String currentLine = ""; while (client.connected()) { if (client.available()) { char c = client.read(); Serial.write(c); header += c; if (c == '\n') { if (currentLine.length() == 0) { //хер знает что такое client.println("HTTP/1.1 200 OK"); client.println("Content-type:text/html"); client.println("Connection: close"); client.println(); //Создание страницы client.println("<!DOCTYPE html><html>"); client.println("<html lang='ru-RU'> <head> <meta charset='UTF-8'/> <meta http-equiv=\"refresh\" content=\"5\"> <meta name=\"viewport\" content=\"width=device-width, initial-scale=1/" ">"); client.println( "<meta http-equiv=\"refresh\" content=\"2\">"); client.println("<link rel=\"icon\" href=\"data:,\">"); // CSS client.println("<style>body { text-align: center; font-family: \"Trebuchet MS\", Arial;}"); client.println("table { border-collapse: collapse; width:35%; margin-left:auto; margin-right:auto; }"); client.println("th { padding: 12px; background-color: #18adc4; color: white; }"); client.println("tr { border: 1px solid #ddd; padding: 12px; }"); client.println("tr:hover { background-color: #bcbcbc; }"); client.println("td { border: none; padding: 12px; }"); client.println(".sensor { color:white; font-weight: bold; background-color: #a9b0ae; padding: 1px; }"); // Таблица с данными client.println("</style></head><body><h1>Метеостанция</h1>"); client.println("<table><tr><th>Измерения</th><th>Значения</th></tr>"); client.println("<tr><td>Температура *C</td><td><span class=\"sensor\">"); client.println(bme.readTemperature()); client.println(" *C</span></td></tr>"); client.println("<tr><td>Температура *F</td><td><span class=\"sensor\">"); client.println(1.8 * bme.readTemperature() + 32); client.println(" *F</span></td></tr>"); client.println("<tr><td>Давление</td><td><span class=\"sensor\">"); client.println(bme.readAltitude(SEALEVELPRESSURE_HPA)); client.println(" m</span></td></tr>"); client.println("<tr><td>Влажность</td><td><span class=\"sensor\">"); client.println(bme.readHumidity()); client.println(" %</span></td></tr>"); client.println("</body></html>"); client.println(); // Выход из цикла break; delay(100); //дисплей опять Display(); delay(100); } else { currentLine = ""; } } else if (c != '\r') { currentLine += c; } } } header = ""; //Закрытие соединения client.stop(); Serial.println("Client disconnected."); Serial.println(""); } delay(100); //опять вывод на дисплей Display(); delay(100); } void Display(){ display.clearDisplay(); display.setTextSize(0.5); display.setCursor(0,0); display.print("Temp: "); display.setTextSize(1); display.setCursor(0,10); display.print(String(bme.readTemperature())); display.print(" "); display.setTextSize(0.5); display.cp437(true); display.write(167); display.setTextSize(1); display.print("C"); display.setTextSize(0.5); display.setCursor(64, 0); display.print("Hum: "); display.setTextSize(1); display.setCursor(64, 10); display.print(String(bme.readHumidity())); display.print(" %"); display.setTextSize(0.5); display.setCursor(0,25); display.print("IP"); display.setTextSize(1); display.setCursor(15,25); display.print(WiFi.localIP()); display.display(); delay(1000); }
Както странно. Вообще сначала рисуют схму а потом под нее пишут код. Не наоборот. А что делает Ваше устройство?
Поймал дежавю от вашего ответа. Ну вкратце это что-то вроде метеостанции на ESP32. Туда включен Дисплей, датчик для считывания температуры и влажности, сама esp32 подключается к роутеру или другой беспроводной точке доступа и выдает IP для подключение к веб. странице. И будут подключены исполнительные устройства. Пока на макете это 1 сервопривод. Идею взял отсюда https://diytech.ru/projects/veb-server-na-esp32-sozdanie-mini-meteostancii-na-bme280
Из считывания показаний датчика мы по какому условию вышли в бок? Пользователь загрузил страницу. Дальше что происходит? Вся правая половина алгоритма выпала из жизни?
Простите, вот я все поменял, вроде все работает, и блок схема по логиче + - правильная, наверное... Код (C++): #include <WiFi.h> #include <Wire.h> #include <Adafruit_Sensor.h> #include <Adafruit_BME280.h> #include <ESP32Servo.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 32 #define SEALEVELPRESSURE_HPA (1013.25) Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1); Adafruit_BME280 bme; Servo myservo; int pos = 0; const char* ssid = "TP-LINK_CEB8"; const char* password = "Nasid0119"; WiFiServer server(80); String header; void setup() { Serial.begin(115200); myservo.attach(13); myservo.write(pos); if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { Serial.println(F("SSD1306 allocation failed")); for(;;); } bool status = bme.begin(0x76); if (!status) { Serial.println("Could not find a valid BME280 sensor, check wiring!"); while (1); } delay(2000); display.clearDisplay(); display.setTextColor(WHITE); delay(500); Serial.print("Connecting to "); Serial.println(ssid); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("WiFi connected."); Serial.println("IP address: "); Serial.println(WiFi.localIP()); server.begin(); delay(1000); } void loop() { delay(100); Display(); delay(100); if ( bme.readTemperature() >32 || bme.readHumidity() > 80) { Display(); delay(100); myservo.write(180); delay(100); }else { Display(); delay(100); myservo.write(pos); } WiFiClient client = server.available(); if (client) { String currentLine = ""; while (client.connected()) { if (client.available()) { char c = client.read(); Serial.write(c); header += c; if (c == '\n') { if (currentLine.length() == 0) { client.println("HTTP/1.1 200 OK"); client.println("Content-type:text/html"); client.println("Connection: close"); client.println(); // Display the HTML web page client.println("<!DOCTYPE html><html>"); client.println("<html lang='ru-RU'> <head> <meta charset='UTF-8'/> <meta http-equiv=\"refresh\" content=\"1\"> <meta name=\"viewport\" content=\"width=device-width, initial-scale=1/" ">"); //client.println( "<meta http-equiv=\"refresh\" content=\"2\">"); client.println("<link rel=\"icon\" href=\"data:,\">"); // CSS to style the table client.println("<style>body { text-align: center; font-family: \"Trebuchet MS\", Arial;}"); client.println("table { border-collapse: collapse; width:35%; margin-left:auto; margin-right:auto; }"); client.println("th { padding: 12px; background-color: #18adc4; color: white; }"); client.println("tr { border: 1px solid #ddd; padding: 12px; }"); client.println("tr:hover { background-color: #bcbcbc; }"); client.println("td { border: none; padding: 12px; }"); client.println(".sensor { color:white; font-weight: bold; background-color: #a9b0ae; padding: 1px; }"); // Web Page Heading client.println("</style></head><body><h1>Метеостанция</h1>"); client.println("<table><tr><th>Измерения</th><th>Значения</th></tr>"); client.println("<tr><td>Температура *C</td><td><span class=\"sensor\">"); client.println(bme.readTemperature()); client.println(" *C</span></td></tr>"); client.println("<tr><td>Температура *F</td><td><span class=\"sensor\">"); client.println(1.8 * bme.readTemperature() + 32); client.println(" *F</span></td></tr>"); client.println("<tr><td>Давление</td><td><span class=\"sensor\">"); client.println(bme.readAltitude(SEALEVELPRESSURE_HPA)); client.println(" m</span></td></tr>"); client.println("<tr><td>Влажность</td><td><span class=\"sensor\">"); client.println(bme.readHumidity()); client.println(" %</span></td></tr>"); client.println("</body></html>"); client.println(); // Break out of the while loop break; delay(100); } else { // currentLine = ""; } } else if (c != '\r') { currentLine += c; } } } header = ""; loop(); client.stop(); Serial.println(""); } delay(100); Display(); delay(100); } void serv(){ if ( bme.readTemperature() >32 || bme.readHumidity() > 80) { Display(); delay(100); myservo.write(180); delay(100); }else { Display(); delay(100); myservo.write(pos); } } void Display(){ display.clearDisplay(); display.setTextSize(0.5); display.setCursor(0,0); display.print("Temp: "); display.setTextSize(1); display.setCursor(0,10); display.print(String(bme.readTemperature())); display.print(" "); display.setTextSize(0.5); display.cp437(true); display.write(167); display.setTextSize(1); display.print("C"); display.setTextSize(0.5); display.setCursor(64, 0); display.print("Hum: "); display.setTextSize(1); display.setCursor(64, 10); display.print(String(bme.readHumidity())); display.print(" %"); display.setTextSize(0.5); display.setCursor(0,25); display.print("IP"); display.setTextSize(1); display.setCursor(15,25); display.print(WiFi.localIP()); display.display(); delay(1000); }
а не нифига не работает, когда на веб страницу захожу все ломается. Изменил. Теперь работает, удивительно. В блок схеме не уверен только
что подсказать-то опять? У вас то "работает". то "не работает". мы даже не знаем, к чему вообще это "не работает" относится... Экстрасенсы все с ковидом лежат. в строю никого не осталось
Изначально я так и написал, чтобы он после подключения тоже проверял параметры, но он и без этого работает, что я сам понять не могу. Вроде как после подключения на страницу больше ничего проверять и не должен, но видимо из за этой строчки html "<meta http-equiv=\"refresh\" content=\"5\">" Он обновляет страницу и команда в loop проходит заново, что по сути не правильно, но работает. Либо я чего то не понимаю.