• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе 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 клиента.
 
Сверху Снизу