Plant Monitoring Project

Dependencies:   mbed SHT21_ncleee WakeUp SSD1306 DHT Adafruit_TCS34725 DS1820

main.cpp

Committer:
Germaint
Date:
2019-10-08
Revision:
2:0bfe25431e8e
Parent:
1:3fc11a745984
Child:
3:fc704c1d3087

File content as of revision 2:0bfe25431e8e:

#include "mbed.h"
#include "DS1820.h"
#include "SHT21_ncleee.h"
#include "Adafruit_TCS34725.h"
#include "ssd1306.h"

#define I2C_SDA D4
#define I2C_SCL D5

//Serial pc(SERIAL_TX, SERIAL_RX);
Serial nucleo(D1,D0);

I2C i2c(I2C_SDA, I2C_SCL);
SSD1306 oled(I2C_SDA, I2C_SCL);

// capteur temperature sol
DS1820 DS(D3); 

// capteur humidité sol
AnalogIn capteur_humidity_sol(A0); 

// capteur humidité + température air
SHT21 sht(&i2c);

// capteur RGB
Adafruit_TCS34725 RGBsens = Adafruit_TCS34725(&i2c, TCS34725_INTEGRATIONTIME_2_4MS, TCS34725_GAIN_16X);

// capteur lumière
AnalogIn ain(A1); 

// Définition de fonctions
float   temp_sol(void);
int     fct_humidity_sol(void);
void    fct_RGB(unsigned char *pr, unsigned char *pg, unsigned char *pb);
float   fct_lumiere(void);
void    sendDataSigfox(float tempSol, unsigned char *humSol, float tempAir, unsigned char *humAir, unsigned short *lux, unsigned char *R, unsigned char *G, unsigned char *B);
void    oledData(void);


    float temperature_sol;
    unsigned char humidity_sol;
    float temperature_air;
    unsigned char humidity_air;
    unsigned char pr, pg, pb;
    unsigned short lum;
    
    
int main() {
    oled.speed (SSD1306::Medium);  // set working frequency
    oled.init();                   // initialize SSD1306
    oled.cls();                    // clear frame buffer
    oled.set_contrast(200);
        
    while(1) {
      
      temperature_sol = temp_sol();
      //pc.printf("T sol = %.2f\n\r", temperature_sol);
      
      humidity_sol = fct_humidity_sol();
      //pc.printf("H sol = %d\n\r", humidity_sol);
      
      temperature_air = sht.readTemp();
      //pc.printf("temperature_air = %.2f\n\r", temperature_air);
      
      humidity_air = sht.readHumidity();
      //pc.printf("humidity_air = %d\n\r", humidity_air);
      
      fct_RGB(&pr, &pg, &pb);
      //pc.printf("red=%d green=%d blue=%d\n\r", pr, pg, pb);
      
      lum = fct_lumiere();
      //pc.printf("lumiere = %d\n\r", lum);
        
      oledData();
      sendDataSigfox(temperature_sol, &humidity_sol, temperature_air, &humidity_air, &lum, &pr, &pg, &pb);
    
      //pc.printf("\n\r");
      wait(10);
    }
}


float temp_sol()
{
    DS.convertTemperature(true, DS1820::all_devices);
    if (DS.unassignedProbe(D3)){
        //pc.printf( "D3 not assigned\n\r");
    }
    return DS.temperature();
}

int fct_humidity_sol(void)
{
    float val_min = 0.377;
    float val_max = 0.772;
    float mesure, mesure_etalonnee;
    mesure = capteur_humidity_sol.read();
    mesure_etalonnee = (1-((mesure - val_min)/(val_max - val_min)))*100;
    return (int) mesure_etalonnee;
}

void fct_RGB(unsigned char *pr, unsigned char *pg, unsigned char *pb)
{
    int somme;
    uint16_t clear, red, green, blue;
    if (!RGBsens.begin())
    {
        //pc.printf("No TCS34725 found ... check your connections");
        while (1); // halt!
    }
        RGBsens.getRawData(&red, &green, &blue, &clear);
        somme = red + green + blue;
        *pr = red*100/somme;
        *pg = green*100/somme;
        *pb = blue*100/somme;
}

float fct_lumiere()
{
    float convertedValue;
    float valueIn;
    float rawRange = 0xFFFF; // 3.3v
    float logRange = 5.0; // 3.3v = 10^5 lux
    valueIn = ain.read_u16();
    float logLux = valueIn * logRange / rawRange;
    convertedValue =  pow(10, logLux);
    return convertedValue;
}


void sendDataSigfox(float tempSol, unsigned char *humSol, float tempAir, unsigned char *humAir, unsigned short *lux, unsigned char *R, unsigned char *G, unsigned char *B){
        short tempSol_short, tempAir_short;
        tempSol *= 10;
        tempAir *= 10;
        tempSol_short = (short) tempSol;
        tempAir_short = (short) tempAir;

        nucleo.printf("AT$SF=%04x%02x%04x%02x%04x%02x%02x%02x\r\n",tempSol_short, *humSol, tempAir_short, *humAir, *lux, *R, *G, *B);
    }
    
void oledData(void){
    oled.cls();
    oled.locate(0,0);
    oled.printf("AIR T : %.1f", temperature_air);
    oled.locate(1,0);
    oled.printf("AIR H : %d", humidity_air);
    oled.locate(3,0);
    oled.printf("FLOOR T : %.1f", temperature_sol);
    oled.locate(4,0);
    oled.printf("FLOOR H : %d", humidity_sol);
    oled.locate(6,0);
    oled.printf("Light : %d", lum);
    oled.locate(7,0);
    oled.printf("R %d G %d B %d", pr, pg, pb);
    
    oled.redraw();
}