@ -78,6 +78,11 @@ uint8_t LoRa2[] = {mac_prefix[3], mac_prefix[4], LORA2_PEER};
//uint8_t LoRaAddress[] = {0x42, 0x00};
# endif
# ifdef USE_SD_LOG
unsigned long last_millis = 0 ;
unsigned long seconds_since_reset = 0 ;
# endif
DataReading theData [ 256 ] ;
uint8_t ln ;
uint8_t newData = 0 ;
@ -113,6 +118,8 @@ CRGB leds[NUM_LEDS];
# endif
# ifdef USE_WIFI
PubSubClient client ( espClient ) ;
WiFiUDP ntpUDP ;
NTPClient timeClient ( ntpUDP ) ;
const char * ssid = FDRS_WIFI_SSID ;
const char * password = FDRS_WIFI_PASS ;
const char * mqtt_server = FDRS_MQTT_ADDR ;
@ -126,6 +133,8 @@ const char* mqtt_user = NULL;
const char * mqtt_pass = NULL ;
# endif
// Set ESP-NOW send and receive callbacks for either ESP8266 or ESP32
# if defined(ESP8266)
void OnDataSent ( uint8_t * mac_addr , uint8_t sendStatus ) {
@ -166,6 +175,56 @@ void getSerial() {
}
}
void sendSD ( const char filename [ 32 ] ) {
# ifdef USE_SD_LOG
DBG ( " Logging to SD card. " ) ;
File logfile = SD . open ( filename , FILE_WRITE ) ;
for ( int i = 0 ; i < ln ; i + + ) {
# ifdef USE_WIFI
logfile . print ( timeClient . getEpochTime ( ) ) ;
# else
logfile . print ( seconds_since_reset ) ;
# endif
logfile . print ( " , " ) ;
logfile . print ( theData [ i ] . id ) ;
logfile . print ( " , " ) ;
logfile . print ( theData [ i ] . t ) ;
logfile . print ( " , " ) ;
logfile . println ( theData [ i ] . d ) ;
}
logfile . close ( ) ;
# endif
}
void reconnect ( int attempts , bool silent ) {
# ifdef USE_WIFI
if ( ! silent ) DBG ( " Connecting MQTT... " ) ;
for ( int i = 1 ; i < = attempts ; i + + ) {
// Attempt to connect
if ( client . connect ( " FDRS_GATEWAY " , mqtt_user , mqtt_pass ) ) {
// Subscribe
client . subscribe ( TOPIC_COMMAND ) ;
if ( ! silent ) DBG ( " MQTT Connected " ) ;
return ;
} else {
if ( ! silent ) {
char msg [ 15 ] ;
sprintf ( msg , " Attempt %d/%d " , i , attempts ) ;
DBG ( msg ) ;
}
if ( attempts = ! 1 ) {
delay ( 3000 ) ;
}
}
}
if ( ! silent ) DBG ( " Connecting MQTT failed. " ) ;
# endif
}
void reconnect ( int attempts ) {
reconnect ( attempts , false ) ;
}
void mqtt_callback ( char * topic , byte * message , unsigned int length ) {
String incomingString ;
DBG ( topic ) ;
@ -192,6 +251,14 @@ void mqtt_callback(char* topic, byte * message, unsigned int length) {
}
}
void mqtt_publish ( const char * payload ) {
# ifdef USE_WIFI
if ( ! client . publish ( TOPIC_DATA , payload ) ) {
DBG ( " Error on sending MQTT " ) ;
sendSD ( SD_FILENAME ) ;
}
# endif
}
void getLoRa ( ) {
# ifdef USE_LORA
@ -275,7 +342,7 @@ void sendMQTT() {
}
String outgoingString ;
serializeJson ( doc , outgoingString ) ;
client . publish( TOPIC_DATA , ( char * ) outgoingString . c_str ( ) ) ;
mqtt_ publish( ( char * ) outgoingString . c_str ( ) ) ;
# endif
}
@ -496,25 +563,10 @@ void releaseMQTT() {
}
String outgoingString ;
serializeJson ( doc , outgoingString ) ;
client . publish( TOPIC_DATA , ( char * ) outgoingString . c_str ( ) ) ;
mqtt_ publish( ( char * ) outgoingString . c_str ( ) ) ;
lenMQTT = 0 ;
# endif
}
void reconnect ( ) {
# ifdef USE_WIFI
// Loop until reconnected
while ( ! client . connected ( ) ) {
// Attempt to connect
if ( client . connect ( " FDRS_GATEWAY " , mqtt_user , mqtt_pass ) ) {
// Subscribe
client . subscribe ( TOPIC_COMMAND ) ;
} else {
DBG ( " Connecting MQTT. " ) ;
delay ( 5000 ) ;
}
}
# endif
}
void begin_espnow ( ) {
DBG ( " Initializing ESP-NOW! " ) ;
WiFi . mode ( WIFI_STA ) ;
@ -570,3 +622,32 @@ void begin_espnow() {
# endif
DBG ( " ESP-NOW Initialized. " ) ;
}
void begin_lora ( ) {
# ifdef USE_LORA
DBG ( " Initializing LoRa! " ) ;
# ifdef ESP32
SPI . begin ( SPI_SCK , SPI_MISO , SPI_MOSI ) ;
# endif
LoRa . setPins ( LORA_SS , LORA_RST , LORA_DIO0 ) ;
if ( ! LoRa . begin ( FDRS_BAND ) ) {
DBG ( " Initialization failed! " ) ;
while ( 1 ) ;
}
LoRa . setSpreadingFactor ( FDRS_SF ) ;
DBG ( " LoRa initialized. " ) ;
# endif
}
void begin_SD ( ) {
# ifdef USE_SD_LOG
DBG ( " Initializing SD card... " ) ;
# ifdef ESP32
SPI . begin ( SCK , MISO , MOSI ) ;
# endif
if ( ! SD . begin ( SD_SS ) ) {
DBG ( " Initialization failed! " ) ;
while ( 1 ) ;
} else {
DBG ( " SD initialized. " ) ;
}
# endif
}