Sming Open Source Framework для нативной разработки прошивок ESP8266

JustACat

Moderator
Команда форума
тесной интеграции и удобных оберток к MQTT
Тогда может имеет смысл посмотреть в реализацию MQTT как раз под Arduino? Например.
Сам MQTT пока не пользовал нигде, так что ничего не скажу.
Но то, что MQTT вполне пригодилось бы - это факт, можно было бы и к openHub цеплять да и мало ли куда еще.
 

JustACat

Moderator
Команда форума
Victor, эм, ну я чисто для примера привел, а так можно и любой другой. Хотя, если не обновлялся - не значит, что умер, вполне возможно, что он отработан и работает :)
Например, в этой статье на хабре его используют, статья недавняя.

Да, вот даже если пройти по ссылкам на офф сайте mqtt.org, то попадем сюда:
https://github.com/mqtt/mqtt.github.io/wiki/libraries - и там тоже ссылка на эту "либлиотеку". И еще на кучу других реализаций на всяких языках.
 

pvvx

Активный участник сообщества
Про SDK, не подскажу, а в коде проблем возникнуть не должно, используется подход аналогичный Lua прошивкам - ищем точку окончания кода прошивки, добавляем отступ и выравнивание, после этого все остальное (кроме служебных секторов настроек в самом конце) - это область файловой системы, она форматируется. Можете посмотреть подробнее тут:
Посмотрел. От конца Flash отнимается 4-ре сектора и вниз до кода. На lau и не слышно было, чтобы кто-то подтвердил, что там работает Flash более 1 MegBytes. И на SDK нет ld файлов более 1 Mb, и кэш кончается на этих 1 Mb, а перепрограмирование установок кэширования после ROM-BIOS я пока не находил.
Адреса для этих 4-рех секторов в SDK пишутся не по размеру в заголовке flash, а по размеру указанному в структуре, переданной от ROM-BIOS. В eagle.rom.addr.v6.ld она значится как flashchip и является указателем на структуру SpiFlashChip, описанную в spi_flash.h. Там и находится uint32 chip_size; // chip size in byte и другие размеры - секторов и прочего, а не как у Lua в define.
Более этого адреса (chip_size) функции spi_flash_xxx не работают и возвращают ошибку. Он является ограничителем всех функций работы с flash в ROM-BIOS. От него и отнимается пару секторов для записи конфигурации SDK. Если его изменить, то это позволяет иметь доступ до физического ограничения передаваемого адреса по стандартному протоколу SPI в Flash.
И проблема с большими Flash давно решена, кроме как у Lua, NodeMCU и их клонов: перед обращением к процедурам flash изменяете chip_size на предел, а по окончанию - возвращаете значение.
Пример:
Код:
SpiFlashOpResult spi_flash_rd_16m(uint32 src_addr, void *des_addr, uint32 size) {
    flashchip->chip_size = SIZE_MAX_FLASH;
    SpiFlashOpResult ret = spi_flash_read(src_addr, (uint32 *) des_addr, size);
    flashchip->chip_size = SIZE_MIN_FLASH;
    return ret;
}
Тем самым сохранение SDK делает на SIZE_MIN_FLASH - 4 сектора, а вы работаете со всей Flash, от 512K до 16M.
При указании 16M сразу и навсегда в flashchip->chip_size, SDK начинает сохранять настройки в 16M-4 сектора, но при старте будет грузить их с указанного flashchip->chip_size - 4 сектора. :) По тому ставите всегда и везде 512K (в программаторе и заголовке flash) и в диске у вас будет дырка в эти 4-ре сектора, которую придется обходить... Реальный размер Flash определяете по повтору паттерна в дцать байт, взятого к примеру в начале flash. Смотрите на совпадение в 512K умноженному на 2, 4, 8, 16, 32 (512K <<= 1). Все мелкие flash повторяются по кругу.
Это единственное рабочее и многократно проверенное решение.
 
Последнее редактирование:

JustACat

Moderator
Команда форума
Сейчас должно собираться правильно и под старой версией SDK и под новой.
Ув. @anakod, я сделал следующее:
- поставил UDK последней актуальной на данный момент версии 1.0.12 (как я понимаю, в нем сейчас SDK 0.9.5), точнее сказать, UDK уже стоял этот у меня
- из eclipse выпилил примеры, которые идут с UDK (путем выделения и удаления :))
- скачал с гитхаба вашу последнюю (на данный момент) версию Sming (последний комит по пул-реквесту около 7 часов назад)
- распаковал ее на диск C (получилось C:\Sming\README.md для примера)
- в eclipse импортировал примеры (а точнее всю папку C:\Sming\)
- при попытке скомпилировать Basic_Blink (или любой другой) получаю ту же ошибку, что и @CHERTS, ругается на файл:
c:/Espressif/ESP8266_SDK/include/lwip/ip_addr.h ... ... ...

И тут умом я конечно понимаю, что могу подправить сам файл c:/Espressif/ESP8266_SDK/include/lwip/ip_addr.h , даже представляю, что поправить.
Но я же вижу, что в папке Sming такой файл тоже присутствует в инклюдах (причем там он правильный), то есть я делаю вывод (учитывая ваши слова), что правильным решением было бы заставить компилятор брать ваш файл вместо того, что в папке ESP8266_SDK от UDK.

И вот теперь вопрос: как решить проблему правильнее всего?
Исправить файл c:/Espressif/ESP8266_SDK/include/lwip/ip_addr.h ?
Или все же ковыряться с чем-то (наверное, с makefile), чтобы заставить компилятор брать ваши файлы вместо тех, что лежат в ESP8266_SDK ?
Или может просто дождаться, пока вы совместно с @CHERTS соберете что-то цельное и со всех сторон замечательное? :)

И извините, что отнимаю время глупыми вопросами, просто уж очень руки чешутся хоть что-то собрать и попробовать запустить, прямо мочи нету... :)

Update:
Код:
10:07:03 **** Build of configuration Default for project Basic_Blink ****
mingw32-make.exe -f C:/Sming/Basic_Blink/Makefile all
C+ ../Sming/system/stringconversion.cpp
In file included from c:/Espressif/ESP8266_SDK/include/user_interface.h:11:0,
                 from ../Sming/system/include/esp_systemapi.h:10,
                 from include/user_config.h:29,
                 from ../Sming/system/stringconversion.cpp:1:
c:/Espressif/ESP8266_SDK/include/lwip/ip_addr.h:213:23: error: invalid suffix on literal; C++11 requires a space between literal and identifier [-Werror=literal-suffix]
   LWIP_DEBUGF(debug, ("%"U16_F".%"U16_F".%"U16_F".%"U16_F,             \
                       ^
c:/Espressif/ESP8266_SDK/include/lwip/ip_addr.h:213:31: error: invalid suffix on literal; C++11 requires a space between literal and identifier [-Werror=literal-suffix]
   LWIP_DEBUGF(debug, ("%"U16_F".%"U16_F".%"U16_F".%"U16_F,             \
                               ^
c:/Espressif/ESP8266_SDK/include/lwip/ip_addr.h:213:40: error: invalid suffix on literal; C++11 requires a space between literal and identifier [-Werror=literal-suffix]
   LWIP_DEBUGF(debug, ("%"U16_F".%"U16_F".%"U16_F".%"U16_F,             \
                                        ^
c:/Espressif/ESP8266_SDK/include/lwip/ip_addr.h:213:49: error: invalid suffix on literal; C++11 requires a space between literal and identifier [-Werror=literal-suffix]
   LWIP_DEBUGF(debug, ("%"U16_F".%"U16_F".%"U16_F".%"U16_F,             \
                                                 ^
cc1plus.exe: all warnings being treated as errors
C:/Sming/Basic_Blink/Makefile:329: recipe for target 'out/build/../Sming/system/stringconversion.o' failed
mingw32-make.exe: *** [out/build/../Sming/system/stringconversion.o] Error 1

10:07:03 Build Finished (took 490ms)

И, если просто переименовать каталог:
C:\Espressif\ESP8266_SDK\include\lwip
в
C:\Espressif\ESP8266_SDK\include\lwip_ (например)
То проекты сразу начинают нормально собираться:
Код:
10:04:07 **** Build of configuration Default for project Basic_Blink ****
mingw32-make.exe -f C:/Sming/Basic_Blink/Makefile all
C+ ../Sming/system/stringconversion.cpp
CC ../Sming/system/flashmem.c
C+ ../Sming/system/esp_cplusplus.cpp
C+ ../Sming/Wiring/WShift.cpp
C+ ../Sming/Wiring/WMath.cpp
C+ ../Sming/Wiring/SplitString.cpp
C+ ../Sming/Wiring/WString.cpp
C+ ../Sming/Wiring/Stream.cpp
C+ ../Sming/Wiring/Print.cpp
C+ ../Sming/Wiring/I2cMaster.cpp
C+ ../Sming/Wiring/IPAddress.cpp
C+ ../Sming/SmingCore/SPI.cpp
C+ ../Sming/SmingCore/HardwareSerial.cpp
C+ ../Sming/SmingCore/DataSourceStream.cpp
C+ ../Sming/SmingCore/Wire.cpp
C+ ../Sming/SmingCore/Clock.cpp
C+ ../Sming/SmingCore/PWM.cpp
C+ ../Sming/SmingCore/Digital.cpp
C+ ../Sming/SmingCore/Interrupts.cpp
C+ ../Sming/SmingCore/ESP8266EX.cpp
C+ ../Sming/SmingCore/FileSystem.cpp
C+ ../Sming/SmingCore/Timer.cpp
C+ ../Sming/SmingCore/Network/HttpServer.cpp
C+ ../Sming/SmingCore/Network/TcpClient.cpp
C+ ../Sming/SmingCore/Network/HttpRequest.cpp
C+ ../Sming/SmingCore/Network/TcpConnection.cpp
C+ ../Sming/SmingCore/Network/HttpResponse.cpp
C+ ../Sming/SmingCore/Network/URL.cpp
C+ ../Sming/SmingCore/Network/HttpServerConnection.cpp
C+ ../Sming/SmingCore/Network/HttpClient.cpp
C+ ../Sming/SmingCore/Network/NetUtils.cpp
C+ ../Sming/SmingCore/Network/TcpServer.cpp
C+ ../Sming/SmingCore/Platform/System.cpp
C+ ../Sming/SmingCore/Platform/AccessPoint.cpp
C+ ../Sming/SmingCore/Platform/Station.cpp
CC ../Sming/Services/SpifFS/spiffs.c
CC ../Sming/Services/SpifFS/spiffs_hydrogen.c
CC ../Sming/Services/SpifFS/spiffs_check.c
CC ../Sming/Services/SpifFS/spiffs_nucleus.c
CC ../Sming/Services/SpifFS/spiffs_gc.c
CC ../Sming/Services/SpifFS/spiffs_cache.c
C+ ../Sming/Services/ArduinoJson/ArduinoJson.cpp
C+ ../Sming/Services/WebHelpers/escape.cpp
C+ ../Sming/Services/WebHelpers/base64.cpp
C+ ../Sming/Services/DateTime/DateTime.cpp
C+ ../Sming/appinit/user_main.cpp
C+ app/application.cpp
C+ ../Sming/Libraries/DHT/DHT.cpp
C+ ../Sming/Libraries/LiquidCrystal/LiquidCrystal_SR.cpp
C+ ../Sming/Libraries/LiquidCrystal/LiquidCrystal_SR3W.cpp
C+ ../Sming/Libraries/LiquidCrystal/LiquidCrystal.cpp
C+ ../Sming/Libraries/LiquidCrystal/LCD.cpp
C+ ../Sming/Libraries/LiquidCrystal/LiquidCrystal_SR2W.cpp
C+ ../Sming/Libraries/LiquidCrystal/I2CIO.cpp
C+ ../Sming/Libraries/LiquidCrystal/LiquidCrystal_I2C.cpp
C+ ../Sming/Libraries/LiquidCrystal/FastIO.cpp
C+ ../Sming/Libraries/Bounce/Bounce.cpp
CC ../Sming/Libraries/Adafruit_GFX/glcdfont.c
C+ ../Sming/Libraries/Adafruit_GFX/Adafruit_GFX.cpp
C+ ../Sming/Libraries/TFT_ILI9163C/TFT_ILI9163C.cpp
C+ ../Sming/Libraries/BMP180/BMP180.cpp
C+ ../Sming/Libraries/BH1750FVI/BH1750FVI.cpp
C+ ../Sming/Libraries/Adafruit_SSD1306/Adafruit_SSD1306.cpp
C+ ../Sming/Libraries/OneWire/OneWire.cpp
C+ ../Sming/Libraries/I2Cdev/I2Cdev.cpp
C+ ../Sming/Libraries/HMC5883L/HMC5883L.cpp
AR out/build/app_app.a
LD out/build/app.out
Run objcopy, please wait...
objcopy done
Run gen_appbin.exe
No boot needed.
Generate eagle.flash.bin and eagle.irom0text.bin successully in folder out/firmware.
eagle.flash.bin-------->0x00000
eagle.irom0text.bin---->0x10000
Done

10:04:25 Build Finished (took 17s.633ms)

А значит действительно что-то с путями или порядком обращения к папкам в makefile не так...

Update 2:
Проверил все примеры из Sming - с переименованной папкой lwip все компилируются успешно. (в работе пока не проверял)
Но меня все равно продолжает мучить чувство, что компилятор берет что-то еще ненужное из старого SDK, который пока в комплекте с UDK.
 
Последнее редактирование:

anakod

Moderator
Команда форума
Да, опять недоглядел (т.к. у меня самого поправленный файл), видимо порядок включения срабатывает не верно.

Самое простое обновиться до последней версии есп сдк (можно скачать здесь же на сайте - на главной) или просто временно переименовать/заменить папку, как Вы и сделали.
 

verzi

New member
MeteoControl собирается, прошивается, но похоже без html файлов. Какую бы страницу ни запрашивал, всегда вижу "404 Not Found".
HttpServer_Bootstrap вроде работает, но html страничку тянет с сайта разработчика.
Ну а в целом это конечно очень большой шаг вперед после Nodemcu с ее прожорливостью и творением уважаемого pvvx, которое у меня, как не очень продвинутого программиста вызывает тихий ужас. Своей непонятностью разумеется :)
 
Последнее редактирование:

anakod

Moderator
Команда форума
HTML файлы на данный момент всегда тянуться с внешнего сайта при первом запуске, по той причине, что пока альтернативных вариантов закачивать файлы в файловую систему мало :) Это планируется изменить в будущем, а пока проще всего прописать название/пароль Вашей сети в соответствующие константы кода перед заливкой прошивки, тогда все отработает автоматически.
 

Victor

Administrator
Команда форума
Уважаемые форумчане!
С согласия автора этого замечательного проекта создан отдельный раздел
Sming Open Source Framework
Для удобства, предлагаю продолжить обсуждение всех вопросов по этой теме по общепринятому принципу - "один вопрос-один топик" в новом разделе. Надеюсь, что вы и новые будущие члены нашего сообщества сочтут такой подход более удобным.

Заранее спасибо вам за понимание.
 

aloika

Active member
anakod, ваше творение - это просто чудо какое-то, это очень, очень круто, то что вы делаете. Огромное вам спасибо, главное, не останавливайтесь :)

HTML файлы на данный момент всегда тянуться с внешнего сайта при первом запуске
У меня почему-то не тянутся. Похоже, с сайтом что-то случилось, и файлов там теперь нет (для проекта HttpServer_Bootstrap).

Update: утянулись. Но я даже не понял, когда это произошло. Запустилось, когда я закомментировал последнее условие вот так:

Код:
    if (!fileExist("index.html")  || !fileExist("bootstrap.css.gz") /* || !fileExist("jquery.js.gz") */)
    {
        // Download server content at first
...
Что это означает? Последний файл не утянулся? Или не влез? Или его на сервере (в интернете) нет?

Вообще, конечно, тут надо подумать, как лучше работать с HTML-файлами в таких условиях. Поднять под Windows web-сервер, писать страничку, закидывать ее на сервер, потом при старте прошивки проверять ее на новизну и загружать, если она новая? Но это очень уж неудобно.

В качестве пожелания - надо продумать, как удобно работать с диском.

Еще было бы здорово, если бы были примеры простейших веб-страничек. Страничка с кнопкой, с отображением значения переменной и т.д. С отображением значения переменной так, чтобы при изменении ее в модуле, она менялась и на страничке. Это для таких товарищей как я, далеких от HTML вообще.

Еще надо бы пример по поднятию TCP-сервера и по TCP-клиенту.
 
Последнее редактирование:

JustACat

Moderator
Команда форума
С согласия автора этого замечательного проекта создан отдельный раздел
Ну и отличненько! :)

Что это означает? Последний файл не утянулся? Или не влез? Или его на сервере (в интернете) нет?
Код:
if (!fileExist("index.html")  || !fileExist("bootstrap.css.gz") || !fileExist("jquery.js.gz")){
    ...
}
Если не существует файл index.html или не существует файл bootstrap.css.gz или не существует файл jquery.js.gz то {
    делаем то, что у нас тут (а тут у нас, емнип, команда на запуск закачки файлов с внешнего сервера)
}
В варианте:
Код:
if (!fileExist("index.html")  || !fileExist("bootstrap.css.gz") /* || !fileExist("jquery.js.gz") */)
Вы просто убрали из условия последнее "если", и это, по идее, никак не могло вызвать тот результат, который вы описываете.
Скорее всего это совпадение.
Например: вы закоментили последнее если, этим заставили компилятор скомпилировать прошивку по новой, и залить ее по новой в камень, что в итоге обнулило в нем файлы и заставило перескачать их (а при первом скачивании, возможно, произошел некий сбой).
Либо, просто вы не дождались скачивания в 1 раз.
Это все, имхо, конечно, но мне кажется так...

aloika, от себя лично скажу (вы токмо не обижайтесь), все же работа с диском и тем более как загружать странички - имхо, не первоочередное.
Потому что есть уже у нас разработка от @pvvx - да, она сложнее, но она есть, а при этом web-server на ESP нужен далеко не всем, если проводить ту же аналогию с Arduino, я, например, вижу массу других применений для ESP и работы ее вкупе с мастером, и весь этот HTTP на ней, имхо, перебор :)
Еще было бы здорово, если бы были примеры простейших веб-страничек.
Ну и это тоже, по-моему, перебор... Откройте htmlbook.ru (сам им пользуюсь) и там этих примеров страничек и документации по html море просто :) Зачем ее дублировать?

@aloika, вы только не примите в штыки, я всего лишь пытаюсь донести следующую важную мысль: у нас пока что один разработчик всего этого огромного пакета - @anakod .
И мне лично хотелось бы, чтобы он, как основоположник всего этого, кто лучше всех разбирается во всем проекте в целом (во всех его тонкостях и нюансах), решил сначала вопросы, связанные с общей работой проекта:
- простая установка и запуск (включая установку среды для этого, пусть это будет тот же UDK от @CHERTS - но установку нужно упростить, т.к. сейчас она вообще не тянет на простоту аналогичную Arduino)
- общая документация, больше и развернутее
- примеры создания своих проектов
- отлов возможных каких-то ошибок

Другими словами: все то, что могло бы привлечь потенциальных пользователей в этот проект, а они в свою очередь уже бы стали заниматься частными вещами: отдельными примерами, библиотеками - все как в ардуино. Ведь там как раз сложившееся комьюнити в итоге наплодило кучу целую библиотек и примеров кода.
В одиночку @anakod'у разрабатывать и поддерживать целую кучу примеров, думаю, не просто будет. Я ни в коем разе не преуменьшаю его возможности, знания и умения, просто не вижу в этом особого смысла.

Давайте лучше доведем общие моменты до ума, выловим ошибки, продумаем как упростить старт на этой системе для новичков, а затем все вместе возьмемся за частные примеры/библиотеки/драйверы устройств?
Что скажете?

PS: как предложил @Victor: думаю, стоит разнести частные вопросы (и тем более вопросы по конкретным примерам из Sming) по отдельным темам в этот наш новый раздел форума: http://esp8266.ru/forum/forums/Sming-Open-Source-Framework/
@aloika, создайте, пожалуйста, отдельные темы по вашим вопросам.
Я уже создал две профильные темы в разделе http://esp8266.ru/forum/forums/Sming-Open-Source-Framework/ это "Запрос библиотек/драйверов" и "Запрос примеров" - можете отписаться в них.
Давайте вместе наведем порядок :)
 

anakod

Moderator
Команда форума
Написал FTP, комит есть, подробности позже. Стоит пошлифовать.
 

CHERTS

Moderator
Команда форума
А как Вы нашли его до анонса, если не секрет?
Я мониторю каждый день github на предмет появления и изменения в проектах связанных с esp8266, собственно по слову esp8266 находится очень много всего, далее сортируем по последнему обновлению и видим все свежее. Ну а так же у меня склонировано куча репов с кодом, каждый день проверяются в них обновления, если что есть, сразу видно какой проект живой, какой мертвый.
 

aloika

Active member
Вы просто убрали из условия последнее "если", и это, по идее, никак не могло вызвать тот результат, который вы описываете.
Это понятно, что я убрал, я как раз и говорю о том, что на тот момент было непонятно, что именно произошло - или файла нет на диске ESP, или его нет на сервере в инете, или еще что. И никак по-простому это было не выяснить.

Но когда это:
заработает, думаю, будет все по-другому :)

aloika, от себя лично скажу (вы токмо не обижайтесь), все же работа с диском и тем более как загружать странички - имхо, не первоочередное.
Потому что есть уже у нас разработка от @pvvx - да, она сложнее, но она есть, а при этом web-server на ESP нужен далеко не всем, если проводить ту же аналогию с Arduino, я, например, вижу массу других применений для ESP и работы ее вкупе с мастером, и весь этот HTTP на ней, имхо, перебор :)
Я ни в коем случае не обижаюсь, пишите мне все, что думаете :)
А я считаю, что как раз HTTP и все такое - это именно то, что отличает ESP от Ардуино. Работу со всякими датчиками и экранами я и на Атмеле запрограммирую. И возможностей там в этом плане больше - и ног, и АЦП с диф. входами и усилителями, и проч. и проч. А здесь ключевое- это именно все, что связано с Wi-Fi, серверами, клиентами, HTTP.

@aloika, вы только не примите в штыки, я всего лишь пытаюсь донести следующую важную мысль: у нас пока что один разработчик всего этого огромного пакета - @anakod .
И мне лично хотелось бы, чтобы он, как основоположник всего этого, кто лучше всех разбирается во всем проекте в целом (во всех его тонкостях и нюансах), решил сначала вопросы, связанные с общей работой проекта:
- простая установка и запуск (включая установку среды для этого, пусть это будет тот же UDK от @CHERTS - но установку нужно упростить, т.к. сейчас она вообще не тянет на простоту аналогичную Arduino)
- общая документация, больше и развернутее
- примеры создания своих проектов
- отлов возможных каких-то ошибок
@anakod немеряно крут :), с этим никто не спорит, и этот проект, как мне кажется, выкладывается на этот форум как раз для того, чтобы кто-нибудь посмотрел на это все свежим, не замыленным взглядом и высказал свои мысли и пожелания. Вот я и высказываю, с точки зрения своего, чайниковского вИдения. Ну и воспринимать эти мысли нужно соответственно.

Ну и это тоже, по-моему, перебор... Откройте htmlbook.ru (сам им пользуюсь) и там этих примеров страничек и документации по html море просто :) Зачем ее дублировать?
Тут речь не о том, как сделать красиво. Речь о том, как взаимодействовать из странички с модулем. Например, лично меня очень интересует вопрос, на который я пока не могу найти ответ - а можно как-нибудь отображать, например, значение переменной (допустим, состояние входа) на страничке динамически, т.е. если состояние входа изменится, чтобы сразу же изменилось и значение в веб-интерфейсе (без перезагрузки странички). Я в одном проекте использую для этого веб-сокеты, на сервере (на cubieboard) под openwrt запущена питоновская программа - tornado сервер, и так далее. Тут принципиальный вопрос - можно ли на этом модуле вообще делать интерфейсы-пульты, т.е. интерфейсы, которые в реальном времени что-нибудь отображают и чем-нибудь управляют, а не только странички, предназначенные для настройки - куча полей ввода и кнопка "Применить". В проекте pvvx есть странички, которые графики рисуют в реальном времени - как-то же это делается, значит.

Вот я и высказал пожелание, что было бы здорово, если бы были примеры таких страничек, предельно простых, без лишнего, чтобы не гадать - это для основной функциональности, или для чего-то еще, убрать забыли.
 

JustACat

Moderator
Команда форума
А здесь ключевое- это именно все, что связано с Wi-Fi, серверами, клиентами, HTTP.
Так Wi-Fi, сервера и клиенты - это да - это очень важно и полезно. А вот HTTP - это частность. HTTP - это для веб-серверов. А веб-сервера по определению должны быть на мощном железе.
Думаю, ESP к мощному железу отнести точно не выйдет.
И я ничего против HTTP не имею, просто это очень уж действительно частный пример для такого слабенького железа...
Где-то мы тут обсуждали уже так: есть у вас дома 10 розеток, в каждой по ESP и в каждой по Web-server'у? Зачем? =)
Но в любом случае - дело конечно ваше.
Хотя как по мне: ESP (пусть в каждой розетке) работают с неким мастером, тот же кубитрак/кубиборд взять, либо еще что-то подобное. Работают они с этим мастером по какому-то более оптимальному протоколу, тот же MQTT к примеру, либо что-то еще. А уж на мастере поднимайте нормальный веб-сервер, делайте любые удобные/красивые/быстрые интерфейсы - все будет летать.

Вот я и высказываю, с точки зрения своего, чайниковского вИдения.
Ну, это понятно, что все мы лишь делимся своим мнением, это и правильно в общем-то. Пусть @anakod в итоге выбирает/решает, что делать :)
А так, я там создал несколько подтемок соседних, вот в них формируйте свои запросы лучше. И структурировано - это тоже будет помощь @anakod'у.

меня очень интересует вопрос, на который я пока не могу найти ответ
Ну, раз вас интересует решение связанное с вебом, то оно из веба и тырится:
Берем страничку html + стили, добавляем к ней jquery (его, кстати, можно со стороннего сервера подгружать, тогда не нужно будет его пихать в ESP), добавляем наш собственный скрипт на js, который шлет периодически get (post) запросы по ajax технологии на esp, которая в ответ на них выдает уже чисто данные (без html), лучше в json (он же вроде тоже включен), ну и дальше на js это обрабатывается и подставляется в табличку на этой же выданной ранее страничке, либо там рисуется (можно применить svg) что-то, в общем, как-то так.
Но опять же - это не имеет прямого отношения к ESP...
С ней все стандартно: реализуем ответ на какой-то запрос, и в этот ответ вставляем некие данные (пусть это будут состояния пинов) в некоем формате (пусть будет json). Все. Все остальное - это HTML+CSS+JS+jQuery+Ajax+Json - это все лучше отладить отдельно - поставить на ПК веб-сервер локальный, и на нем попробовать реализовать это все (не трогая пока что ESP), а как разберетесь - тогда и в ESP можно будет запихать.
Если по этой теме что-то интересно будет - обращайтесь, попробую помочь, чем смогу, но это точно не в теме Sming...
 

pvvx

Активный участник сообщества
Речь о том, как взаимодействовать из странички с модулем. Например, лично меня очень интересует вопрос, на который я пока не могу найти ответ - а можно как-нибудь отображать, например, значение переменной (допустим, состояние входа) на страничке динамически, т.е. если состояние входа изменится, чтобы сразу же изменилось и значение в веб-интерфейсе (без перезагрузки странички).
Обычно решается через AJAX . Пример управления всеми пинами чипа вставлен в версию от 0.1.5.
А вот HTTP - это частность. HTTP - это для веб-серверов. А веб-сервера по определению должны быть на мощном железе.
Сервер MQTT - тоже. Но в стандартных роутерах mqtt broker-а нет :( Аналогично нет никакого ПО для работы с внешними устройствами IoT в стандартных бытовых устройствах, включая телефоны с android. В итоге для реализации простого умного дома или системы опроса множества датчиков для малой домашней поделки необходимо ещё разработать, создать и/или оплачивать сторонний сервер со специализированным ПО.
Всё это временное явление и делать такое для домашних поделок не рекомендуется, т.к. данную нищу скоро заполнят нормальные решения от больших корпораций.
Остаются только временные и очень специализированные проекты. Например использование модуля как датчика напряжения аккумулятора или ещё чего в авто, пока индустрия это решила.
Делать умный дом с десятком модулей на WiFi нельзя. Сеть и так забита. Это уже многократно где рассмотрено.
Оставшиеся варианты в большинстве случаев решаются через установку на модуле примитивного Web. ИМХО.

PS: Реализации Chunked HTTP передачи в данной библиотеке я не нашел.
 
Последнее редактирование:

anakod

Moderator
Команда форума
Напишу подробнее по всем накопившемся вопросам:

На lau и не слышно было, чтобы кто-то подтвердил, что там работает Flash более 1 MegBytes
Мне кажется целевая аудитория Луа прошивки редко самостоятельно перепаивает флеш :) и вполне вероятно что со стороны программной части проблемы нет, но не проверив сказать ничего нельзя, а у меня к сожалению нет на руках нестандартных флеш контроллеров.

И на SDK нет ld файлов более 1 Mb, и кэш кончается на этих 1 Mb, а перепрограмирование установок кэширования после ROM-BIOS я пока не находил.
Думаю для кода этого точно хватит, а вот пользовательские файлы было бы интересно хранить в большем пространстве (или без зеркалирования ломается вообще любой доступ к адресам?). Вы в этой теме лучше разбираетесь может расскажете поподробнее как работает кеш и доступ к флешу из кода?

По тому ставите всегда и везде 512K (в программаторе и заголовке flash) и в диске у вас будет дырка в эти 4-ре сектора, которую придется обходить... Реальный размер Flash определяете по повтору паттерна в дцать байт, взятого к примеру в начале flash
Все таки было бы куда лучше если бы исправлением багов в SDK занимались разработчики SDK. Я за четкое разделение кода по уровням абстракции. Вот только как их в эту сторону пнуть? :)

Да, опять недоглядел (т.к. у меня самого поправленный файл), видимо порядок включения срабатывает не верно.
По результатам тестов пришел к выводу что порядок компиляции не поможет, берется ближайший файл. Поэтому пока только варианты брать оригинальное СДК 1.0 (в нем нет lwip), переименовывать папку руками или дождаться апдейта от уважаемого CHERTS. Как временное решение написал об этом в readme, но пока только костыли к сожалению :(
Можно еще, конечно, отказаться от Си++11, он тут не сильно нужен, но все же это явно как то не очень хорошая идея.

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

данную нищу скоро заполнят нормальные решения от больших корпораций.
Вот именно пока они не заполнили, здесь действительно интересно и есть где развернуться, разве нет? :)
 

JustACat

Moderator
Команда форума
Вот только как их в эту сторону пнуть?
Боюсь, что их пнуть куда-то, куда нужно именно нам - очень сложно, если вообще реально, увы :(

брать оригинальное СДК 1.0 (в нем нет lwip)
Я у себя в итоге как раз заменил в UDK старый SDK 095 на новый 100. Вроде все работает как надо.

у меня к сожалению нет на руках нестандартных флеш контроллеров
Может приобретете? Если дело в средствах, думаю, было бы не плохо организовать кнопочку Donate (как у @CHERTS в UDK). Конечно не настаиваю ни в коем разе.
 
Сверху Снизу