• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Web сервер через esp8266

Николай

New member
Умный народ, пните меня в нужном направлении.:)
Пытаюсь реализовать веб админку для устройства на STM32 +esp8266
esp8266 в режиме TCP сервера.
AT+CIPSEND принимает в параметр номер соединения и (внимание) размер данных для передачи.
При отправке статических http страниц проблем не возникает, их размер известен.
Но при создании страницы ДИНАМИЧЕСКИ, ее размер же заранее не известен, что передавать в AT+CIPSEND?
Думал с начало писать страницу в буфер а потом его слать, но так боюсь не хватит оперативки...
И еще, кто знает какой максимальный размер данных может принять AT+CIPSEND?
 

TRO

Member
Может указать заранее бОльшее значение, потом в процессе отправки считать сколько отправили, и в конце добивать пустышками до нужного значения.
 

JustACat

Moderator
Команда форума
Николай, укажите еще, пожалуйста, какой у вас stm, какая версия прошивки на ESP.
кто знает какой максимальный размер данных может принять AT+CIPSEND?
Документация знает, в который раз повторяю - читайте документацию ;) (ссылка у меня в подписи)
В файле 4A-AT-Espressif AT Instruction Set_v0.22.pdf по команде AT+CIPSEND написано: MAX 2048 bytes

Ну и еще предположение: а нельзя ли выслать страничку в несколько заходов?
То есть отправить посредством нескольких вызовов AT+CIPSEND?
Или браузер это неправильно воспринимает?
Просто мне подсказывает логика, что браузер должен принимать страничку вплоть до того момента, пока вы соединение не закроете по AT+CIPCLOSE - хотя это лишь предположение, я не проверял. Если ошибаюсь - прошу прощения.

Тем более, что с буфером в 2048 bytes уложить одну страничку в один CIPSEND трудновато будет. 2 кило всего лишь - это мало совсем, и мне кажется, что в STM32 RAM явно больше 2 кило...
 

Николай

New member
МК у меня ST32F103RE, а вот версию прошивки не скажу сразу, буду дома посмотрю версию и конкретно какой модуль ESP использую.
То есть отправить посредством нескольких вызовов AT+CIPSEND?
Идея хорошая, попробую. Замечал раньше что пока AT+CIPCLOSE не отослал, браузер грузил все еще, хотя страница уже появилась. AT+CIPCLOSE отослал - браузер остановился. По симптомам похоже JustACat, вы правы.
Вечером опробую.
 

Николай

New member
Модуль esp-03, прошивка 0018000902-AI03, это его прошивка с завода, не на что не прошивал. JustACat оказался полностью прав! Спасибо за подсказку! По AT+CIPSEND можно отсылать данные пока не надоест. Сигнал браузеру о том что вся страница получена это закрытие соединения, т.е. AT+CIPCLOSE. Проблема темы думаю решена. Еще раз спасибо JustACat за идею!
Может подскажет кто, какие есть модули wifi по скоростней с интерфейсом SPI? Есть зачатки проекта в котором придется по вайфаю интернет радио играть, что то мне подсказывает что 115200 будет маловато...
 

Victor

Administrator
Команда форума
115200 будет маловато
А 921600 хватит? Проверено, работает на esp8266.
Вот сегодня скачивал файл с флеш памяти ESP8266 NodeMCU (с учетом расчета контрольной суммы и других накладных расходов)
Код:
Baud rate:921600 Size:20k Time elapsed: 2811 ms
 

JustACat

Moderator
Команда форума
Николай, и к слову сказать, у esp8266 тоже есть SPI интерфейс (она по документации еще и в режиме ведомого SPI устройства может по идее работать, то есть чисто как SPI-модуль связи, есть такое применение в документе ESP8266_Module Application Design Guide - SPI-Slave Mode), и еще много чего есть вкусного, но только не в стандартной AT прошивке :)
Так что если речь не идет об использовании исключительно в AT режиме, то esp8266, думаю, вполне справится.
по вайфаю интернет радио играть
Меня прямо любопытство разрывает: а зачем? =) То есть зачем использовать фактически embed модуль - esp8266 для совершенно не embed-задачи - проигрывание интернет радио?
Почему не взять любой китайский USB-WiFi свисток, не подключить его к нормальному какому-то ПК (может микро-ПК, ПК-на андроиде, на линуксе, тот же роутер взять какой-нить народный, типа TL-MR3020, перепрошить его на OpenWRT и делать с ним то, что вы хотите)?

PS: и уж если используете AT прошивку, то лучше обновитесь на последнюю 0.22 - это совсем не сложно.
 

pvvx

Активный участник сообщества
Просто мне подсказывает логика, что браузер должен принимать страничку вплоть до того момента, пока вы соединение не закроете по AT+CIPCLOSE - хотя это лишь предположение, я не проверял. Если ошибаюсь - прошу прощения.
Если сервер сказал "Connection: close\r\n", то да. Но это считается плохим тоном, передачи без указания длины сообщения. Динамические файлы (неизвестной длины, создающиеся на ходу) в HTTP передаются методом CHUNKED. Тем более сервер не должен закрывать соединение первым. Это приводит к тому, что будет "мало памяти", т.к. кто первый закрыл соединение, тот должен отслеживать стек TCP по нему ещё 60..120 секунд и в памяти модуля всё это время будет храниться структура по данному соединению:
Может подскажет кто, какие есть модули wifi по скоростней с интерфейсом SPI? Есть зачатки проекта в котором придется по вайфаю интернет радио играть, что то мне подсказывает что 115200 будет маловато...
SPI на модуле работает до 80 Mbit/s, модуль качает в одну сторону по TCP 1...1.2Мбайта. Для передачи потокового auidio надо использовать специальный протокол. Встроенный в модуль АЦП оцифровывает в пределе 14 бит с дискретизацией в 22000Hz (все исходники, кроме протокола для потокового audio, есть в моей свалке).

PS: Эти вопросы и ответы повторяются в каждой теме :)
 
Последнее редактирование:

Николай

New member
JustACat, заказчик не поймет, если ему принести переделанный роутер. Для себя уже закуплен роутер под OpenWRT но руки пока не дошли...
Возможно JustACat и pvvx меня не так поняли, esp8266 сам проигрывать нечего не будет, он только мост между устройством и WIFI. Протокол потокового auidio, АЦП и прочую лабуду будет выполнять что то большое и сильное, правда пока не известно что )) Скорее всего что то из Cortex®-M4.
По SPI esp8266 что то все не ясно, не нашел конкретного примера, чтоб кто то его научился использовать как ведомое устройство.
 

pvvx

Активный участник сообщества
Скорее всего что то из Cortex®-M4.
Воткните в него, в USB, что-то типа Wi-Pi и надежней, и дешевле, и меньше габариты (там всё в 4x4 мм пятне эпоксидки которой залит и приклеен весь чип к прямо в разъем USB) , и меньше кушает :)
 

Николай

New member
Да, такие мысли есть, но это пока все в теории, да и как драйвер для USB WIFI писать под Cortex®-M4 и что по скорости из этого выйдет еще вопрос.
 

JustACat

Moderator
Команда форума
заказчик не поймет, если ему принести переделанный роутер
Из роутера можно плату вынуть, не проблема вообще, да и много их сейчас есть в формфаторе именно платы, а не целого роутера, на том же ali пробегитесь, наверняка найдете, тут, действительно, обсуждалось такое уже на форуме, как заметил pvvx, хотя не так просто найти будет, наверное.
он только мост между устройством и WIFI
Вот я именно так и понял, потому и предложил esp в качестве ведомого по SPI. А то, что тут особо не рассматривалось такое на форуме - так и есть. Видимо, до вас никому пока это не было надо. Но в документации-то оно присутствует, значит возможно.
pvvx опять же приводил ранее примеры других готовых WiFi модулей, более узкой направленности, но они обычно все более дорогие.

Так что если у вас цель именно в цене: то либо разбираться с esp и не через UART и тем более не через AT прошивку... Либо, USB-WiFi свистки - и прикручивать их к вашему Cortex-M4 (случаем не STM32F4 какой-нить? :) Прямо так и вспомнилась Discovery с F4 на борту, там даже микрофон вроде был.)
Тут больше тогда вопрос к вам в том: чего вы добиться хотите и за какие деньги?

Еще раз повторюсь, у ESP кроме UART есть и SPI и I2C вполне можно реализовать. Но прошивку под ESP писать придется свою конечно же.
 

pvvx

Активный участник сообщества
Да, такие мысли есть, но это пока все в теории, да и как драйвер для USB WIFI писать под Cortex®-M4 и что по скорости из этого выйдет еще вопрос.
Драйвер из любого, что идет на Малинку (raspberry pi) - WiPi для неё и делалась... Почему требуется именно малый Cortex®-M4? Он всё равно даже вместе с ESP8266 будет стоить дороже, чем полноценный модуль с мегабайтами памяти до 500 руб и OpenWRT. http://ru.aliexpress.com/item/WHOSA...pot-JU-Router-AP-150Mbps-Wlan/1829126906.html
 

M9CoReZZka

New member
Модуль esp-03, прошивка 0018000902-AI03, это его прошивка с завода, не на что не прошивал. JustACat оказался полностью прав! Спасибо за подсказку! По AT+CIPSEND можно отсылать данные пока не надоест. Сигнал браузеру о том что вся страница получена это закрытие соединения, т.е. AT+CIPCLOSE.
В моем случае как только отослал данные браузер сам закрывает соединение и вообще чехарда твориться местами =/ причем вручную все работает. Может взглянете? код на WinAVR
 

nikolz

Well-known member
если тема про динамический размер актуальна, то предложение такое:
-------------------------------
Страницу отправляем блоками.
Первый байт блока указывает на наличие продолжения (ноль).
Если устроят блоки в 256 байт, то первый байт последнего (единственного) блока указывает число информационных байт в блоке.
 

nikolz

Well-known member
Можете смоделировать ситуацию в которой нужен этот динамический размер?
Нельзя ли обойтись подгрузкой аякс с отдельной страницы?
--------------------------------------
Динамический размер удобен для экономии объема передаваемой либо хранимой информации. Различные способы реализации такого подхода используются в различных приложениях.
В прошлой жизни я применял такие методы в сжатии информации при векторном изображении и сжатии снимков со спутников (изобретение).
В настоящее время я применяю такой подход для передачи по последовательным каналам связи информации различных форматов и различной смыслового значения.
----------------------------------
Относительно " обойтись подгрузкой аякс с отдельной страницы" я не знаю, так как такой метод не использую.
 

mir546

New member
Динамический размер удобен для экономии объема передаваемой либо хранимой информации. Различные способы реализации такого подхода используются в различных приложениях.
В прошлой жизни я применял такие методы в сжатии информации при векторном изображении и сжатии снимков со спутников (изобретение).
В настоящее время я применяю такой подход для передачи по последовательным каналам связи информации различных форматов и различной смыслового значения.
----------------------------------
Относительно " обойтись подгрузкой аякс с отдельной страницы" я не знаю, так как такой метод не использую.
Я так понимаю это примеры использования динамического размера в различных целях. Думаю подобное можно реализовать на esp, но имхо это сложней чем аякс.
А конкретно для esp есть примеры где необходимо использовать динамический размер?

"обойтись подгрузкой аякс с отдельной страницы"
аякс(AJAX) технология фоновой передачи данных в веб. Выполняется она на стороне клиента(браузер).
То есть. Мы создаём не просто html страничку, а с js(яваСкрипт) вставками.
В итоге например по адресу 192.168.4.1 будет грузится основная страница несущая основные скрипты, картинки и прочее. А уже к этой странице браузер будет добавлять информацию например со страницы 192.168.4.1/js, где она динамически изменяется.
 
Сверху Снизу