Newer
Older
#include "SentecSoilMoistureSensor.h"
#include "SentecRainGaugeSensor.h"
#include "SentecSolarRadiationSensor.h"
#define RXPin 14 // Serial Receive pin
#define TXPin 15 // Serial Transmit pin
#define RE_DE_PIN 19 // Line to pull high or low to receive or send data from RS485
#define POWER_SWITCH_PIN_12V 12
#define POWER_SWITCH_PIN_5V 13
// Configure sensors
SolarRadiationSensor solarSensor(&RS485Serial, 1, RE_DE_PIN);

Zoe Michaela Dietmar Pfister
committed
RainGaugeSensor rainGauge = RainGaugeSensor(&RS485Serial,
2,
RE_DE_PIN); // Give 2 Sensor Adress 2
SoilMoistureSensor
soilSensor3 = SoilMoistureSensor(&RS485Serial, 3, RE_DE_PIN); //.....
SoilMoistureSensor soilSensor4 = SoilMoistureSensor(&RS485Serial, 4, RE_DE_PIN);
SoilMoistureSensor soilSensor5 = SoilMoistureSensor(&RS485Serial, 5, RE_DE_PIN);

Zoe Michaela Dietmar Pfister
committed
void Forte_RS485::setup() {
// configure the pins to be output only
pinMode(RE_DE_PIN, OUTPUT);
pinMode(POWER_SWITCH_PIN_12V, OUTPUT);
pinMode(POWER_SWITCH_PIN_5V, OUTPUT);
RS485Serial.begin(4800, SERIAL_8N1, TXPin, RXPin);

Zoe Michaela Dietmar Pfister
committed
out_data_rs485 Forte_RS485::readData() {
// Power on sensor
digitalWrite(POWER_SWITCH_PIN_12V, HIGH);
digitalWrite(POWER_SWITCH_PIN_5V, HIGH);
// Wait for sensors to power up
// TODO minimize delay
delay(300);
out_data_rs485 output;
unsigned long ts = millis();
output.solar = solarSensor.readData();
output.soil3 = soilSensor3.readData();
output.soil4 = soilSensor4.readData();
output.soil5 = soilSensor5.readData();
output.precipitation = rainGauge.readData();

Zoe Michaela Dietmar Pfister
committed
digitalWrite(POWER_SWITCH_PIN_12V, LOW);
digitalWrite(POWER_SWITCH_PIN_5V, LOW);

Zoe Michaela Dietmar Pfister
committed
gpio_hold_en((gpio_num_t) POWER_SWITCH_PIN_12V);
gpio_hold_en((gpio_num_t) POWER_SWITCH_PIN_5V);
return output;

Zoe Michaela Dietmar Pfister
committed
std::list<Message> Forte_RS485::buildMessages() {
std::list<Message> messages;
out_data_rs485 output = readData();
Measurement solarRadiation{output.solar.solarRadiation, 1, NO_I2C_ADDRESS,
MeasurementType::SOLAR_RADIATION,
output.solar.solarError};
Measurement precipitation
{output.precipitation.precipitation, 2, NO_I2C_ADDRESS,
MeasurementType::PRECIPITATION, output.precipitation.precipitationError};
Measurement soilTemp3{output.soil3.temperature, 3, NO_I2C_ADDRESS,
MeasurementType::SOIL_TEMPERATURE,
output.soil3.soilError};
Measurement soilTemp4{output.soil4.temperature, 4, NO_I2C_ADDRESS,
MeasurementType::SOIL_TEMPERATURE,
output.soil4.soilError};
Measurement soilTemp5{output.soil5.temperature, 5, NO_I2C_ADDRESS,
MeasurementType::SOIL_TEMPERATURE,
output.soil5.soilError};
Measurement soilMoisture3
{output.soil3.moisture, 3, NO_I2C_ADDRESS, MeasurementType::SOIL_MOISTURE,
output.soil3.soilError};
Measurement soilMoisture4
{output.soil4.moisture, 4, NO_I2C_ADDRESS, MeasurementType::SOIL_MOISTURE,
output.soil4.soilError};
Measurement soilMoisture5
{output.soil5.moisture, 5, NO_I2C_ADDRESS, MeasurementType::SOIL_MOISTURE,
output.soil5.soilError};

Zoe Michaela Dietmar Pfister
committed
messages.emplace_back(solarRadiation, sensorInformation,
Time::getInstance().getEpochSeconds());
messages.emplace_back(soilTemp3, sensorInformation,
Time::getInstance().getEpochSeconds());
messages.emplace_back(soilTemp4, sensorInformation,
Time::getInstance().getEpochSeconds());
messages.emplace_back(soilTemp5, sensorInformation,
Time::getInstance().getEpochSeconds());
messages.emplace_back(soilMoisture3, sensorInformation,
Time::getInstance().getEpochSeconds());
messages.emplace_back(soilMoisture4, sensorInformation,
Time::getInstance().getEpochSeconds());
messages.emplace_back(soilMoisture5, sensorInformation,
Time::getInstance().getEpochSeconds());
messages.emplace_back(precipitation,
sensorInformation,
Time::getInstance().getEpochSeconds());

Zoe Michaela Dietmar Pfister
committed
return messages;

Zoe Michaela Dietmar Pfister
committed
SensorInformation Forte_RS485::getSensorInformation() const {
return sensorInformation;