Вывод состояния пина на Web страницу

sssema96
Offline
Зарегистрирован: 23.08.2021

Здравствуйте, есть плата ESP-01 на мк8266. Хочу организовать вывод на Web страницу - состояние пина 2 (настроен на вход), в режиме реального времени. Есть код который работает, но только при принудительном обновлении страницы, можно ли как-то сделать без перезагрузки страницы? 

sssema96
Offline
Зарегистрирован: 23.08.2021
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>

MDNSResponder mdns;

// впишите сюда данные, соответствующие вашей сети: 
const char* ssid = "Homenet. Ua 14";
const char* password = "05041996";

ESP8266WebServer server(80);

String webPage = "";

int gpio0_pin = 0;
int val;

void setup(void){
  webPage += "<h1>ESP8266 Web Server</h1><p>Socket #1 <a href=\"socket1On\"><button>ON</button></a>&nbsp;<a href=\"socket1Off\"><button>OFF</button></a></p>";
  
  // подготавливаем GPIO-контакты:
  pinMode(gpio0_pin, OUTPUT);
  digitalWrite(gpio0_pin, LOW);
  pinMode(2, INPUT);
  
  delay(1000);
  
  Serial.begin(115200);
  WiFi.begin(ssid, password);
  Serial.println("");

  // ждем соединения:
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.print("Connected to ");  //  "Подключились к "
  Serial.println(ssid);
  Serial.print("IP address: ");  //  "IP-адрес: "
  Serial.println(WiFi.localIP());
  
  if (mdns.begin("esp8266", WiFi.localIP())) {
    Serial.println("MDNS responder started");
               //  "Запущен MDNSresponder"
  }
  
  server.on("/", [](){
    server.send(200, "text/html", webPage);
  });
  
  server.on("/socket1On", [](){
    server.send(200, "text/html", webPage);
    digitalWrite(gpio0_pin, HIGH);
    delay(1000);
    digitalWrite(gpio0_pin, LOW);
  });
 
  server.on("/socket1Off", [](){
    server.send(200, "text/html", webPage);
    digitalWrite(gpio0_pin, HIGH);
    delay(1000);
    digitalWrite(gpio0_pin, LOW);
  });
  
  server.begin();
  Serial.println("HTTP server started");
}
 
void loop(void){
  server.handleClient();
  delay(1000);
 //  "Здесь вывожу состояние пина 2 в блок div на странице, через String"
 webPage += "<div style=\"text-align: center;width: 98px;color:white ;padding: 10px 30px;background-color: #5191e4;margin: 0 auto;\">"+ String(digitalRead(2))+"</div>";
}

 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

если не обновлять то видимо нет, значит что-то должно дёргать обновление страницы, вариантов знаю два

rkit
Offline
Зарегистрирован: 23.11.2016

Можно, но ты не осилишь.

sssema96
Offline
Зарегистрирован: 23.08.2021

ua6em пишет:

если не обновлять то видимо нет, значит что-то должно дёргать обновление страницы, вариантов знаю два


Можете подсказать что за варианты? У меня на странице будут ещё 2 кнопки. Я думал может как-то подвязать обновления состояния пина под нажатия этих кнопок?

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

sssema96 пишет:
ua6em пишет:

если не обновлять то видимо нет, значит что-то должно дёргать обновление страницы, вариантов знаю два

Можете подсказать что за варианты? У меня на странице будут ещё 2 кнопки. Я думал может как-то подвязать обновления состояния пина под нажатия этих кнопок?

так подсказал уже - websocket решает проблему

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

sssema96 пишет:

можно ли как-то сделать без перезагрузки страницы? 

Вот здесь всё сделано - http://arduino.ru/forum/programmirovanie/microajax-dlya-arduino