Arduino Mega Server для esp8266

Модератор: Alex

Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm
Благодарил (а): 42 раза
Поблагодарили: 262 раза

Re: Arduino Mega Server для esp8266

Сообщение Alex » Вт май 24, 2016 7:09 pm

PS: Кстати, как там вообще проект? Движется?)
А с момента написания первого поста не было времени заниматься ESP8266, нужно было завершить текущие неотложные дела (последние 10 новостей):

http://hi-lab.ru/arduino-mega-server/details

Теперь очередь дошла до ESP8266, если не появятся более актуальные задачи, то начну разбираться с еспешкой.
Alex...небольшая просьба...ну как небольшая...наверное довольно таки большая...не суть...
В общем, если это не сильно напряжно реализуется, было бы неплохо сделать страничку подключения к wifi сети.
Т.е. подключаешь питание - создаётся какая-то wifi сеть по-умолчанию...цепляешься к ней, заходишь - и открывается приветственная форма с запросом SSID и пароля домашней сети. Вводишь - esp-шка перегружается, и цепляется к основной сети, и там уже по IP доступен остальной вэб-интерфейс. Я понимаю, что это, наверное трудоёмко, но в той же homes-smart вроде реализовано (не пробовал пока прошиваться). Если так сделать - будет просто отличная замена homes-smart...а иначе как-то трудоёмко цепляться через порт.
Честно говоря, уже забыл как там что выглядит, но технология крутая и очень гибкая (можно делать такие вещи, которые на Ардуино даже не снились).

Сейчас главная задача — решить вопрос, озвученный в первом посте (чем я и собираюсь заняться).
За это сообщение автора Alex поблагодарил:
bat86 (Вт май 24, 2016 7:13 pm)
Рейтинг: 1.16%
Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm
Благодарил (а): 42 раза
Поблагодарили: 262 раза

Re: Arduino Mega Server для esp8266

Сообщение Alex » Чт май 26, 2016 5:53 pm

Вопрос знатокам на засыпку: почему в стандартной библиотеке ESP8266WiFi

Код: Выделить всё

WiFiClient client

client.write(55);
client.write(buff, rsize); 
запись что байта, что целого буфера занимает ровно 200 миллисекунд вместо положенной одной миллисекунды? И как с этим бороться?

Логика подсказывает, что время тратится не на запись, а на что-то другое.

Те, кто может помочь разобраться в этом вопросе могут проанализировать код стандартной библиотеки ESP8266WiFi и/или поэкспериментировать с её примерами.

При этом сервер ESP8266WebServer отдаёт данные клиенту с нормальной скоростью, то есть система в принципе может работать как положено.
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

Re: Arduino Mega Server для esp8266

Сообщение nick7zmail » Чт май 26, 2016 6:30 pm

Я конечно не знаток...уж тем более esp-шки...но я про неё немного читал...экспериментировать пока некогда...но запомнилась мысль (могу ошибаться) что все подобные переменные пишутся не в ram а на флешпамять сразу...и что ram отведён под другой функционал, но через процедуры к нему можно получить доступ (на память не скажу какие именно)... Ещё раз поторюсь - могу ошибаться.

Отправлено с моего C6603 через Tapatalk
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm
Благодарил (а): 42 раза
Поблагодарили: 262 раза

Re: Arduino Mega Server для esp8266

Сообщение Alex » Чт май 26, 2016 7:00 pm

200 миллисекунд это БЕЗУМНО много, это 0,2 секунды на запись одного байта — я просто не могу найти в дебрях библиотек, где это безобразие происходит. И это не зависит от объёма записи — 128 байт — тоже 200 миллисекунд.

Как это назвать, кроме как очередным приколом Ардуино, я не знаю.
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

Re: Arduino Mega Server для esp8266

Сообщение nick7zmail » Чт май 26, 2016 8:12 pm

Добрался до esp-шки... Залил прошивку сервера - все норм летает...20-70 мс выдаёт строку. А в случае с wificlient ты как смотришь скорость?
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm
Благодарил (а): 42 раза
Поблагодарили: 262 раза

Re: Arduino Mega Server для esp8266

Сообщение Alex » Чт май 26, 2016 8:40 pm

Всё правильно, если сервер ESP8266WebServer, то он летает потому, что использует другой механизм отдачи клиенту, а нам нужно, чтобы заработал

Код: Выделить всё

client.write(buff, rsize); 
или его эквивалент.

Меряю, например, так:

Код: Выделить всё

                  unsigned long startWrite = millis();
                  sclient.write(b);
                  unsigned long longWrite = millis() - startWrite;
                  Serial.print("*** WRITE: ");
                  Serial.println(longWrite);
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

Re: Arduino Mega Server для esp8266

Сообщение nick7zmail » Чт май 26, 2016 9:23 pm

А в чем собственно проблема то? Это как раз время передачи по сети 1го байта информации. В начале ESP-шка была соединена с каким-то сервером в инете (из примера). До него write шел примерно 150-160 мс. Ради эксперимента указал свой роутер (самый короткий путь)) write стал проходить за 2-5 мс. До сервера МД - 50 мс. По-моему все логично...чем дальше пункт назначения и медленнее интернет - тем дольше идет пакет. Или я чего-то не допонимаю?
Вложения
test.jpg
test.jpg (29.42 КБ) 10965 просмотров
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm
Благодарил (а): 42 раза
Поблагодарили: 262 раза

Re: Arduino Mega Server для esp8266

Сообщение Alex » Пт май 27, 2016 7:10 am

Проблема в том, что АМС отдаёт данные клиенту на всех платформах со скоростью 70 КБ в секунду, а на ESP8266 — со скоростью 0.6 КБ в секунду, что примерно в 100 раз медленнее.

Виновник чётко определён — это стандартная функция

Код: Выделить всё

client.write();
которая на всех платформах работает менее 1 миллисекунды, а в реализации на ESP8266 ровно 200 миллисекунд.

У меня есть интуитивное предположение, что отрабатывает она также быстро, а 200 миллисекунд это какой-то флаг, которого она ждёт.
Вложения
200.jpg
200
200.jpg (48.54 КБ) 10933 просмотра
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

Re: Arduino Mega Server для esp8266

Сообщение nick7zmail » Пт май 27, 2016 7:21 am

Alex писал(а):Проблема в том, что АМС отдаёт данные клиенту на всех платформах со скоростью 70 КБ в секунду, а на ESP8266 — со скоростью 0.6 КБ в секунду, что примерно в 100 раз медленнее.

Виновник чётко определён — это стандартная функция

Код: Выделить всё

client.write(); 
которая на всех платформах работает менее 1 миллисекунды, а в реализации на ESP8266 ровно 200 миллисекунд.

У меня есть интуитивное предположение, что отрабатывает она также быстро, а 200 миллисекунд это какой-то флаг, которого она ждёт.
Скинь код, который так тормозит. Ибо я не смог повторить ситуацию)).
Я открыл стандартный сэмпл (wifiClient вроде назывался), в него воткнул твой код

Код: Выделить всё

                  unsigned long startWrite = millis();
                  client.write(55);
                  unsigned long longWrite = millis() - startWrite;
                  Serial.print("*** WRITE: ");
                  Serial.println(longWrite); 
Получил отклик 2 мс (на скрине в предыдущем сообщении)...

PS: Т.к. это время зависит от сервера, на который осуществляется запись, есть предположение, что client.write ждет окончание записи. Нужно просто отключить цикл ожидания в этой функции (если он там есть). Дома покапаю библиотеку...там должно это быть.
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm
Благодарил (а): 42 раза
Поблагодарили: 262 раза

Re: Arduino Mega Server для esp8266

Сообщение Alex » Пт май 27, 2016 8:27 am

Стандартный пример WiFiWebServer. Проблема очевидна.

Код во вложении.
Вложения
201.png
200 миллисекунд
201.png (28.24 КБ) 10919 просмотров
WiFiWebServer.zip
WiFiWebServer
(1.19 КБ) 255 скачиваний
Ответить