Commit 3cf93f02 authored by Eric Duminil's avatar Eric Duminil
Browse files

LoRaWAN seems to work on ESP32

parent c594f2d1
...@@ -10,6 +10,9 @@ ...@@ -10,6 +10,9 @@
#ifdef MQTT #ifdef MQTT
# include "mqtt.h" # include "mqtt.h"
#endif #endif
#ifdef LORAWAN
# include "lorawan.h"
#endif
#include "util.h" #include "util.h"
#include "wifi_util.h" #include "wifi_util.h"
......
...@@ -99,7 +99,12 @@ void setup() { ...@@ -99,7 +99,12 @@ void setup() {
mqtt::initialize("CO2sensors/" + SENSOR_ID); mqtt::initialize("CO2sensors/" + SENSOR_ID);
#endif #endif
} }
csv_writer::initialize(); csv_writer::initialize();
#ifdef LORAWAN
lorawan::initialize();
#endif
} }
/***************************************************************** /*****************************************************************
...@@ -107,6 +112,15 @@ void setup() { ...@@ -107,6 +112,15 @@ void setup() {
*****************************************************************/ *****************************************************************/
void loop() { void loop() {
#ifdef LORAWAN
//LMIC Library seems to be very sensitive to timing issues, so run it first.
lorawan::process();
if (lorawan::waiting_for_confirmation) {
// If node is waiting for join confirmation from Gateway, nothing else should run.
return;
}
#endif
//NOTE: Loop should never take more than 1000ms. Split in smaller methods and logic if needed. //NOTE: Loop should never take more than 1000ms. Split in smaller methods and logic if needed.
//TODO: Restart every day or week, in order to not let t0 overflow? //TODO: Restart every day or week, in order to not let t0 overflow?
uint32_t t0 = millis(); uint32_t t0 = millis();
......
...@@ -175,11 +175,17 @@ namespace sensor { ...@@ -175,11 +175,17 @@ namespace sensor {
} }
logToSerial(); logToSerial();
//TODO: Move the 3 back to ampel-firmware.ino and remove headers from co2_sensor.h
csv_writer::logIfTimeHasCome(timestamp, co2, temperature, humidity); csv_writer::logIfTimeHasCome(timestamp, co2, temperature, humidity);
#ifdef MQTT #ifdef MQTT
mqtt::publishIfTimeHasCome(timestamp, co2, temperature, humidity); mqtt::publishIfTimeHasCome(timestamp, co2, temperature, humidity);
#endif #endif
#ifdef LORAWAN
lorawan::preparePayloadIfTimehasCome();
#endif
} }
if (should_calibrate) { if (should_calibrate) {
......
...@@ -13,6 +13,9 @@ ...@@ -13,6 +13,9 @@
#ifdef MQTT #ifdef MQTT
# include "mqtt.h" # include "mqtt.h"
#endif #endif
#ifdef LORAWAN
# include "lorawan.h"
#endif
namespace config { namespace config {
extern uint16_t measurement_timestep; // [s] Value between 2 and 1800 (range for SCD30 sensor) extern uint16_t measurement_timestep; // [s] Value between 2 and 1800 (range for SCD30 sensor)
......
...@@ -24,6 +24,8 @@ namespace ntp { ...@@ -24,6 +24,8 @@ namespace ntp {
String getLocalTime(); String getLocalTime();
} }
#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))
#define seconds() (millis() / 1000UL) #define seconds() (millis() / 1000UL)
extern uint32_t max_loop_duration; extern uint32_t max_loop_duration;
const extern String SENSOR_ID; const extern String SENSOR_ID;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment