From c7dc5dea6e5f40b60704497ad0758e9c1b254ec6 Mon Sep 17 00:00:00 2001 From: joalhelk <joalhelk@jyu.fi> Date: Sat, 12 Feb 2022 19:38:30 +0200 Subject: [PATCH] sensor average counting --- arduinoSensor/arduinoSensor.ino | 65 +++++++++++++++++++++++++-------- 1 file changed, 50 insertions(+), 15 deletions(-) diff --git a/arduinoSensor/arduinoSensor.ino b/arduinoSensor/arduinoSensor.ino index 1c26298..7238f6c 100644 --- a/arduinoSensor/arduinoSensor.ino +++ b/arduinoSensor/arduinoSensor.ino @@ -25,6 +25,8 @@ #include <Adafruit_BME280.h> #include "Adafruit_TSL2591.h" +#include <vector> + // Initialize sensors Adafruit_BME280 bme; // BME sensor which has pressure, humidity and temperature Adafruit_TSL2591 tsl = Adafruit_TSL2591(2591); // Luminosity sensor @@ -36,21 +38,51 @@ char pass[] = SECRET_PASS; // your network password (use for WPA, or use as k int keyIndex = 0; // your network key index number (needed only for WEP) int status = WL_IDLE_STATUS; - -int temp, humidity, luminosity; boolean api_success = false; // server address: -char server[] = "192.168.0.8"; -IPAddress server_ip(192,168,0,8); +char server[] = "192.168.0.2"; +IPAddress server_ip(192,168,0,2); int port = 8080; // Initialize the WiFi client library WiFiClient client; HttpClient http = HttpClient(client, server, port); -unsigned long lastConnectionTime = 0, lastConnectionTime2 = 0, lastMovementTime = 0; // last time you connected to the server, in milliseconds -const unsigned long postingInterval = 60L * 30L * 1000L; // delay (1 800 000 ms = 30 min) between updates, in milliseconds +unsigned long lastConnectionTime = 0, lastMeasurement = 0; // last time you connected to the server, in milliseconds +const unsigned long postingInterval = 60L * 10L * 1000L; // delay (60 * 10 * 1000 = 10 minutes) between updates, in milliseconds +const unsigned long measurementInterval = 5L * 1000L; // measure every 10 seconds + +struct Data { + int temp, humid, lumi; +}; + +struct Measurements { + std::vector<Data> datas; + + void AddMeasurements(Data values) { + datas.push_back(values); + } + + Data AverageAndClear() { + int temps = 0, humids = 0, lumis = 0; + + for(Data d : datas) { + temps += d.temp; + humids += d.humid; + lumis += d.lumi; + } + + int amount = datas.size(); + int av_temp = temps/amount; + int av_humid = humids/amount; + int av_lumi = lumis/amount; + datas.clear(); + return Data{av_temp, av_humid, av_lumi}; + } +}; + +Measurements measurements; void setup() { //Initialize serial and wait for port to open: @@ -96,28 +128,31 @@ void loop() { Serial.write(c); } - // Send the data - // If 30 minutes has been passed since last posting, then take measurements and post again + // Take measurements and add them to measurements + if(millis() - lastMeasurement > measurementInterval) { + int temp = bme.readTemperature(); + int humidity = bme.readHumidity(); + int luminosity = tsl.getLuminosity(TSL2591_VISIBLE); + measurements.AddMeasurements({temp, humidity, luminosity}); + lastMeasurement = millis(); + } if (millis() - lastConnectionTime > postingInterval) { - temp = bme.readTemperature(); - humidity = bme.readHumidity(); - luminosity = tsl.getLuminosity(TSL2591_VISIBLE); httpRequest(); } } -// Lähetetään pilveen sensori1:lle sensoreiden tiedot void httpRequest() { // close any connection before send a new request. // This will free the socket on the NINA module Serial.println("making POST request"); + Data average = measurements.AverageAndClear(); String contentType = "application/x-www-form-urlencoded"; String postData ="temperature="; - postData += temp; + postData += average.temp; postData += "&humidity="; - postData += humidity; + postData += average.humid; postData += "&luminosity="; - postData += luminosity; + postData += average.lumi; postData += "&parent_id="; postData += 1; -- GitLab