St-connect

Dependencies:   HP206C mbed WakeUp QMC5883L DHT22 DS1820

  1. ST Conect Project Look how we did it : [Hackster](https://www.hackster.io/monginjulien/st-connect-dike-monitoring-534a32)

main.cpp

Committer:
raminou
Date:
2018-10-15
Revision:
5:d805b1c2dc1e
Parent:
1:6b6f96cbd12c
Child:
6:865aa63f2106

File content as of revision 5:d805b1c2dc1e:

#include "mbed.h"
#include "WakeUp.h"
#include "DHT22.h"
#include "HP20x_dev.h"
#include "DS1820.h"
#include "QMC5883L.h"

#define X_MSB 0x03
#define X_LSB 0x04
#define Z_MSB 0x05
#define Z_LSB 0x06
#define Y_MSB 0x07
#define Y_LSB 0x08
#define ADDR_MAGN_W 0x3C
#define ADDR_MAGN_R 0x3D

#define DEBUG 1
// #define SEND_SIGFOX 1

#ifdef DEBUG
    Serial pc(USBTX, USBRX);
#endif

HP20x_dev capt_barometer(D4, D5);
QMC5883L capt_magnetometer(D4, D5);
DS1820 capt_ground_temperature(A1);
AnalogIn capt_ground_humidity(A0);      // SEN0
DHT22 capt_thermo_air_humidity(D3);     // DHT22
Serial sigfox(D1, D0);

char message[20] = {};

long pressure = 10000;
float air_temperature = 20.0;
float air_humidity = 50.0;
float ground_temperature = 20.0;
float ground_humidity = 0.5;
int16_t magnetic_field[3] = {}; // x, y, z

void mycallback()
{
}

int main()
{
    sigfox.printf("\r\n");
    capt_magnetometer.init();
    #ifdef DEBUG
        pc.printf("\r\n\r\n\r\nInit...\r\n");
    #endif
    
    while(1) {
        // Temperature Sol
        capt_ground_temperature.convertTemperature(true, DS1820::all_devices);
        ground_temperature = capt_ground_temperature.temperature();
        
        // Humidite Sol
        ground_humidity = capt_ground_humidity.read();
        
        // Temperature et Humidite Air
        if(capt_thermo_air_humidity.sample())
        {
            air_temperature = capt_thermo_air_humidity.getTemperature() / 10.0;
            air_humidity = capt_thermo_air_humidity.getHumidity() / 10.0;
        }
        
        // Pression
        if(capt_barometer.isAvailable())
            pressure = capt_barometer.ReadPressure();
        
        // Magnetometre
        magnetic_field[0] = capt_magnetometer.getMagXvalue();
        magnetic_field[1] = capt_magnetometer.getMagYvalue();
        magnetic_field[2] = capt_magnetometer.getMagZvalue();
        
        // Affichage pour debug
        #ifdef DEBUG
            pc.printf("\r\n");
            pc.printf("Pressure: %f hPa\r\n", pressure/100.0);
            pc.printf("Ground Temperature: %f\t|\t", ground_temperature);
            pc.printf("Ground Humidity: %.1f\r\n", ground_humidity*100);
            pc.printf("Air Temperature: %.1f\t|\tAir Humidity: %.1f\r\n", air_temperature, air_humidity);
            pc.printf("Magnetic field: x: %hd, y: %hd, z: %hd\r\n", magnetic_field[0], magnetic_field[1], magnetic_field[2]);
        #endif
        
        // Envoie sigfox
        sprintf(message, "AT$SF=%04x%02x\r\n", (int)(air_temperature*10), (int)(air_humidity));
        #ifdef DEBUG
            pc.printf("%s", message);
        #endif
        
        #ifdef SEND_SIGFOX
            sigfox.printf("%s", message);
        #endif
        // DEEPSLEEP
        /*
        WakeUp::set_ms(10000);
        WakeUp::attach(&mycallback);
        deepsleep();
        */
        wait(5);
    }
}