• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Решено Вызов API функции из Arduino - выдает ошибку, что не найдено

SuperBoss

Member
Друзья, подскажите, может не в ту сторону копаю?

Использую ESP8266 от WeMos с двумя DHT22. Использую стандартную библиотеку от AdaFruit DHT.h. Известно, что сами датчики DHT22/DHT11 медленные, обработка датчика может занимать аж до 2-х секунд. Посмотрел в коде библиотеки DHT.h так эти редиски, собирая сведения с датчика запрещают прерывания. Собственно там возникает цикл, на который и реагирует программный сторожевой пес в ESP8266.

Сами Espriff рекомендуют в таком случае, перед выполнением корявых участков кода, где якобы запрещаются прерывания (есть сведения, что в новых версиях API полностью все не запрещаются) нужно отключать программного сторожевого пса, который реагирует если цикл длился 3.2 секунды. И тогда останется только аппаратный пес, с интервалом в 6 секунд. Либо пытаться кормить пса в своем цикле.

Собственно операции отключения, включения, кормления делаются следующими функциями:
systerm_soft_wdt_stop();
systerm_soft_wdt_feed();
systerm_soft_wdt_restart();

Собственно, я погуглил на локальном диске и нашел указанные функции в файле Esp.cpp расположенном в "C:\Program Files (x86)\Arduino\hardware\esp8266com\esp8266\cores\esp8266"\
В нем есть нечто такое:
Код:
void EspClass::wdtDisable(void)
{
    /// Please don't stop software watchdog too long (less than 6 seconds),
    /// otherwise it will trigger hardware watchdog reset.
    system_soft_wdt_stop();
}

void EspClass::wdtFeed(void)
{
    system_soft_wdt_feed();
}
Я пробую написать такой код:
Код:
#include <Esp.h>
void setup() {
  // put your setup code here, to run once:
  systerm_soft_wdt_stop();
  systerm_soft_wdt_feed();
  systerm_soft_wdt_restart();
}

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

}
Но понимаю, что делаю что-то неверно, ибо мне приезжает ошибка, мол:
ESP-Test:6: error: 'systerm_soft_wdt_restart' was not declared in this scope

systerm_soft_wdt_restart();


Т.е. такой функции нету в прикладываемом файле.

Однако, нутром чую, что нужно создать объект ESP и из него вызвать, например, wdtDisable(void). Но на уровне сверху не понимаю, как это сделать.
 

SuperBoss

Member
Друзья,

Все оказалось немного проще:
Код:
void setup() {
  ESP.wdtDisable();
  ESP.wdtFeed();
  ESP.wdtEnable(3200);
}

void loop() {
}
Как я понимаю, API ESP.cpp/h подключается компилятором самостоятельно с созданием такого "объекта". Поэтому достаточно только вызвать ESP.функция и все должно заработать. :)

PS. Пошел тестировать с DHT
 
Сверху Снизу