• Система автоматизации с открытым исходным кодом на базе 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
 
Сверху Снизу