Термометр Wi-Fi в режиме STA / AP с ESP8266


  • В термометре используется плата Wi-Fi ESP8266 версии 12E на плате разработки NodeMCU v3 Lolin. Чип Wifi, в дополнение к получению данных от датчиков температуры, также содержит веб-сервер, на котором он считывает измеренные данные. Данные всегда измеряются при загрузке страницы. Данные о неактивности не записываются. Веб-сервер позволяет запускать код HTML + CSS, который позволяет каким-то образом создать красивый графический интерфейс для отображения температуры для пользователя, например, в таблице.
  •   
  • Существует две версии этого проекта, и функциональность веб-сайта одинакова. В обоих случаях ESP8266 запускает веб-сервер, который отображает температуру в таблице. Версии отличают связь. В одном случае можно использовать уже существующую сеть LAN, к которой плата подключается и поддерживает веб-сервер на статическом или динамическом IP-адресе. Когда вы вводите IP-адрес в окне браузера, пользователь может получить доступ к нужной странице из ESP с температурой, или даже имя хоста - имя домена также можно использовать при использовании mDNS.
  • В последнем случае плата отправляет свой собственный SSID в режиме AP в качестве точки доступа. Пользователь получает доступ к плате, вводя пароль в сеть (входит в ESP8266). Плата передает SSID с шифрованием WPA / WPA2 PSK или через открытую сеть Wi-Fi. Данные доступны только в пределах досягаемости этой сети Wi-Fi за пределами локальной сети домашней сети. ESP также запускает DHCP-сервер, который после успешной аутентификации пользователя назначает IP-адрес из диапазона. Веб-страница находится на IP-адресе шлюза - ESP.
  • Данные о температуре записываются с пары датчиков температуры DS18B20, которые подключены к шине OneWire, что позволяет собирать данные по одному проводу с возможностью перемещения драйвера на расстояние от десяти до сотен метров. DS18B20 выпускаются в двух основных вариантах - внутренний датчик в транзисторной упаковке или водонепроницаемый - внешний дизайн в алюминиевой трубке. Шина OneWire подходит для помех, и к ней можно подключить до 2 56 датчиков. Отдельные датчики делятся по заводскому адресу - серийному номеру. Есть 2 основных варианта подключения датчиков. Нормальное и паразитное соединение, в обоих может быть подано напряжение 3,3 - 5,5 В. При нормальной проводке результат будет более надежным для больших расстояний.
  • Различия уже видны из схемы:
    Параметры проекта:
  • NodeMCU в задаче точки доступа (AP) или в качестве клиента в вашей локальной сети
  • Пользовательское шифрование SSID и WPA2 PSK или без шифрования
  • Пользовательский IP-адрес (статический), разверните флаг DNS
  • Безопасная сеть, доступная через сеть ESP, и ее доступ с адаптивным дизайном
  • Когда страница загружает текущую информацию
  • Другие возможные варианты:

    Исходный код для ESP8266 - открытая сеть Wi-Fi - AP

    #include <ESP8266WiFi.h>
    #include <ESP8266WebServer.h>
    #include <OneWire.h>                 
    #include <DallasTemperature.h>       
    #define ONE_WIRE_BUS 2               
    OneWire oneWire(ONE_WIRE_BUS);       
    DallasTemperature sensors(&oneWire);
    const char *ssid = "MojaOtvorenaESPsiet";
    ESP8266WebServer server(80);
    
    void handleRoot() {
      sensors.begin(); 
      sensors.requestTemperatures();  
      server.send(200, "text/html", "<head><meta charset='UTF-8'><meta name='author' content='Martin Chlebovec'><meta name='viewport' content='width=device-width, initial-scale=1.0'></head><style>body{  display: table;width: 100%;background: #dedede;text-align: center;}*{ -webkit-box-sizing: border-box; /* Safari/Chrome, other WebKit */-moz-box-sizing: border-box;    /* Firefox, other Gecko */box-sizing: border-box;         /* Opera/IE 8+ */}.aa_h2{  font:100 5rem/1 Roboto;  text-transform: uppercase;}table{   background: #fff;}table,thead,tbody,tfoot,tr, td,th{  text-align: center;  margin: auto;  border:1px solid #dedede;  padding: 1rem;  width: 50%;}.table    { display: table; width: 50%; }.tr       { display: table-row;  }.thead    { display: table-header-group }.tbody    { display: table-row-group }.tfoot    { display: table-footer-group }.col      { display: table-column }.colgroup { display: table-column-group }.td, .th   { display: table-cell; width: 50%; }.caption  { display: table-caption }.table,.thead,.tbody,.tfoot,.tr,.td,.th{ text-align: center; margin: auto; padding: 1rem;}.table{  background: #fff;  margin: auto;  border:none;  padding: 0; margin-bottom: 5rem;}.th{font-weight: 700;border:1px solid #dedede;&:nth-child(odd){border-right:none;}}.td{font-weight: 300;border:1px solid #dedede;border-top:none;&:nth-child(odd){border-right:none;}}.aa_htmlTable{background: tomato;padding: 5rem;display: table;width: 100%;height: 100vh;vertical-align: middle;}.aa_css{background: skyblue;padding: 5rem;display: table;width: 100%;height: 100vh;vertical-align: middle;}.aa_ahmadawais{display: table;width: 100%;font: 100 1.2rem/2 Roboto;margin: 5rem auto;}</style><div class='aa_htmlTable'><table width=100%><thead><tr><th>Teplota</th><th>Hodnota</th></tr></thead><tbody><tr><td>Dnu</td><td>"+(String)sensors.getTempCByIndex(0)+" °C</td></tr><tr><td>Von</td><td>"+(String)sensors.getTempCByIndex(1)+" °C</td></tr></tbody></table></div>");
    }
    
    void setup() {
      delay(1000);
      Serial.begin(115200);
      Serial.println();
      Serial.print("Konfigurujem access point...");
      WiFi.softAP(ssid);
      IPAddress myIP = WiFi.softAPIP();
      Serial.print("IP adresa pristupoveho bodu je: ");
      Serial.println(myIP);
      server.on("/", handleRoot);
      server.begin();
      Serial.println("Webserver bezi.");
      Serial.println("Vysiela SSID:");
      Serial.println(ssid);
      Serial.println("Bez hesla - otvoreny hotspot");
    }
    
    void loop() {
      server.handleClient();
    }