• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Решено Обновление значений без перезагрузки страницы.

NutsXXXL

New member
@voodjuk, nodemcu это в первую очередь удобная железка и сомнительная по некоторым моментам прошивка. однако сокет то она как бы должна уметь открыть.
arduino уже куда как больше близка к серьезному программированию, хоть и в попсовой оболочке, она позволяет разрабатывать свои прошивки а не скрипты
и есть еще вариант такой: Smart.js
это уже отдельная прошивка которая позволяет выполнять Java на 8266. пример для websocket
var ws = new WebSocket('ws://echo.websocket.org');

ws.onopen = function(ev) {
ws.send('hi');
};

ws.onmessage = function(ev) {
print('Received WS data: ', ev.data);
ws.close();
};
 
Последнее редактирование:

NutsXXXL

New member
@Shara ну начнем с того что в целом не логично закрывать веб сервер и открывать сокет
как вариант - один сервер и вебсокеты и http
а дальше дело в конкретной реализации
конкретно в ардуине два сервера и два порта
ESP8266WebServer server(80);
WebSocketsServer webSocket = WebSocketsServer(81);
в примере rtos sdk - воббще только один вебсокет без веб (или меня надо ткнуть носом). SDK эти кстати вобще корявы их допиливать еще...
а пример от @tretyakov_sa походу один сервер на все но он похоже использует REST а не вебсокеты (глубже не смотрел код плохо читаем)
 

goodwin

Member
Для работы AJAX достаточно http GET запросов.
Надо в тело HTML страницы, отдаваемой сервером, вставить примерно такой javascript код:
Код:
<script type="text/javascript">

function Work_data(str)
   {
     /// здесь  парсим  строку полученных данных,
    ///  отображаем их на странице и пр.
   }

  function GetData()
   {
     nocache = "&nocache="+ Math.random() * 1000000;   // чтобы браузер не обращался к кэш
     var xmlhttp;
     if (window.XMLHttpRequest)
       {// код для IE7+, Firefox, Chrome, Opera, Safari
       xmlhttp=new XMLHttpRequest();
       }
     else
       {// код для IE6, IE5
       xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
       }
       xmlhttp.onreadystatechange=function()
       {
        if (xmlhttp.readyState==4 && xmlhttp.status==200)
         {
           Work_data(xmlhttp.responseText);
         }
      }
    xmlhttp.open("GET",("сигнатура запроса данных"),true);
    xmlhttp.send();
   }
var timerId = setInterval(function(){GetData();}, 1000); //  интервал запросов данных (вызова функции "GetData()") (мсек)
</script>
На стороне сервера парсим GET запросы,
отдаем страницы и т.п.
Если в GET запросе находим "сигнатура запроса данных", то отдаем строку с обновленными данными.
Для мелких "махараек" - самое то. Не надо держать постоянное соединение, извращаться с новомодными web сокетами и пр. Мизерный трафик.
 
Последнее редактирование:

MadEngineer

New member
@goodwin спасибо большое!
Здравствуйте! Поделитесь пожалуйста скетчем?
Никак не могу решить задачу-зайти по ip адресу на esp8266 и чтобы там значение температуры с датчика обновлялось без перезагрузки страницы вручную. Не могу понять механизм websocket...
 

PAV

Member
Здравствуйте! Поделитесь пожалуйста скетчем?
Никак не могу решить задачу-зайти по ip адресу на esp8266 и чтобы там значение температуры с датчика обновлялось без перезагрузки страницы вручную. Не могу понять механизм websocket...
+1 Поделитесь!!!! плиз
 
Сверху Снизу