Делаю дома WiFi сервер на esp8266, в качестве отправной точки использую код
I2C. Прописываю свои ssid и password. WiFi роутер по MAC адресу выдает статический IP. Подключаюсь по нему и все работает, но! Если в Хроме открыть IPадрес в режиме инкогнито все хорошо, открывается страница и клиент отключается, тоже самое если открыть страницу с телефона. Но если открыть страничку в хроме не инкогнито, страница открывается, клиент отключается и сразу подключается новый клиент. И при этом он молчит, контроллер зависает на строке 78. Чего такого отправляет Хром, что клиент создается вновь и как это исправить?
- /*********
- Руи Сантос
- Более подробно об этом проекте на: Random Nerd Tutorials | Learn ESP32, ESP8266, Arduino, and Raspberry Pi
- *********/
- // загружаем библиотеку для WiFi и другие библиотеки:
- //#include <WiFi.h> //Это выключаем
- #include <ESP8266WiFi.h> //Это добавляем
- #include <Wire.h>
- #include <Adafruit_BME280.h>
- #include <Adafruit_Sensor.h>
- // при использовании SPI убираем комментарии у строчек ниже:
- /*#include <SPI.h>
- #define BME_SCK 18
- #define BME_MISO 19
- #define BME_MOSI 23
- #define BME_CS 5*/
- #define SEALEVELPRESSURE_HPA (1013.25)
- Adafruit_BME280 bme; // I2C
- // аппаратный SPI:
- //Adafruit_BME280 bme(BME_CS);
- // программный SPI:
- //Adafruit_BME280 bme(BME_CS, BME_MOSI, BME_MISO, BME_SCK);
- // ставим здесь учетные данные своей сети:
- const char* ssid = "";
- const char* password = "";
- // выставляем номер порта на «80»:
- WiFiServer server(80);
- // создаем переменную для хранения HTTP-запроса:
- String header;
- void setup() {
- Wire.begin(2, 0); //Включаем I2C на пинах 2 и 0
- Serial.begin(115200);
- bool status;
- // настройки по умолчанию
- // (вы также можете использовать объект библиотеки Wire):
- //status = bme.begin();
- if (!bme.begin(0x76)) {
- Serial.println("Could not find a valid BME280 sensor, check wiring!");
- // "Невозможно найти корректный датчик BME280,проверьте подключение!"
- while (1);
- }
- // подключаемся к WiFi-сети при помощи SSID и пароля:
- Serial.print("Connecting to "); // "Подключение к"
- Serial.println(ssid);
- WiFi.begin(ssid, password);
- while (WiFi.status() != WL_CONNECTED) {
- delay(500);
- Serial.print(".");
- }
- // печатаем локальный IP-адрес и запускаем веб-сервер:
- Serial.println("");
- Serial.println("WiFi connected."); // "WiFi подключен."
- Serial.println("IP address: "); // "IP-адрес: "
- Serial.println(WiFi.localIP());
- server.begin();
- }
- void loop(){
- // начинаем прослушивать входящих клиентов:
- WiFiClient client = server.available();
- if (client) { // если подключился новый клиент,
- Serial.println("New Client."); // печатаем сообщение
- // «Новый клиент.»
- // в мониторе порта;
- String currentLine = ""; // создаем строку для хранения
- // входящих данных от клиента;
- while (client.connected()) { // цикл while() будет работать
- // все то время, пока клиент
- // будет подключен к серверу;
- if (client.available()) { // если у клиента есть данные,
- // которые можно прочесть,
- char c = client.read(); // считываем байт, а затем
- Serial.write(c); // печатаем его в мониторе порта
- header += c;
- if (c == '\n') { // если этим байтом является
- // символ новой строки
- // если мы получим два символа новой строки подряд,
- // то это значит, что текущая строчка пуста;
- // это конец HTTP-запроса клиента,
- // а значит – пора отправлять ответ:
- if (currentLine.length() == 0) {
- // HTTP-заголовки всегда начинаются
- // с кода ответа (например, «HTTP/1.1 200 OK»)
- // и информации о типе контента
- // (чтобы клиент понимал, что получает);
- // в конце пишем пустую строчку:
- client.println("HTTP/1.1 200 OK");
- client.println("Content-type:text/html");
- client.println("Connection: close");
- // "Соединение: отключено"
- client.println();
- // показываем веб-страницу с помощью этого HTML-кода:
- client.println("<!DOCTYPE html><html>");
- client.println("<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">");
- 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: #0043af; 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: #bcbcbc; padding: 1px; }");
- // заголовок веб-страницы:
- client.println("</style></head><body><h1>ESP32 with BME280</h1>");
- client.println("<table><tr><th>MEASUREMENT</th><th>VALUE</th></tr>");
- client.println("<tr><td>Temp. Celsius</td><td><span class=\"sensor\">");
- client.println(bme.readTemperature());
- client.println(" *C</span></td></tr>");
- client.println("<tr><td>Temp. Fahrenheit</td><td><span class=\"sensor\">");
- client.println(1.8 * bme.readTemperature() + 32);
- client.println(" *F</span></td></tr>");
- client.println("<tr><td>Pressure</td><td><span class=\"sensor\">");
- client.println(bme.readPressure() / 100.0F);
- client.println(" hPa</span></td></tr>");
- client.println("<tr><td>Approx. Altitude</td><td><span class=\"sensor\">");
- client.println(bme.readAltitude(SEALEVELPRESSURE_HPA));
- client.println(" m</span></td></tr>");
- client.println("<tr><td>Humidity</td><td><span class=\"sensor\">");
- client.println(bme.readHumidity());
- client.println(" %</span></td></tr>");
- client.println("</body></html>");
- // конец HTTP-ответа задается
- // с помощью дополнительной пустой строки:
- client.println();
- // выходим из цикла while():
- break;
- } else { // если получили символ новой строки,
- // очищаем переменную «currentLine»
- currentLine = "";
- }
- } else if (c != '\r') { // если получили любые данные,
- // кроме символа возврата каретки,
- currentLine += c; // добавляем эти данные
- // в конец строки «currentLine»
- }
- }
- }
- // очищаем переменную «header»:
- header = "";
- // отключаем соединение:
- client.stop();
- Serial.println("Client disconnected.");
- // "Клиент отключился.")
- Serial.println("");
- }
- }
I2C. Прописываю свои ssid и password. WiFi роутер по MAC адресу выдает статический IP. Подключаюсь по нему и все работает, но! Если в Хроме открыть IPадрес в режиме инкогнито все хорошо, открывается страница и клиент отключается, тоже самое если открыть страницу с телефона. Но если открыть страничку в хроме не инкогнито, страница открывается, клиент отключается и сразу подключается новый клиент. И при этом он молчит, контроллер зависает на строке 78. Чего такого отправляет Хром, что клиент создается вновь и как это исправить?