Compare commits
3 Commits
8bcb5d847f
...
6930494e0c
Author | SHA1 | Date | |
---|---|---|---|
6930494e0c | |||
ad70fdccea | |||
11ed8dfb37 |
2
.gitignore
vendored
2
.gitignore
vendored
@ -35,5 +35,3 @@
|
|||||||
# Custom
|
# Custom
|
||||||
*.bin
|
*.bin
|
||||||
credentials.h
|
credentials.h
|
||||||
src/app/*
|
|
||||||
!src/app/*.ino
|
|
@ -22,6 +22,7 @@
|
|||||||
#define CHAN 108 //0-125
|
#define CHAN 108 //0-125
|
||||||
#define RECV_CHECK 5000 //We test every 5s if we received something
|
#define RECV_CHECK 5000 //We test every 5s if we received something
|
||||||
#define WIFI_CHECK_TIMEOUT 20000
|
#define WIFI_CHECK_TIMEOUT 20000
|
||||||
|
#define PREVENTIVE_RESET_DELAY 18000000 //Every 5 hours
|
||||||
|
|
||||||
uint8_t payload[32] = {0};
|
uint8_t payload[32] = {0};
|
||||||
DataPacket dp;
|
DataPacket dp;
|
||||||
@ -39,11 +40,13 @@ HttpClient DBHost(DB_SERVER, PATH);
|
|||||||
Dictionary<DictionaryHelper::StringEntity> weatherStationPostData, mailboxPostData;
|
Dictionary<DictionaryHelper::StringEntity> weatherStationPostData, mailboxPostData;
|
||||||
|
|
||||||
const uint8_t ADDR[] = "WEST1", ADDR2[] = "ABCDE";
|
const uint8_t ADDR[] = "WEST1", ADDR2[] = "ABCDE";
|
||||||
uint64_t timeStamp(0), irqSaver(0);
|
uint32_t timeStamp(0), irqSaver(0), resetTimeStamp(0);
|
||||||
uint32_t freeMem(0);
|
uint32_t freeMem(0);
|
||||||
uint16_t biggestContigMemBlock(0);
|
uint16_t biggestContigMemBlock(0);
|
||||||
uint8_t frag(0);
|
uint8_t frag(0);
|
||||||
|
int insertIntoDBError(0);
|
||||||
volatile boolean IRQFlag(false);
|
volatile boolean IRQFlag(false);
|
||||||
|
boolean waitingForResetSignal(false), resetNow(false);
|
||||||
|
|
||||||
IRAM_ATTR void NRFIRQsHandler(void *p)
|
IRAM_ATTR void NRFIRQsHandler(void *p)
|
||||||
{
|
{
|
||||||
@ -158,19 +161,21 @@ void loop()
|
|||||||
{
|
{
|
||||||
memcpy(&wsdp, payload, sizeof(wsdp));
|
memcpy(&wsdp, payload, sizeof(wsdp));
|
||||||
debugStruct(&wsdp);
|
debugStruct(&wsdp);
|
||||||
insertIntoDB(&wsdp);
|
insertIntoDBError = insertIntoDB(&wsdp);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case CONNECTED_MAILBOX:
|
case CONNECTED_MAILBOX:
|
||||||
{
|
{
|
||||||
memcpy(&mdp, payload, sizeof(mdp));
|
memcpy(&mdp, payload, sizeof(mdp));
|
||||||
debugStruct(&mdp);
|
debugStruct(&mdp);
|
||||||
insertIntoDB(&mdp);
|
insertIntoDBError = insertIntoDB(&mdp);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(waitingForResetSignal)resetNow = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -201,19 +206,21 @@ void loop()
|
|||||||
{
|
{
|
||||||
memcpy(&wsdp, payload, sizeof(wsdp));
|
memcpy(&wsdp, payload, sizeof(wsdp));
|
||||||
debugStruct(&wsdp);
|
debugStruct(&wsdp);
|
||||||
insertIntoDB(&wsdp);
|
insertIntoDBError = insertIntoDB(&wsdp);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case CONNECTED_MAILBOX:
|
case CONNECTED_MAILBOX:
|
||||||
{
|
{
|
||||||
memcpy(&mdp, payload, sizeof(mdp));
|
memcpy(&mdp, payload, sizeof(mdp));
|
||||||
debugStruct(&mdp);
|
debugStruct(&mdp);
|
||||||
insertIntoDB(&mdp);
|
insertIntoDBError = insertIntoDB(&mdp);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(waitingForResetSignal)resetNow = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -254,6 +261,19 @@ void loop()
|
|||||||
}
|
}
|
||||||
timeStamp = millis();
|
timeStamp = millis();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Here we handle the reset
|
||||||
|
if(millis() - resetTimeStamp > PREVENTIVE_RESET_DELAY)
|
||||||
|
{
|
||||||
|
Serial.println("Waiting next payload before resetting MCU :( !");
|
||||||
|
waitingForResetSignal = true;
|
||||||
|
resetTimeStamp = millis();
|
||||||
|
}
|
||||||
|
|
||||||
|
if((waitingForResetSignal && resetNow) || insertIntoDBError == -125)
|
||||||
|
{
|
||||||
|
ESP.reset();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -271,7 +291,7 @@ void lostConnectionFunc(const WiFiEventStationModeDisconnected &event)
|
|||||||
Serial.println("Lost connection, will try to reconnect ...");
|
Serial.println("Lost connection, will try to reconnect ...");
|
||||||
}
|
}
|
||||||
|
|
||||||
void insertIntoDB(WeatherStationDataPacket *p)
|
int insertIntoDB(WeatherStationDataPacket *p)
|
||||||
{
|
{
|
||||||
char buffer[100] = "";
|
char buffer[100] = "";
|
||||||
int result(0);
|
int result(0);
|
||||||
@ -309,27 +329,10 @@ void insertIntoDB(WeatherStationDataPacket *p)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
Serial.printf("Failed to post data : error(%d)\n", result);
|
Serial.printf("Failed to post data : error(%d)\n", result);
|
||||||
if(result == -125)
|
|
||||||
{
|
|
||||||
WiFi.disconnect();
|
|
||||||
WiFi.begin(SSID, PWD);
|
|
||||||
|
|
||||||
while(!WiFi.isConnected())
|
|
||||||
{
|
|
||||||
Serial.println("Reconnecting !");
|
|
||||||
}
|
|
||||||
if((result = DBHost.sendHttpQuery(HttpClient::HttpRequestMethod::POST, NULL, &weatherStationPostData)) == 0)
|
|
||||||
{
|
|
||||||
HttpClient::HTTP_CODE response = DBHost.isReplyAvailable(2000);
|
|
||||||
Serial.printf("Second send got response code : %u\n", response);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Serial.printf("Second send failed to post data : error(%d)\n", result);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
DBHost.stop();
|
DBHost.stop();
|
||||||
|
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
void debugStruct(WeatherStationDataPacket *p)
|
void debugStruct(WeatherStationDataPacket *p)
|
||||||
@ -367,7 +370,7 @@ void debugStruct(WeatherStationDataPacket *p)
|
|||||||
Serial.println(" *C");
|
Serial.println(" *C");
|
||||||
}
|
}
|
||||||
|
|
||||||
void insertIntoDB(MailboxDataPacket *p)
|
int insertIntoDB(MailboxDataPacket *p)
|
||||||
{
|
{
|
||||||
char buffer[100] = "";
|
char buffer[100] = "";
|
||||||
int result(0);
|
int result(0);
|
||||||
@ -404,6 +407,8 @@ void insertIntoDB(MailboxDataPacket *p)
|
|||||||
Serial.printf("Failed to post data : error(%d)\n", result);
|
Serial.printf("Failed to post data : error(%d)\n", result);
|
||||||
}
|
}
|
||||||
DBHost.stop();
|
DBHost.stop();
|
||||||
|
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
void debugStruct(MailboxDataPacket *p)
|
void debugStruct(MailboxDataPacket *p)
|
||||||
|
42
src/app/definition.h
Normal file
42
src/app/definition.h
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
#ifndef DEFINITION_H
|
||||||
|
#define DEFINITION_H
|
||||||
|
|
||||||
|
#include "packet_format.h"
|
||||||
|
|
||||||
|
//Payload structure
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
uint16_t id;
|
||||||
|
HEADER_e header : 6;
|
||||||
|
} __attribute__((__packed__)) DataPacket;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
uint16_t id;
|
||||||
|
HEADER_e header : 6;
|
||||||
|
unsigned int ldr : 10;
|
||||||
|
float battery;
|
||||||
|
float bmpTemp;
|
||||||
|
float bmpPress;
|
||||||
|
float humidity;
|
||||||
|
float compensatedHumidity;
|
||||||
|
float htuTemp;
|
||||||
|
} __attribute__((__packed__)) WeatherStationDataPacket;
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
MAILBOX_LETTER = 0,
|
||||||
|
MAILBOX_PACKAGE,
|
||||||
|
MAILBOX_COLLECTED,
|
||||||
|
MAILBOX_UNKNOWN,
|
||||||
|
} MAILBOX_EVENT_e;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
uint16_t id;
|
||||||
|
HEADER_e header : 6;
|
||||||
|
float battery;
|
||||||
|
MAILBOX_EVENT_e mailbox_event;
|
||||||
|
} __attribute__((__packed__)) MailboxDataPacket;
|
||||||
|
|
||||||
|
#endif //DEFINITION_H
|
6
src/app/packet_format.h
Normal file
6
src/app/packet_format.h
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
#ifndef PACKET_FORMAT_H
|
||||||
|
#define PACKET_FORMAT_H
|
||||||
|
|
||||||
|
enum HEADER_e {WEATHER_STATION = 0, CONNECTED_MAILBOX};
|
||||||
|
|
||||||
|
#endif //PACKET_FORMAT_H
|
Loading…
Reference in New Issue
Block a user