Development

» Ag xtr 19: frame class utility

This is the basic code to create frames with all sensors used in the Agriculture Board v30

Required Materials

- 1 Waspmote Plug & Sense! Smart Agriculture Xtreme
- several Smart Agriculture Xtreme sensors

Notes

- This example is only valid for Waspmote v15

Code

/*
    ----------- [Ag_xtr_20] - Frame class utility --------------------

    Explanation:  This is the basic code to create a frame with some
    Smart Agriculture Xtreme sensors. 
    
    Measured parameters:
      - Multiple

    Copyright (C) 2018 Libelium Comunicaciones Distribuidas S.L.
    http://www.libelium.com

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.

    Version:           3.0
    Design:            David Gascón
    Implementation:    J.Siscart, V.Boria
*/

#include <WaspSensorAgrXtr.h>
#include <WaspFrame.h>

char node_ID[] = "Node_01";

//[Sensor Class] [Sensor Name] [Selected socket]
bme myBME280_A(AGR_XTR_SOCKET_A);
leafWetness myPhytos31_B;
Decagon_5TE my5TE_C(AGR_XTR_SOCKET_C);
luxes myTSL2561_D(AGR_XTR_SOCKET_D);
weatherStation myGMX240_E;
Apogee_SP510 mySP510_F(AGR_XTR_SOCKET_F);


void setup()
{
  USB.println(F("Frame utility example for Smart Agriculture Xtreme"));

  // set the Plug & Sense! node ID
  frame.setID(node_ID);

  // Weather station is turned ON on setup() and is not turned OFF
  myGMX240_E.ON();
}

void loop()
{
  ///////////////////////////////////////////
  //  1. Read the sensors
  ///////////////////////////////////////////

  // Socket A sensor
  // Turn ON the sensor
  myBME280_A.ON();
  // Read the sensor. Store parameters in variables
  float temperature_A = myBME280_A.getTemperature();
  float humidity_A = myBME280_A.getHumidity();
  float pressure_A = myBME280_A.getPressure();
  // Turn off the sensor
  myBME280_A.OFF();

  // Socket B sensor
  // Turn ON the sensor
  myPhytos31_B.ON();
  // Read the sensor
  myPhytos31_B.read();
  // Turn off the sensor
  myPhytos31_B.OFF();

  // Socket C sensor
  // Turn ON the sensor
  my5TE_C.ON();
  // Read the sensor
  my5TE_C.read();
  // Turn off the sensor
  my5TE_C.OFF();

  // Socket D sensor
  // Turn ON the sensor
  myTSL2561_D.ON();
  // Read the sensor. Store parameter in variable
  uint32_t luminosity_D = myTSL2561_D.getLuminosity();
  // Turn off the sensor
  myTSL2561_D.OFF();

  // Socket E sensor
  // Read the sensor
  myGMX240_E.read();

  // Socket F sensor
  // Turn ON the sensor and the heater and wait some time
  mySP510_F.ON();
  delay(10000);
  // Read the sensor
  mySP510_F.read();
  // Turn off the sensor and the heater
  mySP510_F.OFF();


  ///////////////////////////////////////////
  //  2. Create ASCII frame
  ///////////////////////////////////////////

  // Create new frame (ASCII)
  frame.createFrame(ASCII);

  // It is mandatory to specify the Smart Agriculture Xtreme type
  frame.setFrameType(INFORMATION_FRAME_AGR_XTR);

  // add Socket A sensor values
  frame.addSensor(AGRX_TC_A, temperature_A);
  frame.addSensor(AGRX_HUM_A, humidity_A);
  frame.addSensor(AGRX_PRES_A, pressure_A);
  
  // add Socket B sensor values
  frame.addSensor(AGRX_LW, myPhytos31_B.wetness);
  
  // add Socket C sensor values
  frame.addSensor(AGRX_5TE_DP2_C, my5TE_C.sensor5TE.dielectricPermittivity);
  frame.addSensor(AGRX_5TE_EC2_C, my5TE_C.sensor5TE.electricalConductivity);
  frame.addSensor(AGRX_5TE_TC4_C, my5TE_C.sensor5TE.temperature);
  
  // add Socket D sensor values
  frame.addSensor(AGRX_LUXES_D, luminosity_D);
  
  // add Socket E sensor values
  frame.addSensor(AGRX_GMX_AWD, myGMX240_E.gmx240.average_wind_direction);

  float average_wind_speed_float = atof (myGMX240_E.gmx240.average_wind_speed);
  frame.addSensor(AGRX_GMX_AWS, average_wind_speed_float);

  float precipitation_intensity_float = atof (myGMX240_E.gmx240.precipitation_intensity);
  frame.addSensor(AGRX_GMX_PI, precipitation_intensity_float);

  float precipitation_total_float = atof (myGMX240_E.gmx240.precipitation_total);
  frame.addSensor(AGRX_GMX_PT, precipitation_total_float);

  // add Socket F sensor values
  frame.addSensor(AGRX_SR_F, mySP510_F.radiation);

  // Show the frame
  frame.showFrame();


  ///////////////////////////////////////////
  // 3. Sleep
  ///////////////////////////////////////////

  // Go to deepsleep
  // After 30 seconds, Waspmote wakes up thanks to the RTC Alarm
  PWR.deepSleep("00:00:00:30", RTC_OFFSET, RTC_ALM1_MODE1, ALL_OFF);

}

Output

H#
Frame utility example for Smart Agriculture Xtreme
===============================
Current ASCII Frame:
Length: 178
Frame Type: 135
frame (HEX): 3C3D3E870D2330423541373836334439333734324446234E6F64655F303123302354435F413A2D313030302E30302348554D5F413A2D313030302E3023505245535F413A2D313030302E3030234C573A312E34393834234450325F433A302E3030234543325F433A302E3030235443345F433A302E30234C55585F443A34323934393637323935234157443A30234157533A302E30302350493A302E30302350543A302E30302353525F463A32362E333123
frame (STR): <=>�
#0B5A7863D93742DF#Node_01#0#TC_A:27.24#HUM_A:46.2#PRES_A:98942.52#LW:0.0184#DP2_C:0.15#EC2_C:5.12#TC4_C:26.5#LUX_D:95#AWD:0#AWS:0.00#PI:0.00#PT:0.00#SR_F:26.31#
===============================

Quick Publish: