Browse Source

update rs sensors reading

feature/rs485
dslak 2 years ago
parent
commit
2ba78dc33a
  1. 0
      Arduino/Arduino_/Arduino.ino
  2. 0
      Arduino/Arduino_/GetData.ino
  3. 0
      Arduino/Arduino_/GetSensor.ino
  4. 0
      Arduino/Arduino_/Request.ino
  5. 0
      Arduino/Arduino_/Setup.ino
  6. 14
      Arduino/Sensors/GetSensor.ino
  7. 32
      Arduino/Sensors/GetWind.ino
  8. 45
      Arduino/Sensors/Sensors.ino
  9. 20
      Arduino/Sensors/Setup.ino
  10. 56
      Arduino/Transmission/ArduinoV2.ino
  11. 14
      Arduino/Transmission/GetSensor.ino
  12. 7
      Arduino/Transmission/GetWid.ino
  13. 80
      Arduino/Transmission/Request.ino
  14. 58
      Arduino/Transmission/Setup.ino
  15. 50
      TEST/windAll/windAll.ino

0
Arduino/Arduino.ino → Arduino/Arduino_/Arduino.ino

0
Arduino/GetData.ino → Arduino/Arduino_/GetData.ino

0
Arduino/GetSensor.ino → Arduino/Arduino_/GetSensor.ino

0
Arduino/Request.ino → Arduino/Arduino_/Request.ino

0
Arduino/Setup.ino → Arduino/Arduino_/Setup.ino

14
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;
}

32
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];
}

45
Arduino/Sensors/Sensors.ino

@ -0,0 +1,45 @@
#include <SoftwareSerial.h>
#include <Wire.h>
#include <BME280I2C.h>
#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);
}

20
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!");
}
}

56
Arduino/Transmission/ArduinoV2.ino

@ -0,0 +1,56 @@
#include <SoftwareSerial.h>
#include <Wire.h>
#include "SIM800L.h"
#include <BME280I2C.h>
#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();
}

14
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;
}

7
Arduino/Transmission/GetWid.ino

@ -0,0 +1,7 @@
void getWind() {
windDirection = 0;
windSpeed = 0;
}

80
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;
}

58
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!");
}
}

50
TEST/windAll/windAll.ino

@ -1,71 +1,55 @@
#include <SoftwareSerial.h>
#include <Wire.h>
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);
if(sensor.write(codes, sizeof(codes)) == 8) {
digitalWrite(enable[index], LOW);
for (byte i = 0; i < 11; i++) {
values[sensor][i] = mod1.read();
Serial.print(values[sensor][i]);
values[index][i] = sensor.read();
Serial.print(values[index][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(" ");
}
}
}
Serial.println(" ");
}

Loading…
Cancel
Save