• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Как добавить обновление на вебсервер

Сергей_Ф

Moderator
Команда форума
Код:
void setup(void){
  pinMode(HeaterPin, OUTPUT);                           // выход управления нагрузкой
  t.begin();
  t.setResolution(10);                                 // 10 бит

  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: ");
  Serial.println(WiFi.localIP());

  server.on("/",       [](){web();});
  server.on("/obn",    [](){web();});
  //server.on("/update", [](){web_upd();});
  server.on("/reg+",   [](){reg_t++;web();});
  server.on("/reg-",   [](){reg_t--;web();});
  server.on("/reg+10", [](){reg_t=reg_t+10;web();});
  server.on("/reg-10", [](){reg_t=reg_t-10;web();});
  httpUpdater.setup(&server);

  server.begin();
  Serial.println("HTTP server started");
}
//------------------------------------------------------------------------
void loop(void){
    server.handleClient();
    t.requestTemperatures();
    temper = t.getTempCByIndex(0);
  if(reg_t<=0)  {reg_t=0;}
  if(reg_t>=125){reg_t=125;}
  if(reg_t >= temper + gis){digitalWrite(HeaterPin,HIGH);ind="ВКЛ"; OUT=true;}
  if(reg_t <= temper - gis){digitalWrite(HeaterPin,LOW); ind="ВЫКЛ";OUT=false;}
    yield();
}
//------------------------------------------------------------------------
void web(){
String webPage = "<!DOCTYPE HTML><html>";
       webPage += "<meta charset='utf-8'><meta name='viewport' content='width=540, user-scalable=no' />";
       webPage += "<style>table {background-color:#F5F5F5;border-radius: 5px;}</style>";
       webPage += "<TABLE align='center' width='520' BORDER='1' cellspacing='0' cellpadding='5'><tr><td colspan='3' bgcolor='#006400' align='center'>";
       webPage += "<font color='#FFFFFF'><h2>Терморегулятор 0...125 &#176;C</font></td></tr></h2>";
       webPage += "<meta http-equiv='Refresh' content='5; URL=/obn' />"; // автоматическое обновление страницы каждые 5 секунд
       webPage += "<tr><td>Температура</td><td align='center'><a href=\"obn\"><button>Обновить</button></a></td><td bgcolor='#FFFFFF' align='center'><big><b>";
       webPage += temper;
       webPage += " &#176;C</b></big></td></tr>";
       webPage += "<tr><td>Регулировка температуры</td><td align='center'><a href=\"reg+\"><button>+1&nbsp;&nbsp;</button>";
       webPage += "</a><a href=\"reg-\"><button>-1&nbsp;&nbsp;</button></a><br><a href=\"reg+10\"><button>+10</button></a>";
       webPage += "<a href=\"reg-10\"><button>-10</button></a></td><td bgcolor='#FFFFFF' align='center'><big><b>";
       webPage += reg_t;
       webPage += " &#176;C</b></big></td></tr>";
       webPage += "<tr><td colspan='2'>Нагрев</td>";
       if(OUT){webPage +="<td align='center' bgcolor='#50FF50'><big><b>";}
       else   {webPage +="<td align='center' bgcolor='#FF5050'><big><b>";}
       webPage += ind;
       webPage += "</b></big></td></tr></html>";
       webPage += "<tr><td align='center'>Обновление прошивки</td><td align='center'colspan='2'><a href=\"update\"><button>Обновить</button></a></td></tr></html>";
   
    server.send(200, "text/html", webPage);
     delay(300);
}
//-----------------------------------------------------
//void web_upd(){
//  if(!UPDATE){
//    httpUpdater.setup(&server);
//     Serial.print("WiFi.localIP:  ");
//     Serial.println(WiFi.localIP());
//     Serial.println("HTTP UpdateServer started");
//      yield();
//    UPDATE = true;}
//}
вот так всё работает и "автоматически" переходит куда надо
 

selan61

Member
вы всего на 5 лет старше меня.
Ну значит айкью на порядок меньше. Все мы разные. Один понимает с полуслова, а до другого не достучатся.
только обработчик должен быть уже определён.
Потому, что не знаю как его определить.
А у вас его нет
В этом то и дело, и в этом был вопрос.
 

Сергей_Ф

Moderator
Команда форума
В этом то и дело, и в этом был вопрос.
Так надо было его определить ДО вызова. Html ничего не знает про код на esp, естественно он не может предугадать ваши мысли.
Определяете обработчик ДО обращения по его адресу в коде, а в html обращаетесь по адресу. Тогда esp знает как его обработать. А так вы чего-то хотите, но не говорите чего. Вот и нет реакции.
Регистрацию обработчика по кнопке тоже можно сделать, но там будет всё посложнее. Непонятно зачем только.
А вы по кнопке только регистрируете обработчик, а не обращаетесь к нему. Html ничего об этом не знал и ждал обращения от пользователя. Тогда надо js приделывать.
Совершенно лишнее усложнение с непонятной целью.
 

selan61

Member
Регистрацию обработчика по кнопке тоже можно сделать, но там будет всё посложнее. Непонятно зачем только.
Так тоже вполне нормально получилось. А я мудрил, не понимая, что и зачем. Ну что с крестьянина взять, хорошо, хоть так могу.
Ещё раз премного благодарен за помощь.
 

enjoynering

Well-known member
если не получится, вот вам готовый - tthRelay. уже 3-и месяца погреб сушит. вся логика крутится на самой esp - подключился, настроил через вебморду и забыл. не нужно ни каких облаков и серверов.

- ручной режим, включение/выключение
- по времени от чч: мм до чч: мм
- по температуре (охлаждение/обогрев) с регулируемым гистерезисом и приоритетом по времени от чч до чч
- по влажности (увлажнитель/осушитель) с регулируемым гистерезисом и приоритетом по времени от чч до чч
- поддержка нормально разомкнутого/нормально замкнутого реле
- режим эмуляции кнопки без фиксации, с регулируемым временем нажатия от 150 миллисекунд до 500 миллисекунд и шагом 50 миллисекунд
- поддержка сенсоров AHT1x/AHT2x и HTU2xD/SHT2x/Si70xx
- регистратор температуры и влажности на SPI флэш-память с графиками, до 400 КБ (этого достаточно для хранения годового отчета с шагом 30 минут)
- при выходе из строя датчика, реле переходит в выключенное состояние и рабочими остаются только режим по времени и ручной
- если подключены два датчика с разными адресами и один выходит из строя, то во время перезагрузки второй датчик будет использован автоматически
- hostname WiFi клиента используется в качестве ID реле, в сети может находиться не ограниченное количество реле при условии, что все они имеют разные hostname
- web интерфейс (Bootstrap + jQuery)
- автоматическая синхронизация с NTP серверами или в ручную со временем из браузера
- автоматически переход с летнего на зимнее и обратно
 

Сергей_Ф

Moderator
Команда форума
Всё уже получилось. Но... Вы забыли упомянуть, что ваш код можно прошить прямо из веб-морды текущей прошивки, через кнопку Обновить. Только надо предварительно выключить нагреватель и проверить соответствие выводов.
 
Последнее редактирование:
Сверху Снизу