From 427010df5b55c2f521e581e4148ea4027717f3e3 Mon Sep 17 00:00:00 2001 From: Dslak Date: Fri, 12 Feb 2021 12:36:38 +0100 Subject: [PATCH] complete integration --- Arduino/Arduino.ino | 65 +++++++++++++------------------------------ Arduino/GetData.ino | 7 ----- Arduino/GetSensor.ino | 14 ++++++++++ Arduino/GetWind.ino | 34 ++++++++++++++++++++++ Arduino/Request.ino | 20 +++++++++---- Arduino/Setup.ino | 23 ++++++++++++++- 6 files changed, 104 insertions(+), 59 deletions(-) create mode 100644 Arduino/GetSensor.ino create mode 100644 Arduino/GetWind.ino diff --git a/Arduino/Arduino.ino b/Arduino/Arduino.ino index fc238e1..455c61c 100644 --- a/Arduino/Arduino.ino +++ b/Arduino/Arduino.ino @@ -1,11 +1,15 @@ #include +#include #include "SIM800L.h" +#include #define SIM800_RX_PIN 10 #define SIM800_TX_PIN 11 #define SIM800_RST_PIN 7 SIM800L* sim800l; +BME280I2C bme; + const char APN[] = "TM"; String BASE_URL = "http://2.238.194.8/index.php?"; @@ -23,24 +27,28 @@ unsigned long startime = 0; unsigned long timer = 0; int windSpeed = 0; +float temperature = 0; +float humidity = 0; +float pressure = 0; + int northPin = 4; int eastPin = 5; int southPin = 2; int westPin = 3; -int timerLimit = 3000;//300000; // 5 minutes - -bool printSensorsData = true; - +int timerLimit = 10000;//300000; // 5 minutes String windDirection = ""; - +bool printSensorsData = true; void setup() { // Initialize Serial Monitor for debugging - Serial.begin(115200); + Serial.begin(9600); while(!Serial); + pinMode(13, OUTPUT); + digitalWrite(13, HIGH); + // Initialize a SoftwareSerial SoftwareSerial* serial = new SoftwareSerial(SIM800_RX_PIN, SIM800_TX_PIN); serial->begin(9600); @@ -49,47 +57,14 @@ void setup() { // Initialize SIM800L driver with an internal buffer of 200 bytes and a reception buffer of 512 bytes, debug disabled sim800l = new SIM800L((Stream *)serial, SIM800_RST_PIN, 200, 512); - // Setup module for GPRS communication - setupModule(); + // Setup modules + setupSIM800L(); + setupBME280(); + timer = millis() + timerLimit; } void loop() { - - windDirection = ""; - anemometerVal = digitalRead(anemometerPin); - - if ((anemometerState == 1) && (anemometerVal == 0)) { - anemometerDuration = millis() - startime; - startime = millis(); - windSpeed = 2500.0/anemometerDuration; - } - - anemometerState = anemometerVal; - - if(millis() >= timer) { - - Serial.println("--------------------------"); - Serial.println("Sending..."); - - timer = millis() + timerLimit; - - if(digitalRead(northPin)) {windDirection = windDirection + "N";} - if(digitalRead(southPin)) {windDirection = windDirection + "S";} - if(digitalRead(eastPin)) {windDirection = windDirection + "E";} - if(digitalRead(westPin)) {windDirection = windDirection + "W";} - - if(printSensorsData) { - Serial.print("Wind speed:\t"); - Serial.print(windSpeed); - Serial.println("Km/h"); - - Serial.print("Wind direction:\t"); - Serial.println(windDirection); - - } - - sendRequest(); - - } + + getWind(); } diff --git a/Arduino/GetData.ino b/Arduino/GetData.ino index 68343bf..43d02c4 100644 --- a/Arduino/GetData.ino +++ b/Arduino/GetData.ino @@ -4,8 +4,6 @@ void getWind() { windDirection = ""; anemometerVal = digitalRead(anemometerPin); - //Serial.println(anemometerVal); - if ((anemometerState == 1) && (anemometerVal == 0)) { anemometerDuration = millis() - startime; startime = millis(); @@ -17,7 +15,6 @@ void getWind() { if(millis() >= timer) { Serial.println("--------------------------"); - timer = millis() + timerLimit; if(digitalRead(northPin)) {windDirection = windDirection + "N";} @@ -34,10 +31,6 @@ void getWind() { Serial.println(windDirection); } - sendRequest(); - //delay(5000); - } - } diff --git a/Arduino/GetSensor.ino b/Arduino/GetSensor.ino new file mode 100644 index 0000000..46bf012 --- /dev/null +++ b/Arduino/GetSensor.ino @@ -0,0 +1,14 @@ +void getBME280Data() { + + float temp(NAN), hum(NAN), pres(NAN); + + BME280::TempUnit tempUnit(BME280::TempUnit_Celsius); + BME280::PresUnit presUnit(BME280::PresUnit_Pa); + + bme.read(pres, temp, hum, tempUnit, presUnit); + + temperature = temp; + humidity = hum; + pressure = pres; + +} diff --git a/Arduino/GetWind.ino b/Arduino/GetWind.ino new file mode 100644 index 0000000..126d339 --- /dev/null +++ b/Arduino/GetWind.ino @@ -0,0 +1,34 @@ + +void getWind() { + + windDirection = ""; + anemometerVal = digitalRead(anemometerPin); + + if ((anemometerState == 1) && (anemometerVal == 0)) { + anemometerDuration = millis() - startime; + startime = millis(); + windSpeed = 2500.0/anemometerDuration; + } + + anemometerState = anemometerVal; + + if(millis() >= timer) { + Serial.println("--------------------------"); + Serial.println("Sending..."); + timer = millis() + timerLimit; + + if(digitalRead(northPin)) {windDirection = windDirection + "N";} + if(digitalRead(southPin)) {windDirection = windDirection + "S";} + if(digitalRead(eastPin)) {windDirection = windDirection + "E";} + if(digitalRead(westPin)) {windDirection = windDirection + "W";} + + if(printSensorsData) { + Serial.print("Wind speed:\t"); + Serial.print(windSpeed); + Serial.println("Km/h"); + Serial.print("Wind direction:\t"); + Serial.println(windDirection); + } + sendRequest(); + } +} diff --git a/Arduino/Request.ino b/Arduino/Request.ino index c18b7c4..6f37e34 100644 --- a/Arduino/Request.ino +++ b/Arduino/Request.ino @@ -1,15 +1,23 @@ void sendRequest() { + getBME280Data(); + s = BASE_URL; - s.concat("windSpeed="); + s.concat("windS="); s.concat(windSpeed); - s.concat("&windDirection="); + s.concat("&windD="); s.concat(windDirection); + s.concat("&temp="); + s.concat(temperature); + s.concat("&pres="); + s.concat(pressure); + s.concat("&hum="); + s.concat(humidity); s.toCharArray(URL, 100); Serial.println(URL); - + // Establish GPRS connectivity (5 trials) bool connected = false; for(uint8_t i = 0; i < 5 && !connected; i++) { @@ -24,7 +32,7 @@ void sendRequest() { Serial.println(F("GPRS not connected !")); Serial.println(F("Reset the module.")); sim800l->reset(); - setupModule(); + setupSIM800L(); return; } @@ -33,7 +41,7 @@ void sendRequest() { // Do HTTP GET communication with 10s for the timeout (read) uint16_t rc = sim800l->doGet(URL, 10000); - if(rc == 200) { + if(rc == 200) { // Success, output the data received on the serial Serial.print(F("HTTP GET successful (")); Serial.print(sim800l->getDataSizeReceived()); @@ -67,6 +75,6 @@ void sendRequest() { Serial.println(F("Failed to switch module to low power mode")); } - + timer = millis() + timerLimit; windSpeed = 0; } diff --git a/Arduino/Setup.ino b/Arduino/Setup.ino index bd8fa6a..7f29c6a 100644 --- a/Arduino/Setup.ino +++ b/Arduino/Setup.ino @@ -1,5 +1,5 @@ -void setupModule() { +void setupSIM800L() { // Wait until the module is ready to accept AT commands while(!sim800l->isReady()) { Serial.println(F("Problem to initialize AT command, retry in 1 sec")); @@ -35,3 +35,24 @@ void setupModule() { } Serial.println(F("GPRS config OK")); } + + +void setupBME280() { + Wire.begin(); + + while(!bme.begin()) { + Serial.println("Could not find BME280 sensor!"); + delay(1000); + } + + switch(bme.chipModel()) { + case BME280::ChipModel_BME280: + Serial.println("Found BME280 sensor! Success."); + break; + case BME280::ChipModel_BMP280: + Serial.println("Found BMP280 sensor! No Humidity available."); + break; + default: + Serial.println("Found UNKNOWN sensor! Error!"); + } +}