I am working with an ESP8266 board and am trying to retrieve data from firebase. The sketch is a test sketch to first get communication between Firebase and my ESP. I have a function called D1_GetData() which is basically retrieving the data and writing the data to Serial. I want to use the Ticker library to retrieve the data at a set interval to avoid ESP crashes. The problem appears to be the Ticker library. No data seems to be retrieved, however if I use the SimpleTimer library it works!
Code using Ticker library
//LIBRARIES//
//WIFI//
#include <ESP8266WiFi.h>
//FIREBASE//
#include <FirebaseArduino.h>
//OTA//
#include <ESPAsyncTCP.h>
#include <ESPAsyncWebServer.h>
#include <AsyncElegantOTA.h>
//REMOTEME//
#include <RemoteMe.h>
#include <RemoteMeSocketConnector.h>
//RTC//
#include <SNTPtime.h>
//OTHERS//
#include <EEPROM.h>
#include "Ticker.h"
Ticker T_D1_GetData;
Ticker T_ClockFunction;
//FIREBASE//
#define FIREBASE_HOST ""
#define FIREBASE_AUTH ""
//REMOTEME//
#define DEVICE_ID 2
#define DEVICE_NAME ""
#define TOKEN ""
//WIFI GLOBALS//
//AquArt Setup//
#define WIFI_SSID "proietti office"
//#define WIFI_SSID "AquArt";
#define WIFI_PASSWORD ""
//SETUP//
AsyncWebServer serverOTA(80);
SNTPtime NTPch("uk.pool.ntp.org");
RemoteMe& remoteMe = RemoteMe::getInstance(TOKEN, DEVICE_ID);
//TIME//
strDateTime dateTime;
byte Hr;
byte Min;
byte Sec;
unsigned long TimeNow;
//FIREBASE GLOBALS//
String D1_BoostDosage;
String D1_CalibrationInput;
String D1_DailyDosage;
String D1_Function;
String D1_SolutionInput;
String D1_Boost;
String D1_ALKATecLink;
String D1_CalibrateButton;
String D1_HoseChange;
String D1_SaveButton;
String D1_ALKATec;
String D1_Checker;
void setup()
{
Serial.begin(115200);
EEPROM.begin(512);
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
while (WiFi.status() != WL_CONNECTED)
{
// digitalWrite(LEDON, LOW);
delay(500);
}
NTPch.setSNTPtime();
Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH);
//OTA////////////////////////////////////////////////////////
serverOTA.on("/", HTTP_GET, [](AsyncWebServerRequest *request)
{
request->send(200, "text/plain", "AquArt DOSETec");
});
//Serial.println(WiFi.localIP());
AsyncElegantOTA.begin(&serverOTA);
serverOTA.begin();
/////////////////////////////////////////////////////////////
remoteMe.setConnector(new RemoteMeSocketConnector());
remoteMe.sendRegisterDeviceMessage(DEVICE_NAME);
T_D1_GetData.attach_ms(1000, D1_GetData);
//T_ClockFunction.attach(1, ClockFunction);
}
void loop()
{
ESP.wdtFeed();
}
void D1_GetData()
{
D1_Function = Firebase.getString("DOSETec/Tag_D1_Function"); //FUNCTION SELECT DOSETec SCREEN
D1_CalibrateButton = Firebase.getString("DOSETec/Tag_D1_CalibrateButton"); //CALIBRATE BUTTON DOSETec SCREEN
D1_BoostDosage = Firebase.getString("DOSETec/Tag_D1_BoostDosage"); //BOOST DOSAGE INPUT DOSETec SCREEN
D1_CalibrationInput = Firebase.getString("DOSETec/Tag_D1_CalibrationInput"); //CALIBRATION INPUT DOSETec SCREEN
D1_DailyDosage = Firebase.getString("DOSETec/Tag_D1_DailyDosage"); //DAILY DOSAGE INPUT DOSETec SCREEN
D1_SolutionInput = Firebase.getString("DOSETec/Tag_D1_SolutionInput"); //SOLUTION INPUT DOSETec SCREEN
D1_Boost = Firebase.getString("DOSETec/Tag_D1_Boost");
Serial.print("Function:");
Serial.println(D1_Function);
Serial.print("CalibrateButton:");
Serial.println(D1_CalibrateButton);
Serial.print("BoostDosage:");
Serial.println(D1_BoostDosage);
Serial.print("CalibationInput:");
Serial.println(D1_CalibrationInput);
Serial.print("DailyDosage:");
Serial.println(D1_DailyDosage);
Serial.print("SolutionInput:");
Serial.println(D1_SolutionInput);
Serial.print("D1_Boost:");
Serial.println(D1_Boost);
}
Serial Output
Function:
CalibrateButton:
BoostDosage:
CalibationInput:
DailyDosage:
SolutionInput:
D1_Boost:
Function:
CalibrateButton:
BoostDosage:
CalibationInput:
DailyDosage:
SolutionInput:
D1_Boost:
Code using the SimpleTimer library
//LIBRARIES//
//WIFI//
#include <ESP8266WiFi.h>
//FIREBASE//
#include <FirebaseArduino.h>
//OTA//
#include <ESPAsyncTCP.h>
#include <ESPAsyncWebServer.h>
#include <AsyncElegantOTA.h>
//REMOTEME//
#include <RemoteMe.h>
#include <RemoteMeSocketConnector.h>
//RTC//
#include <SNTPtime.h>
//OTHERS//
#include <EEPROM.h>
#include <SimpleTimer.h>
SimpleTimer timer;
//FIREBASE//
#define FIREBASE_HOST ""
#define FIREBASE_AUTH ""
//REMOTEME//
#define DEVICE_ID 2
#define DEVICE_NAME ""
#define TOKEN ""
//WIFI GLOBALS//
//AquArt Setup//
#define WIFI_SSID ""
//#define WIFI_SSID "AquArt";
#define WIFI_PASSWORD ""
//SETUP//
AsyncWebServer serverOTA(80);
SNTPtime NTPch("uk.pool.ntp.org");
RemoteMe& remoteMe = RemoteMe::getInstance(TOKEN, DEVICE_ID);
//TIME//
strDateTime dateTime;
byte Hr;
byte Min;
byte Sec;
unsigned long TimeNow;
//FIREBASE GLOBALS//
String D1_BoostDosage;
String D1_CalibrationInput;
String D1_DailyDosage;
String D1_Function;
String D1_SolutionInput;
String D1_Boost;
String D1_ALKATecLink;
String D1_CalibrateButton;
String D1_HoseChange;
String D1_SaveButton;
String D1_ALKATec;
String D1_Checker;
void setup()
{
Serial.begin(115200);
EEPROM.begin(512);
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
while (WiFi.status() != WL_CONNECTED)
{
// digitalWrite(LEDON, LOW);
delay(500);
}
NTPch.setSNTPtime();
Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH);
//OTA////////////////////////////////////////////////////////
serverOTA.on("/", HTTP_GET, [](AsyncWebServerRequest *request)
{
request->send(200, "text/plain", "AquArt DOSETec");
});
//Serial.println(WiFi.localIP());
AsyncElegantOTA.begin(&serverOTA);
serverOTA.begin();
/////////////////////////////////////////////////////////////
remoteMe.setConnector(new RemoteMeSocketConnector());
remoteMe.sendRegisterDeviceMessage(DEVICE_NAME);
timer.setInterval(2000, D1_GetData);
//timer.setInterval(1000, ClockFunction);
}
void loop()
{
timer.run();
ESP.wdtFeed();
}
void D1_GetData()
{
D1_Function = Firebase.getString("DOSETec/Tag_D1_Function"); //FUNCTION SELECT DOSETec SCREEN
D1_CalibrateButton = Firebase.getString("DOSETec/Tag_D1_CalibrateButton"); //CALIBRATE BUTTON DOSETec SCREEN
D1_BoostDosage = Firebase.getString("DOSETec/Tag_D1_BoostDosage"); //BOOST DOSAGE INPUT DOSETec SCREEN
D1_CalibrationInput = Firebase.getString("DOSETec/Tag_D1_CalibrationInput"); //CALIBRATION INPUT DOSETec SCREEN
D1_DailyDosage = Firebase.getString("DOSETec/Tag_D1_DailyDosage"); //DAILY DOSAGE INPUT DOSETec SCREEN
D1_SolutionInput = Firebase.getString("DOSETec/Tag_D1_SolutionInput"); //SOLUTION INPUT DOSETec SCREEN
D1_Boost = Firebase.getString("DOSETec/Tag_D1_Boost");
Serial.print("Function:");
Serial.println(D1_Function);
Serial.print("CalibrateButton:");
Serial.println(D1_CalibrateButton);
Serial.print("BoostDosage:");
Serial.println(D1_BoostDosage);
Serial.print("CalibationInput:");
Serial.println(D1_CalibrationInput);
Serial.print("DailyDosage:");
Serial.println(D1_DailyDosage);
Serial.print("SolutionInput:");
Serial.println(D1_SolutionInput);
Serial.print("D1_Boost:");
Serial.println(D1_Boost);
}
Serial output using the SimpleTimer library
D1_Boost:false
Function:4
CalibrateButton:false
BoostDosage:100
CalibationInput:150
DailyDosage:200
SolutionInput:10000
D1_Boost:false
Function:4
CalibrateButton:false
BoostDosage:100
CalibationInput:150
DailyDosage:200
SolutionInput:10000
D1_Boost:false
Function:4
The to sketches above are identical except for the timing library used. Can anybody shed some light on why Ticker does not work and SimpleTimer does? You might then say that use the SimpleTimer, the issue with the SimpleTimer library is that when you start to have 6 or more timing events it crashes the ESP, and also i would like to education sake know why the Ticker library does not work