From 2ba78dc33ab442cc1de4cd46a6dcfb9e89159e20 Mon Sep 17 00:00:00 2001 From: dslak Date: Mon, 6 Mar 2023 18:01:00 +0100 Subject: [PATCH] update rs sensors reading --- Arduino/{ => Arduino_}/Arduino.ino | 0 Arduino/{ => Arduino_}/GetData.ino | 0 Arduino/{ => Arduino_}/GetSensor.ino | 0 Arduino/{ => Arduino_}/Request.ino | 0 Arduino/{ => Arduino_}/Setup.ino | 0 Arduino/Sensors/GetSensor.ino | 14 +++++ Arduino/Sensors/GetWind.ino | 32 +++++++++++ Arduino/Sensors/Sensors.ino | 45 ++++++++++++++++ Arduino/Sensors/Setup.ino | 20 +++++++ Arduino/Transmission/ArduinoV2.ino | 56 +++++++++++++++++++ Arduino/Transmission/GetSensor.ino | 14 +++++ Arduino/Transmission/GetWid.ino | 7 +++ Arduino/Transmission/Request.ino | 80 ++++++++++++++++++++++++++++ Arduino/Transmission/Setup.ino | 58 ++++++++++++++++++++ TEST/windAll/windAll.ino | 54 +++++++------------ 15 files changed, 345 insertions(+), 35 deletions(-) rename Arduino/{ => Arduino_}/Arduino.ino (100%) rename Arduino/{ => Arduino_}/GetData.ino (100%) rename Arduino/{ => Arduino_}/GetSensor.ino (100%) rename Arduino/{ => Arduino_}/Request.ino (100%) rename Arduino/{ => Arduino_}/Setup.ino (100%) create mode 100644 Arduino/Sensors/GetSensor.ino create mode 100644 Arduino/Sensors/GetWind.ino create mode 100644 Arduino/Sensors/Sensors.ino create mode 100644 Arduino/Sensors/Setup.ino create mode 100644 Arduino/Transmission/ArduinoV2.ino create mode 100644 Arduino/Transmission/GetSensor.ino create mode 100644 Arduino/Transmission/GetWid.ino create mode 100644 Arduino/Transmission/Request.ino create mode 100644 Arduino/Transmission/Setup.ino diff --git a/Arduino/Arduino.ino b/Arduino/Arduino_/Arduino.ino similarity index 100% rename from Arduino/Arduino.ino rename to Arduino/Arduino_/Arduino.ino diff --git a/Arduino/GetData.ino b/Arduino/Arduino_/GetData.ino similarity index 100% rename from Arduino/GetData.ino rename to Arduino/Arduino_/GetData.ino diff --git a/Arduino/GetSensor.ino b/Arduino/Arduino_/GetSensor.ino similarity index 100% rename from Arduino/GetSensor.ino rename to Arduino/Arduino_/GetSensor.ino diff --git a/Arduino/Request.ino b/Arduino/Arduino_/Request.ino similarity index 100% rename from Arduino/Request.ino rename to Arduino/Arduino_/Request.ino diff --git a/Arduino/Setup.ino b/Arduino/Arduino_/Setup.ino similarity index 100% rename from Arduino/Setup.ino rename to Arduino/Arduino_/Setup.ino diff --git a/Arduino/Sensors/GetSensor.ino b/Arduino/Sensors/GetSensor.ino new file mode 100644 index 0000000..46bf012 --- /dev/null +++ b/Arduino/Sensors/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/Sensors/GetWind.ino b/Arduino/Sensors/GetWind.ino new file mode 100644 index 0000000..057b253 --- /dev/null +++ b/Arduino/Sensors/GetWind.ino @@ -0,0 +1,32 @@ + +void getWind() { + + int index = 0; + + digitalWrite(ENABLE_PIN1, HIGH); + digitalWrite(ENABLE_PIN2, LOW); + delay(10); + if(sensor.write(codes, sizeof(codes)) == 8) { + digitalWrite(ENABLE_PIN1, LOW); + for (byte i = 0; i < 11; i++) { + values[index][i] = sensor.read(); + } + } + windSpeed = values[index][4]; + + delay(500); + + index = 1; + + digitalWrite(ENABLE_PIN1, LOW); + digitalWrite(ENABLE_PIN2, HIGH); + delay(10); + if(sensor.write(codes, sizeof(codes)) == 8) { + digitalWrite(ENABLE_PIN2, LOW); + for (byte i = 0; i < 11; i++) { + values[index][i] = sensor.read(); + } + } + windDirection = values[index][4]; + +} diff --git a/Arduino/Sensors/Sensors.ino b/Arduino/Sensors/Sensors.ino new file mode 100644 index 0000000..3d1dd7c --- /dev/null +++ b/Arduino/Sensors/Sensors.ino @@ -0,0 +1,45 @@ +#include +#include +#include + +#define ENABLE_PIN1 8 // dir +#define ENABLE_PIN2 9 // speed +#define SERIAL_RO 10 +#define SERIAL_DI 11 + +BME280I2C bme; + +//const int enable[] = {ENABLE_PIN1, ENABLE_PIN1}; +const byte codes[] = {0x01 ,0x03 ,0x00 ,0x00 ,0x00 ,0x02 ,0xC4 ,0x0B}; + +byte values[2][20]; +SoftwareSerial sensor(SERIAL_RO, SERIAL_DI); + +int windSpeed = 0; +int windDirection = 0; + +float temperature = 0; +float humidity = 0; +float pressure = 0; + +void setup() { + // Initialize Serial Monitor for debugging + Serial.begin(9600); + while(!Serial); + + // Initialize a SoftwareSerial + sensor.begin(4800); + delay(500); + pinMode(ENABLE_PIN1, OUTPUT); + pinMode(ENABLE_PIN2, OUTPUT); + +} + +void loop() { + getWind(); + Serial.print("Direction: "); + Serial.println(windDirection); + Serial.print("Speed: "); + Serial.println(windSpeed); + delay(5000); +} diff --git a/Arduino/Sensors/Setup.ino b/Arduino/Sensors/Setup.ino new file mode 100644 index 0000000..daa7d02 --- /dev/null +++ b/Arduino/Sensors/Setup.ino @@ -0,0 +1,20 @@ + +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!"); + } +} diff --git a/Arduino/Transmission/ArduinoV2.ino b/Arduino/Transmission/ArduinoV2.ino new file mode 100644 index 0000000..66e03e5 --- /dev/null +++ b/Arduino/Transmission/ArduinoV2.ino @@ -0,0 +1,56 @@ +#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?"; +//String BASE_URL = "https://postman-echo.com/get?"; + +String s = ""; +char URL[100]; + +int windSpeed = 0; +int windDirection = 0; + +float temperature = 0; +float humidity = 0; +float pressure = 0; + +bool printSensorsData = true; + +void setup() { + // Initialize Serial Monitor for debugging + 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); + delay(1000); + + // 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 modules + setupSIM800L(); + setupBME280(); + timer = millis() + timerLimit; +} + +void loop() { + + getWind(); + +} diff --git a/Arduino/Transmission/GetSensor.ino b/Arduino/Transmission/GetSensor.ino new file mode 100644 index 0000000..46bf012 --- /dev/null +++ b/Arduino/Transmission/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/Transmission/GetWid.ino b/Arduino/Transmission/GetWid.ino new file mode 100644 index 0000000..3cca94e --- /dev/null +++ b/Arduino/Transmission/GetWid.ino @@ -0,0 +1,7 @@ + +void getWind() { + + windDirection = 0; + windSpeed = 0; + +} diff --git a/Arduino/Transmission/Request.ino b/Arduino/Transmission/Request.ino new file mode 100644 index 0000000..6f37e34 --- /dev/null +++ b/Arduino/Transmission/Request.ino @@ -0,0 +1,80 @@ + +void sendRequest() { + + getBME280Data(); + + s = BASE_URL; + s.concat("windS="); + s.concat(windSpeed); + 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++) { + delay(1000); + connected = sim800l->connectGPRS(); + } + + // Check if connected, if not reset the module and setup the config again + if(connected) { + Serial.println(F("GPRS connected !")); + } else { + Serial.println(F("GPRS not connected !")); + Serial.println(F("Reset the module.")); + sim800l->reset(); + setupSIM800L(); + return; + } + + Serial.println(F("Start HTTP GET...")); + Serial.println(URL); + + // Do HTTP GET communication with 10s for the timeout (read) + uint16_t rc = sim800l->doGet(URL, 10000); + if(rc == 200) { + // Success, output the data received on the serial + Serial.print(F("HTTP GET successful (")); + Serial.print(sim800l->getDataSizeReceived()); + Serial.println(F(" bytes)")); + Serial.print(F("Received : ")); + Serial.println(sim800l->getDataReceived()); + } else { + // Failed... + Serial.print(F("HTTP GET error ")); + Serial.println(rc); + } + + // Close GPRS connectivity (5 trials) + bool disconnected = sim800l->disconnectGPRS(); + for(uint8_t i = 0; i < 5 && !connected; i++) { + delay(1000); + disconnected = sim800l->disconnectGPRS(); + } + + if(disconnected) { + Serial.println(F("GPRS disconnected !")); + } else { + Serial.println(F("GPRS still connected !")); + } + + // Go into low power mode + bool lowPowerMode = sim800l->setPowerMode(MINIMUM); + if(lowPowerMode) { + Serial.println(F("Module in low power mode")); + } else { + Serial.println(F("Failed to switch module to low power mode")); + } + + timer = millis() + timerLimit; + windSpeed = 0; +} diff --git a/Arduino/Transmission/Setup.ino b/Arduino/Transmission/Setup.ino new file mode 100644 index 0000000..7f29c6a --- /dev/null +++ b/Arduino/Transmission/Setup.ino @@ -0,0 +1,58 @@ + +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")); + delay(1000); + } + Serial.println(F("Setup Complete!")); + + // Wait for the GSM signal + uint8_t signal = sim800l->getSignal(); + while(signal <= 0) { + delay(1000); + signal = sim800l->getSignal(); + } + Serial.print(F("Signal OK (strenght: ")); + Serial.print(signal); + Serial.println(F(")")); + delay(1000); + + // Wait for operator network registration (national or roaming network) + NetworkRegistration network = sim800l->getRegistrationStatus(); + while(network != REGISTERED_HOME && network != REGISTERED_ROAMING) { + delay(1000); + network = sim800l->getRegistrationStatus(); + } + Serial.println(F("Network registration OK")); + delay(1000); + + // Setup APN for GPRS configuration + bool success = sim800l->setupGPRS(APN); + while(!success) { + success = sim800l->setupGPRS(APN); + delay(5000); + } + 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!"); + } +} diff --git a/TEST/windAll/windAll.ino b/TEST/windAll/windAll.ino index f7c73cb..581e61b 100644 --- a/TEST/windAll/windAll.ino +++ b/TEST/windAll/windAll.ino @@ -1,69 +1,53 @@ #include #include -const int RE[] = {0,7,2}; -const int DE[] = {0,8,3}; +const int enable[] = {0,8,9}; const byte codes[] = {0x01 ,0x03 ,0x00 ,0x00 ,0x00 ,0x02 ,0xC4 ,0x0B}; byte values[3][20]; -SoftwareSerial mod1(10, 11); // RO / DI -SoftwareSerial mod2(5, 6); // RO / DI +SoftwareSerial sensor(10, 11); // RO / DI void setup() { Serial.begin(4800); while(!Serial){;} - mod1.begin(4800); + sensor.begin(4800); delay(500); - mod2.begin(4800); - delay(500); - pinMode(RE[1], OUTPUT); - pinMode(DE[1], OUTPUT); - pinMode(RE[2], OUTPUT); - pinMode(DE[2], OUTPUT); + pinMode(enable[1], OUTPUT); + pinMode(enable[2], OUTPUT); } void loop() { int val1 = 0 ; // SPEED int val2 = 0 ; // DIR + readSensor(1); //val1 = ((values[1][5]*256)+values[1][6]); val1 = values[1][4]; - Serial.print("speed: "); + Serial.print("dir: "); Serial.println(val1); delay(1000); + readSensor(2); val2 = values[2][4]; - Serial.print("dir: "); + Serial.print("speed: "); Serial.println(val2); delay(1000); + + } -byte readSensor(int sensor) { - digitalWrite(DE[sensor], HIGH); - digitalWrite(RE[sensor], HIGH); +byte readSensor(int index) { + digitalWrite(enable[index], HIGH); delay(10); - if(sensor == 1) { - if (mod1.write(codes, sizeof(codes)) == 8) { - digitalWrite(DE[sensor], LOW); - digitalWrite(RE[sensor], LOW); - for (byte i = 0; i < 11; i++) { - values[sensor][i] = mod1.read(); - Serial.print(values[sensor][i]); - Serial.print(" "); - } - } - } else if(sensor == 2) { - if (mod2.write(codes, sizeof(codes)) == 8) { - digitalWrite(DE[sensor], LOW); - digitalWrite(RE[sensor], LOW); - for (byte i = 0; i < 11; i++) { - values[sensor][i] = mod2.read(); - Serial.print(values[sensor][i]); - Serial.print(" "); - } + if(sensor.write(codes, sizeof(codes)) == 8) { + digitalWrite(enable[index], LOW); + for (byte i = 0; i < 11; i++) { + values[index][i] = sensor.read(); + Serial.print(values[index][i]); + Serial.print(" "); } } Serial.println(" ");