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

Нужна помощь Организация обмена данными посредством WebSockets

sally555

New member
Признаюсь честно, после нескольких дней попыток разобраться самому, в голове образовалась такая каша, что голова уже не соображает. С Web-технологиями сталкивался нечасто, и для меня это вообще какая то аморфная субстанция, лучше уж с "железками" возится, их хоть потрогать можно:). Вообщем прошу помощи!
Задача у меня такая, передавать данные esp->компьютер(планшет, смартфон) и в обратном направлении. К модулю esp8266-12e подключены 2 цифровых датчика DS18b20 и термопара через цифровой адаптер MAX6675, локальный 4х строчный дисплей и модуль часов реального времени на DS3231. Все функционирует, на локальный дисплей выводится температура, дата и время. Еще планирую прикрутить расширитель портовPCF8574, а на него релейный модуль. Основной скетч написан в Arduino IDE, теперь нужна связь с внешним миром. Есть средство в виде библиотеки WebSockets, хотелось бы на его основе наладить обмен, но как, ум прикладывал не помогает:(. Примеры из библиотеки мне ничего не дали.
 

sally555

New member
Спасибо всем, что не отказали в помощи:D! Ну это шутка юмора, прошу не обижаться. Тема почти закрыта, разобрался немного, WebSockets работает, кривенько конечно, но работает. Косяк в сырых библитеках в первую очередь, ну и по мелочам конечно. DNS-сервис так и не заработал. Будем работать дальше.
 
  • Like
Реакции: pet

sally555

New member
Вообщем, может кому и пригодится, как у меня тут эта штука заработала. Правда пока работает соединение, датчики пока не подключал, потому как вылезла еще одна проблемка, ну об этом позднее. Про WebSocket-ы много чего написано на просторах инета, и вообщем то принцип понятен, это касаемо схемы компьютер-сервер. На сервере устанавливается программа WebSocketServer-а написанная на чем угодно, чаще на PHP, которая может запускаться удаленно, либо крутится постоянно. На клиентской машине запускается программа WebSocketClient-a, так же написанная на чем угодно, чаще мне попадались варианты на JavaScript. Скрипт на JavaScript встраивается в Html-страничку, и уже запуская эту страничку в браузере запускается и наш WebSocketClient, который сам устанавливает соединение с WebSocketServer-ом на удаленном сервере. Как только соединение произошло, можно обмениваться данными. Инициатором обмена может быть как WebSocketClient так и WebSocketServer, и соединение будет работать пока один из участников не разорвет это соединение. По этому же принципу организуется схема esp8266-компьютер, с той разницей что WebSocketServer подымается на esp8266 и написан на C++. WebSocketClient так же запускается на компьютере. Конечно можно и наоборот сделать, но я пошел по пути наименьшего сопротивления), в примерах сделано именно так. Можно и между 2-х esp8266 организовать такой обмен.
Продолжение следует...
 

pet

Member
хорошее направление! я тоже собираюсь этим заняться! вы могли бы по подробнее описать грабли которые меня ждут! я собираюсь сделать посредством сёкета глобальный доступ к ESPШКЕ. хочу дёргать свет и розетки и плюс температурку ещё пару датчиков. и если вам не трудно опишите свой труд, какие библы, прошивка и т.д.

Ничто не вечно! кроме знаний!
 

sally555

New member
вы могли бы по подробнее описать грабли которые меня ждут! я собираюсь сделать посредством сёкета глобальный доступ к ESPШКЕ. хочу дёргать свет и розетки и плюс температурку ещё пару датчиков. и если вам не трудно опишите свой труд, какие библы, прошивка и т.д.
Напишу обязательно! Просто я смотрю никто особо не интересуется, вопросов не задают, может здесь так не принято:). Пока сделано что то типа WiFi-логгера с обратной связью, на стороне ESPшки организован WebSocketServer, он же опрашивает пока два датчика на ds18xxxx, отсылает данные по WiFi клиенту и принимает команды от клиента управляя 3мя реле. Клиент написан на Html и JavaScript, загружается локально с компьютера или с удаленного сервера, изначально клиент должен был грузится со встроенного в ESPшку WebServerа, но из-за глюка IDE Atduino версии 1.65, пока от этого отказался. К сожалению все материалы по проекту у меня на работе, кое что сохранено в облаке, надо поискать. Сейчас времени очень мало, сами понимаете за "каникулы" нужно многое успеть сделать, пока есть возможность, завтра пороюсь в облаке, если что найду выложу.
 

M-a-x-x

New member
Тоже с этой темой заморочился, у меня пока все через MQTT работает, но так как все установлено на своем домашнем серваке, хочу сделать резервный канал на случай сбоя сервера, что бы на ESPшке был WebSocketServer, с которым можно было обмениваться данными напрямую с телефона/компа через web-интерфейс. Так как все делаю в Sming, сейчас изучаю эти примеры
https://github.com/SmingHub/Sming/tree/develop/samples/HttpServer_WebSockets и https://github.com/SmingHub/Sming/tree/develop/samples/CommandProcessing_Debug. Кстати не все мобильные браузеры поддерживают WebSocket -> http://caniuse.com/#search=WebSockets
 

pet

Member
Тоже с этой темой заморочился, у меня пока все через MQTT работает, но так как все установлено на своем домашнем серваке, хочу сделать резервный канал на случай сбоя сервера, что бы на ESPшке был WebSocketServer, с которым можно было обмениваться данными напрямую с телефона/компа через web-интерфейс. Так как все делаю в Sming, сейчас изучаю эти примеры
https://github.com/SmingHub/Sming/tree/develop/samples/HttpServer_WebSockets и https://github.com/SmingHub/Sming/tree/develop/samples/CommandProcessing_Debug. Кстати не все мобильные браузеры поддерживают WebSocket -> http://caniuse.com/#search=WebSockets
сейчас насколько я знаю уже все браузеры на восьмом движке, и сёкет в полне себе должен работать! главное правильно собрать!:)
 

M-a-x-x

New member
У меня на Android 4.4.2. не работает ни в каком браузере, а на пятом все в порядке.
 

SergCh

New member
Напишу обязательно! Просто я смотрю никто особо не интересуется, вопросов не задают, может здесь так не принято:).
Тема еще как интересная. Собираю похожую штуку, только управление нагревом. На стороне железа более менее реализовал, а вот с веб мордой голову сломал. Хотелось бы что бы по адресу с телефона заходил на страничку и там индикация текущей температуры была и возможность изменить уставку. Есть пример в wifi розеткой, но уперся в синтаксис html. Наскоком его не взять, ну и нет ввода/вывода значений переменных. Я так понимаю через WebSocket можно наладить двустороннюю связь?
 

pet

Member
Тема еще как интересная. Собираю похожую штуку, только управление нагревом. На стороне железа более менее реализовал, а вот с веб мордой голову сломал. Хотелось бы что бы по адресу с телефона заходил на страничку и там индикация текущей температуры была и возможность изменить уставку. Есть пример в wifi розеткой, но уперся в синтаксис html. Наскоком его не взять, ну и нет ввода/вывода значений переменных. Я так понимаю через WebSocket можно наладить двустороннюю связь?
https://ru.wikipedia.org/wiki/WebSocket может вам поможет
 

sally555

New member
Собираю похожую штуку, только управление нагревом. На стороне железа более менее реализовал, а вот с веб мордой голову сломал. Хотелось бы что бы по адресу с телефона заходил на страничку и там индикация текущей температуры была и возможность изменить уставку. Есть пример в wifi розеткой, но уперся в синтаксис html. Наскоком его не взять, ну и нет ввода/вывода значений переменных. Я так понимаю через WebSocket можно наладить двустороннюю связь?
У меня тоже по железу почти все нормально, а вот с веб мордой проблема, знания html и JavaScript десятилетней давности:) явно не хватает, пришлось штудировать матчасть. Но кое что уже есть, надо только "причесать" код веб-клиента, сырой с мусором выкладывать не хочется, только с толку сбивать коллег. Двусторонняя связь через WebSocket у меня уже работает, от ESPшки идут данные от термодатчиков, обратно есть возможность по кнопкам управлять подключенными к ESPшке 3мя реле. Сейчас пытаюсь реализовать сохранение полученных от ESPшки данных в локальном файле на стороне веб-клиента, пока глухо:(.
 

SergCh

New member
У меня тоже по железу почти все нормально, а вот с веб мордой проблема, знания html и JavaScript десятилетней давности:) явно не хватает, пришлось штудировать матчасть
Аналогично.Буду штудировать.Вы по книжке какой-то или ресурс полезный?Ссылкой не поделитесь?
 

sally555

New member
Аналогично.Буду штудировать.Вы по книжке какой-то или ресурс полезный?Ссылкой не поделитесь?
С разных источников дергаю, в том числе и из книг. Подберу ссылки, вышлю.

накидал ссылок в ЛП
 
Последнее редактирование:

pvvx

Активный участник сообщества
Скорость передачи через WebSocket нормальная? Т.е. передается больше 5-ти блоков в секунду? Или как всегда - ограничение связанное со стеком в пазу на 200 ms на одиночные пакеты TCP?
Если по 80-му порту с Google Chrome с паузами в 200 мсек - то такой WebSocket никому не нужен. :(
 

timon1991j

New member
У меня обмен данными между esp и удаленным сервером идёт через простые http get запросы, с интервалом каждую секунду, что плохо как для скорости, так и вообще.. Понять не могу, как прикрутить в esp вебсокет? Если сделать его сервером, как на него попасть извне локальной сети? Можете примеры кода покидать?
 

rkravt

Member
У меня обмен данными между esp и удаленным сервером идёт через простые http get запросы, с интервалом каждую секунду, что плохо как для скорости, так и вообще..
Хммм.. собсна, кому от этого плохо для какой-то скрости ... "так и вообще"?
Понять не могу, как прикрутить в esp вебсокет? Если сделать его сервером, как на него попасть извне локальной сети?
Вы хоть в интернетах искали, пытались разобраться и понять что есть протокол websoket?

ps. ну классика: Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа (c) Р. Шекли
 
Последнее редактирование:

timon1991j

New member
Хммм.. собсна, кому от этого плохо для какой-то скрости ... "так и вообще"?

Вы хоть в интернетах искали, пытались разобраться и понять что есть протокол websoket?
Запросы на сервер каждую секунду - ни есть хорошо. Это первое. Второе - задержка при управлении, от 1 секунды до 4х, отчего так пока точно не понятно, при том что интервал стоит в 1 секунду, может сам esp не успевает получать ответ, что вполне реально.

С вебсокетами знаком, не очень понятно как это все на esp работает. Нашёл библиотеки GitHub - morrissinger/ESP8266-Websocket: A websocket library for the ESP-8266. и GitHub - Links2004/arduinoWebSockets: arduinoWebSockets

Как я понимаю, есть путь запустить сервер-сокет на самом есп, но ведь он будет работать в локальной сети и доступ извне к нему не получить.

Можно сделать из него клиента для подключения к внешнему серверу, это уже вроде подходит.

У меня есть серверная часть, грубо говоря все пишется в файл настроек, в котором хранятся данные о включении/выключении пинов на Ардуине, вот его постоянно мониторить нужно на предмет изменений, вот думаю, как это подогнать.
 
Сверху Снизу