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

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

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

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