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

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

Telek

New member
JustACat, А как его включить тут? Или проверить включен/не включен? Я не нашел в ардуиновском описании вотчдога...
 

JustACat

Moderator
Команда форума
Telek, ну у нас же теоретически не ардуино, а ESP, а значит функции ESP должны как-то обрабатываться, я считаю.
Попробуйте эти, например:
ets_wdt_disable() и ets_wdt_enable()
Для сброса должен использоваться ets_wdt_restore() вроде или wdt_feed() ... Но вам же наоборот не надо сбрасывать...
Можете и тут на форуме поискать по этим функциям.
 

JustACat

Moderator
Команда форума
И вообще, вам же ребут нужен же, а я чего-то в дебри полез :)
Попробуйте лучше:
system_restart(); или system_restart_enhance();
Описание есть в файле SDK-Espressif IoT SDK Programming Guide_v1.0.0 (ну или другой версии).
 

JustACat

Moderator
Команда форума
У ESP много на что заголовков нету, а функции есть - как суслик, в общем... А вот как это реализовано в ардуино IDE (скомпилится или нет) - не знаю.
Но в SDK официальном оно лежит вот тут:
\include\user_interface.h
Просто объявлено:
void system_restart(void);
И все.
 

Telek

New member
system_restart() я нашел в user_interface.h, но если я его включаю, то вываливается при компиляции:
Код:
In file included from C:\Users\jd\Desktop\arduino-1.6.1/hardware/tools/esp8266/sdk/include/os_type.h:10:0,
                 from C:\Users\jd\Desktop\arduino-1.6.1/hardware/tools/esp8266/sdk/include/user_interface.h:9,
                 from sketch_apr10a.ino:1:
C:\Users\jd\Desktop\arduino-1.6.1/hardware/tools/esp8266/sdk/include/ets_sys.h:94:20: error: 'size_t' was not declared in this scope
void *pvPortMalloc(size_t xWantedSize);
                    ^
C:\Users\jd\Desktop\arduino-1.6.1/hardware/tools/esp8266/sdk/include/ets_sys.h:95:32: error: 'size_t' has not been declared
void *pvPortRealloc(void* ptr, size_t xWantedSize);
                                ^
C:\Users\jd\Desktop\arduino-1.6.1/hardware/tools/esp8266/sdk/include/ets_sys.h:97:19: error: 'size_t' was not declared in this scope
void *vPortMalloc(size_t xWantedSize);
                   ^
C:\Users\jd\Desktop\arduino-1.6.1/hardware/tools/esp8266/sdk/include/ets_sys.h:99:47: error: 'size_t' has not been declared
void *ets_memcpy(void *dest, const void *src, size_t n);
                                               ^
C:\Users\jd\Desktop\arduino-1.6.1/hardware/tools/esp8266/sdk/include/ets_sys.h:100:34: error: 'size_t' has not been declared
void *ets_memset(void *s, int c, size_t n);
                                  ^
C:\Users\jd\Desktop\arduino-1.6.1/hardware/tools/esp8266/sdk/include/ets_sys.h:109:48: error: 'size_t' has not been declared
char *ets_strncpy(char *dest, const char *src, size_t n);
                                                ^
C:\Users\jd\Desktop\arduino-1.6.1/hardware/tools/esp8266/sdk/include/ets_sys.h:112:28: error: 'size_t' has not been declared
int os_snprintf(char *str, size_t size, const char *format, ...) __attribute__ ((format (printf, 3, 4)));
                            ^
C:\Users\jd\Desktop\arduino-1.6.1/hardware/tools/esp8266/sdk/include/ets_sys.h:104:5: error: previous declaration of 'int atoi(const char*)' with 'C++' linkage
int atoi(const char *nptr);
     ^
In file included from c:\users\jd\desktop\arduino-1.6.1\hardware\tools\esp8266\xtensa-lx106-elf\xtensa-lx106-elf\include\stdint.h:12:0,
                 from c:\users\jd\desktop\arduino-1.6.1\hardware\tools\esp8266\xtensa-lx106-elf\lib\gcc\xtensa-lx106-elf\4.8.2\include\stdint.h:9,
                 from C:\Users\jd\Desktop\arduino-1.6.1/hardware/tools/esp8266/sdk/include/c_types.h:8,
                 from C:\Users\jd\Desktop\arduino-1.6.1/hardware/tools/esp8266/sdk/include/ets_sys.h:11,
                 from C:\Users\jd\Desktop\arduino-1.6.1/hardware/tools/esp8266/sdk/include/os_type.h:10,
                 from C:\Users\jd\Desktop\arduino-1.6.1/hardware/tools/esp8266/sdk/include/user_interface.h:9,
                 from sketch_apr10a.ino:1:
c:\users\jd\desktop\arduino-1.6.1\hardware\tools\esp8266\xtensa-lx106-elf\xtensa-lx106-elf\include\stdlib.h:70:5: error: conflicts with new declaration with 'C' linkage
int _EXFUN(atoi,(const char *__nptr));
     ^
In file included from C:\Users\jd\Desktop\arduino-1.6.1/hardware/tools/esp8266/sdk/include/os_type.h:10:0,
                 from C:\Users\jd\Desktop\arduino-1.6.1/hardware/tools/esp8266/sdk/include/user_interface.h:9,
                 from sketch_apr10a.ino:1:
C:\Users\jd\Desktop\arduino-1.6.1/hardware/tools/esp8266/sdk/include/ets_sys.h:119:6: error: previous declaration of 'void ets_intr_lock()' with 'C++' linkage
void ets_intr_lock();
      ^
In file included from sketch_apr10a.ino:3:0:
C:\Users\jd\Desktop\arduino-1.6.1\hardware\esp8266com\esp8266\cores\esp8266/Arduino.h:80:20: error: conflicts with new declaration with 'C' linkage
void ets_intr_lock();
                    ^
In file included from C:\Users\jd\Desktop\arduino-1.6.1/hardware/tools/esp8266/sdk/include/os_type.h:10:0,
                 from C:\Users\jd\Desktop\arduino-1.6.1/hardware/tools/esp8266/sdk/include/user_interface.h:9,
                 from sketch_apr10a.ino:1:
C:\Users\jd\Desktop\arduino-1.6.1/hardware/tools/esp8266/sdk/include/ets_sys.h:120:6: error: previous declaration of 'void ets_intr_unlock()' with 'C++' linkage
void ets_intr_unlock();
      ^
In file included from sketch_apr10a.ino:3:0:
C:\Users\jd\Desktop\arduino-1.6.1\hardware\esp8266com\esp8266\cores\esp8266/Arduino.h:81:22: error: conflicts with new declaration with 'C' linkage
void ets_intr_unlock();
                      ^
Ошибка компиляции
Проверял на таком коде:

Код:
#include <user_interface.h>

void setup() {
  // put your setup code here, to run once:
system_restart();
}

void loop() {
  // put your main code here, to run repeatedly:

}
 

JustACat

Moderator
Команда форума
А если не инклюдить <user_interface.h> вообще не работает?
Если да, тогда это уже точно к разработчикам Arduino ESP - пусть разбираются. Лог вы приложили.
 

nikolz

Well-known member
мой небольшой опыт знакомства с андулино ESP привел меня в уныние.
"Это не заливная рыба"
 

nikolz

Well-known member
Сугубо мое личное мнение:
пока реально работающими являются UDK
и все что сделано для LUA , включая ESPlorer.
 

Telek

New member
nikolz, Пишу но не так уверенно. Тут проще и короче. Но в ходе тестирования выявлено несколько глюков приводящих к зависанию. Пока все зависания у меня получается вычислять не теряя полного контроля над устройством(Тикер, пока все время оставался рабочим). Поэтому, на данном этапе достаточно просто перегрузить. Должен же быть какой-то простой способ перезагрузки(типа как в AVR переход по нулевому адресу или что-то подобное.). Можно конечно попробовать свободной ногой дернуть ресет, но я не уверен, что эта нога после перезагрузки не будет менять свои состояния до момента моей инициализации и это не приведет к вечной перезагрузке.
 

Telek

New member
Попробуйте так:
((void (*)(void))0x40000080)();
От спасибо огромное человеческое! Заресетил, так заресетил :) - работает. Теперь осталось понять, спасет ли это при глюках с зависонами.
PS. Скажите, а при испотзовании UDK зависания при нестабильном WiFi наблюдаются?
Пока у меня два основных типа зависаний:
1. Выключение WiFi в момент передачи данных(если ловко выключить)
2. После длительной работы(часа три-четыре передачи данных раз в минуту) "теряется" точка доступа (WiFi.status() != WL_CONNECTED) и больше переподключиться не получается. Только перезагрузка.
 

Victor

Administrator
Команда форума
Подглядел у Ивана на билд сервере новый релиз Arduino IDE (только win)
Скачать: https://ci.appveyor.com/api/buildjo...facts/build/windows/arduino-1.6.1-windows.zip (на гитхабе пока старая версия)
Пока также требуется после распаковки архива скопировать файл libiconv-2.dll из arduino-1.6.1\hardware\tools\avr\libexec\gcc\avr\4.8.1 в arduino-1.6.1

Изменения можно посмотреть по коммитам

Кое-какие изменения (кроме фиксов) для тех, кому неохота лезть в гитхаб:

SDK 1.0.0
esptool теперь не нужно выбирать в качестве программатора
автоматическая прошивка по DTR/RTS (монитор порта их теперь не трогает)
можно выбирать частоту процессора (80/160) и скорость загрузки (9600 - 921600)

Sermus портировал библиотеку для работы с TFT-драйвером ILI9341

ESP-specific APIs
APIs related to deep sleep and watchdog timer are available in the ESP object.
ESP.deepSleep(microseconds, mode) will put the chip into deep sleep. mode is one of WAKE_DEFAULT,WAKE_RFCAL, WAKE_NO_RFCAL, WAKE_RF_DISABLED.
ESP.wdtEnable(), ESP.wdtDisable(), and ESP.wdtFeed() provide some control over the watchdog timer.

Definition of F() macro
add macro for vsnprintf_P and snprintf_P
fix platform file to support Arduino Eclipse Plugin
 
Последнее редактирование:

igrr

Moderator
Команда форума
Не увидел функции задания ip адреса в режиме station - типа wifi.sta.setip() в NodeMCU.
Есть? Будет? Или как реализовать?
Есть:
Код:
IPAddress local_ip(1.2.3.4);
IPAddress gateway(1.2.3.0);
IPAddress subnet(255.255.255.0);
ESP8266WiFi.config(local_ip, gateway, subnet);
 

igrr

Moderator
Команда форума
А если не инклюдить <user_interface.h> вообще не работает?
Если да, тогда это уже точно к разработчикам Arduino ESP - пусть разбираются. Лог вы приложили.
Так как скетч — это C++ код, то заголовочные файлы из SDK нужно размещать в блоках extern "C":
extern "C" {
[HASHTAG]#include[/HASHTAG] "user_interface.h"
}

Спасибо @jcmvbkbc, добавил ESP.reset() который дергает ((void (*)(void))0x40000080)();

Также пофиксил работу с UDP, и добавил сэмпл NTP клиента.
 
Сверху Снизу