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

Общие вопросы по Arduino IDE для ESP8266

AmatorVic

New member
Добрый день. Есть вопрос по Arduino IDE for ESP8266. Вчера скачал с build-сервера с шапки ветки новую сборку. Заметил что в папке hardware\esp8266com\esp8266\variants вместо esp-01 появился generic и изменилась версия SDK. При компиляции рабочий код стал больше на 10%. После загрузки в модуль ESP-01 он не запускается. Виснет на старте.
Что я не так делаю?
Откатываюсь на прежнюю сборку - все ОК.
 

Telek

New member
А у меня новые билды вываливаются с такой ошибкой при запуске IDE
Код:
Exception in thread "main" java.lang.UnsatisfiedLinkError: jnidispatch (/com/sun
/jna/win32-amd64/jnidispatch.dll) not found in resource path
        at com.sun.jna.Native.loadNativeLibrary(Native.java:471)
        at com.sun.jna.Native.<clinit>(Native.java:91)
        at processing.app.windows.Platform.<clinit>(Platform.java:287)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:190)
        at processing.app.BaseNoGui.initPlatform(BaseNoGui.java:601)
        at processing.app.Base.initPlatform(Base.java:177)
        at processing.app.Base.main(Base.java:91)
UPD. Решил. Вынес папку java.
Начиная с 76 билда - esp не стартует.
 
Последнее редактирование:

mischaka

New member
Как воспользоватся командой ESP.wdtDisable(). Компилер пишет что не знает объекта "ESP" .
в каком include описан объект "ESP". Я не нашол, подскажите пожалуйсто.
Спасибо за многочисленные ответы :(
Сам разобрался. У меня оказалась старая версия ардуино. Скачал здес https://github.com/esp8266/Arduino и всё заработало.
 

Ivizil

New member
Что-то у меня не работают загруженные в esp(07) прошивки. Делаю всё по инструкции, скетч успешно загружается, а реакции со стороны esp никакой . Всё время создает точку доступа, зашитую ещё на заводе. Пробовал поморгать светодиодом та же ерунда. Прошивка стоит с завода. Может её нужно поменять?
 

AmatorVic

New member
Что-то у меня не работают загруженные в esp(07) прошивки. Делаю всё по инструкции, скетч успешно загружается, а реакции со стороны esp никакой . Всё время создает точку доступа, зашитую ещё на заводе. Пробовал поморгать светодиодом та же ерунда. Прошивка стоит с завода. Может её нужно поменять?
У меня тоже самое. С IDE 1.6.1 та которая с https://github.com/esp8266/Arduino/releases все работает, грузиться и запускается, а если ставить с https://ci.appveyor.com/project/igrr/Arduino/build/artifacts то загружается, но не запускается. и код получается на 10% больше.
Я об этом писал выше, пришлось откатиться на первую версию с github.com
 

Ivizil

New member
Подскажите у всех так медленно отправляет GET запросы на сервер? Если в примере wi-fi client задержку поставить не 5000 а допустим 50 то скорость составляет примерно 1 запрос в 8 секунды. При этом в скетче нигде больше задержек нет кроме 10 в одном месте и то не в цикле. Я уже и сериал монитор отключал - ничего не изменилось. При всём этом на w5100 шилде получалось до 3-5 запросов в секунду.
 
Последнее редактирование:

AmatorVic

New member
Не знаю как клиент, но в примере WiFiserver при отправке построчно страница отображается также построчно, т.е. отправка ответа на GET запрос от клиента очень медленная.
Скорее всего связана с работой WiFi модуля.
Поэтому я готовлю стразу страницу и потом отправляю её полностью.
Но при этом столкнулся с проблемой буфера функции client.println
Пока не разобрался полностью.
 

AmatorVic

New member
Господа, подскажите, что нибудь работал с массивом PROGMEM на ESP8266.
Что-то у меня не получается с ним работать, хотя в ошибку не вываливается при компиляции.
библиотека есть в поставке.
 

Ivizil

New member
Скорее всего связана с работой WiFi модуля.
Согласен очень похоже что wifi работает очень не торопливо. Может кто знает как это побороть.. ?
И ещё когда к выходу подключен светодиот и отсоеденить минут от контроллера (т.е. отключить сам контроллер отключением "-") то светодиод загорается?
 
Последнее редактирование:

pvvx

Активный участник сообщества
Согласен очень похоже что wifi работает очень не торопливо.
Если используется либа Lwip от Espressif, то там включен по умолчанию алгоритм отправки nagle <-- там описано как отключать.
Если правильно организовать отправку и прием пакетов, то модуль отрабатывает к тысяче штук пакетов (пакет = MSS по 1560 байт) в секунду. Проверено на моей прошивке (можете проверить на своем модуле, записав её). Т.е. поток по TCP у модуля за 1 Мегабайт в секунду без сверх оптимизации. С оптимизацией - к 1.2 Мегабайта в секунду передача файла по HTTP.
 
Последнее редактирование:

pvvx

Активный участник сообщества
Там говорится только про опцию TCP_NODELAY. А как и где ее устанавливать?
Используйте поиск по файлам *.h в Lwip - ищите TF_NODELAY :)
Найдете [HASHTAG]#define[/HASHTAG] TF_NODELAY ((u8_t)0x40U) /* Disable Nagle algorithm */
А дальше придется вам бороться с ++ от СИ :) Memory alloc очень медленный на модуле, да с запретами всех прерываний, и при этом модуль жрет много...
Так что бросайте это занятие - для дрыгания одной релюхой и 8 пакетов в секунду вам хватит. :)
 
Последнее редактирование:

vvzvlad

New member
Так что бросайте это занятие - для дрыгания одной релюхой и 8 пакетов в секунду вам хватит. :)
Мне надо отправлять пару байтов раз в 3 секунды. Но зато надо сделать это без задержек, а сейчас модуль делает это на 30-50мс медленнее, чем телефон с программой на java.
 

pvvx

Активный участник сообщества
Но зато надо сделать это без задержек
Если не нашли как указать Lwip-у отправлять сразу, не задумываясь, то ждите авторов Arduino - опция выставляется в флагах структуры pcb, они укажут. Я вообще не понимаю что такое "скетч" и "кекс" или как тама его, что варят в "дурине" :)
 

vvzvlad

New member
Если не нашли как указать Lwip-у отправлять сразу, не задумываясь, то ждите авторов Arduino - опция выставляется в флагах структуры pcb, они укажут. Я вообще не понимаю что такое "скетч" и "кекс" или как тама его, что варят в "дурине" :)
Я нашел упоминания в WiFiClient.cpp и tcp_impl.h/tcp.h, даже нашел вот это:
[HASHTAG]#define[/HASHTAG] tcp_nagle_disable(pcb) ((pcb)->flags |= TF_NODELAY)
[HASHTAG]#define[/HASHTAG] tcp_nagle_enable(pcb) ((pcb)->flags &= ~TF_NODELAY)
Но что такое pcb, которое ему надо передать, я не знаю.
 

tsrman

New member
Я нашел упоминания в WiFiClient.cpp и tcp_impl.h/tcp.h, даже нашел вот это:
[HASHTAG]#define[/HASHTAG] tcp_nagle_disable(pcb) ((pcb)->flags |= TF_NODELAY)
[HASHTAG]#define[/HASHTAG] tcp_nagle_enable(pcb) ((pcb)->flags &= ~TF_NODELAY)
Но что такое pcb, которое ему надо передать, я не знаю.
посмотрите в WiFiClient.cpp в районе
int ICACHE_FLASH_ATTR WiFiClient::connect(IPAddress ip, uint16_t port)

там как раз pcb определяется
tcp_pcb* pcb = tcp_new();
if (!pcb)
return 0;

немного ниже попробуйте добавить
tcp_nagle_disable(pcb);
 
Сверху Снизу