• Система автоматизации с открытым исходным кодом на базе 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 Поделитесь!!!! плиз
 
Сверху Снизу