Back to overview 3.2

Weather Station

Abstract

Weather monitoring is a common hobby of hackers and technology enthusiasts. The hardware and infrastructure is expanding quickly and it is often hard to set up. Today, we want to show you how easy it is to use the Connectino with a sparkfun weather shield to get temperature, pressure and humidity data to our Connectino Weather app.

Requirements

To setup the Arduino IDE for Connectino please use our Quick-Start-Guide available at: Initial Setup

You will need a Connectino and a Sparkfun Weather Shield like in the picture or a similar weather shield.

This tutorial was verified to work with the following software versions of the Connectino library and WiFi module firmware:

  • Connectino Library: 1.0
  • Wifi module firmware: 1.0 and 1.1

Hardware Setup

You just have to connect the Weather Shield to the Connectino. If you already know how to set it up with the Arduino, it will be no difference on the Connectino. Be aware of older hardware revisions.

Setup IDE

To use the Sparkfun Weather Shield you need to install the necessary libraries for the sensors. To do so, start the Arduino IDE, go on “Sketch”>”Include Library”>”Manage Libraries” and search for the libraries as shown in the pictures below and install them.

SparkFun HTU21D Humidity and Temperature Sensor Breakout:

SparkFun MPL3115A2 Altitude and Pressure Sensor Breakout:

Smartphone App

Connect device

When started the app will automatically search for Connectino devices in the connected local network. Make sure to have your smartphone either connected to the same network as your Connectino or to have it connected directly.

If you have to insert user credentials and did not change them it should be the default credentials.

User interface

The app shows the measured temperature (Temperatur), pressure (Druck) and humidity (Feuchtigkeit) as numbers and with graphical representations in between the configured limits. In the header the city configured and sent by the sketch is displayed, as well as the date and time of the last received measurement update. On the right you see these buttons with the following functions:

Upload sketch button (left): Upload an example sketch to the connected Connectino. The app includes the sketch, so you don’t have to worry about how to get the sketch into the app. To use your own sketch just upload it as per usual.

Configuration button (right): For further configuration of the Connectino the Connectino app will be started. If you don’t have it installed yet, the playstore will be opened on the according page.

Search devices button (middle): You can restart the device search, to find all the Connectinos available trough your network. When the scan finished you can choose another device with a weather shield to observe.

Download the Weather Connectino App:


Android App:


IPhone App:

/

Code

Setup Function

On the startup the Connectino has to configure and to enable the sensors on the weathershield as well as the ajax communication on the IoT-Module.

Loop Function

In the running programm, it is always checked, if an app sent a query for weather information. If it did, all requested informations are fetched from the sensors and sent back to the app.

Sourcecode

Download example: ConnectinoWeather.ino

#include <ConnectinoAjax.h> // Library for Communication with the Connectino
#include <SoftwareSerial.h> // Necessary for Connectino
#include <Wire.h> //I2C needed for sensors
#include "SparkFunMPL3115A2.h" //Pressure sensor
#include "SparkFunHTU21D.h" //Humidity sensor

#define ZONE "+1"
#define PLACE "Hannover"
#define T_MAX 40  // Temperature maximum, Default: 85
#define T_MIN -20  // Temperature minimum, Default: -40
#define T_UNIT "°C"  // Temperature unit, Default: "C"
#define P_MAX 1060  // Pressure maximum, Default: 1100
#define P_MIN 966  // Pressure minimum, Default: 500


MPL3115A2 pressure; //Create an instance of the pressure sensor
HTU21D humidity; //Create an instance of the humidity sensor


// Variables to save the values in
float hum = 0; // Humidity[%]
float tempf = 0; // [temperature °F]
float tempc = 0; // [temperature °C]
float press = 0; // Pressure[Pa]
uint16_t cmdLen = 0; // the length of the command (not used)
uint8_t cmdReadingHead = 0;
char ajaxCmd[32] = "";
String ajaxResponse = "";

ConnectinoAjax ajax = ConnectinoAjax(StxSerial);
SoftwareSerial debug = SoftwareSerial(4,5);

void setup() {
  //Configure the pressure sensor
  pressure.begin();               // Get sensor online
  pressure.setModeBarometer();    // Measure pressure in Pascals from 20 to 110 kPa
  pressure.setOversampleRate(7);  // Set Oversample to the recommended 128 (=>7)
  pressure.enableEventFlags();    // Enable all three pressure and temp event flags 

  StxSerial.begin(115200);
  StxSerial.add(ajax);

  debug.begin(9600);

  //Configure the humidity sensor
  humidity.begin();
}

void loop() {
  //Get command from Connectino
  if (ajax.dataAvailable())
  {
    ajax.getData(ajaxCmd, cmdLen);    
    cmdReadingHead = 0;
    while ( cmdReadingHead < cmdLen ) {
      switch (ajaxCmd[cmdReadingHead]){

        case 'c':
          //Return the config for the temperature scale
        ajaxResponse.concat("c="
          + String(T_MIN) + ","
          + String(T_MAX) + ","
          + T_UNIT);
        break;
           case 'd':
          //Return the config for the pressure scale
          ajaxResponse.concat("d=" + String(P_MIN) + "," + String(P_MAX));
        break;
        case 't':
          //Measure temp in fahrenheit from pressure sensor
          tempf = pressure.readTempF();
          //Convert from Fahrenheit to Celsius
          tempc = (tempf - 32) / 1.8 ;
          ajaxResponse.concat("t=" + String(tempc));
          break;

        case 'p':
          //Calc pressure & Convert from pascal to hektoPascal
          press = pressure.readPressure() / 100;
          ajaxResponse.concat("p=" + String(press));
          break;

        case 'h':
          //Calc humidity
          hum = humidity.readHumidity();
          ajaxResponse.concat("h=" + String(hum));
          break;

        case 'z':
          //respond time zone
          ajaxResponse.concat("z="ZONE);
          break;

        case 'l':
          //respond place/location
          ajaxResponse.concat("l="PLACE);
          break;

        default:
          ajaxResponse.concat(";");
          break;
      }
      cmdReadingHead++;
    }
    ajax.respond(ajaxResponse.c_str()); // send response
    ajaxResponse = ""; // "clear" response
  }
}
	

Conclusion

You see monitoring the weather can be very easy. You just need your Connectino, a Weather Shield and the app on your smartphone and within Minutes you can work your own weather station.

Troubleshooting

The Humidity is -998 or the given minimum

-998 on humidity is an errorcode of the sparkfun-library, meaning that the communication with the shield failed. If your Connectino got a 5V and a 3V output, connect the 5V port to the Vin port. If you still get the error code, check the connection pins of the shield.

TUTORIALS