Using DHT11 sensor, sdWrite, wdt. Need to sleep more then this.

Dependencies:   DHT GPRSInterface HTTPClient_GPRS SDFileSystem USBDevice mbed

roam_v1.cpp

Committer:
seedteam20
Date:
2015-04-01
Revision:
0:b6b64c1e74bb

File content as of revision 0:b6b64c1e74bb:

/** Seed Team 20 - Michael Zonnenberg
    Board: Arch GPRS V2
    Sensors: DHT11 temp&humidity
 */
 
 #include "mbed.h"
 #include "DHT.h"
 #include "SDFileSystem.h"
 #include "GPRSInterface.h"
 #include "HTTPClient.h"
 #include "ARCH_GPRS_Sleep.h"

 
//LED Blink Functions
DigitalOut yellowled(LED1);
DigitalOut redled(LED2);
DigitalOut greenled(LED3);
DigitalOut blueled(LED4);
void blinkYELLOW(void){
    yellowled = 1;
    wait(0.5);
    yellowled = 0;
    wait(0.5);
    yellowled = 1;
    wait(0.5);
    yellowled = 0;
    wait(0.5);  
}
void blinkRED(void){
    redled = 1;
    wait(0.5);
    redled = 0;
    wait(0.5);
    redled = 1;
    wait(0.5);
    redled = 0;
    wait(0.5);  
}
void blinkBLUE(void){
    blueled = 1;
    wait(0.5);
    blueled = 0;
    wait(0.5);
    blueled = 1;
    wait(0.5);
    blueled = 0;
    wait(0.5);  
}
void blinkGREEN(void){
    greenled = 1;
    wait(0.5);
    greenled = 0;
    wait(0.5);
    greenled = 1;
    wait(0.5);
    greenled = 0;
    wait(0.5);  
}



#define PIN_PWR                 P1_2    //power up gprs module
#define PIN_PWR_KEY             P1_7
#define PIN_TX                  P1_27
#define PIN_RX                  P1_26
DigitalOut power(PIN_PWR);
DigitalOut powerKey(PIN_PWR_KEY);
void gprsPowerUp(void)
{
    power = 1;
    wait(2);
    power = 0;
    wait(2);
 
    powerKey = 0;
    wait(1);
    powerKey = 1;
    wait(2);
    powerKey = 0;
    wait(3);
}
void gprsPowerDown(void)
{
   power = 1;
   wait(2);
   power = 0;
   wait(2); 
}

#define TEST_HTTP_GET       1
#define TEST_HTTP_POST      1
#define TEST_HTTP_PUT       1
#define TEST_HTTP_DELETE    1

#define TS_FEED_ID              25152
#define TS_API                  "QY931S2NP23LG9IM"

char* thingSpeakUrl = "http://api.thingspeak.com/update";
char* thingSpeakKey = "QY931S2NP23LG9IM";
char urlBuffer[256];
char timeBuffer[64];
char str[1024];
GPRSInterface gprs(PIN_TX,PIN_RX,115200,"internetd.gdsp",NULL,NULL);
HTTPClient http;

/** 
    Function sends args to thingskpeak
    @param temperature The temperaure measurment from sensor
    @param humidity The humidity measurment from sensor
 */
void sendToThingSpeak(float temperature, float humidity){
    //turn on cellular module
    gprsPowerUp();

    gprs.init();
    
    int count = 0;
    while(false == gprs.connect() && count < 5) {
        wait(2);
        count += 1;
    }

    // format url here
    urlBuffer[0] = 0;
    sprintf(urlBuffer, "%s?key=%s&field1=%f&field2=%f", thingSpeakUrl, thingSpeakKey, temperature, humidity);

    // send request
    HTTPResult res = http.get(urlBuffer, str,128);
    // and verify the result
    if (res != HTTP_OK) {
        blinkRED();
    } else {
        blinkGREEN();
    }
    gprsPowerDown();
}

/** 
    Function sends args to thingskpeak
    @return temp and humid values from DHT11 sensor
 */
DHT sensor(P1_14, DHT11);
DigitalOut POWER(P1_3); //drive low to activate pins
void getTempHumid(float* temp, float* humid){
   int err = 1;
    wait(1); // wait 1 second for device stable status
    POWER.write(0);
    while (err != 0) {
        err = sensor.readData();
        *temp = sensor.ReadTemperature(FARENHEIT);
        *humid = sensor.ReadHumidity();
        wait(1);
        }     
}   

/** 
    Function writes data to sd card (comma seperated)
    @param temperature The temperaure measurment from sensor
    @param humidity The humidity measurment from sensor
 */
SDFileSystem sd(P1_22, P1_21, P1_20, P1_23, "sd"); // the pinout on the /Arch GPRS v2 mbed board.
void sdWrite(double temp, double humid)
{
    mkdir("/sd", 0777);           // All other times open file in append mode
    FILE *fp = fopen("/sd/node1.csv","a");
    fprintf(fp,"%4.2f, %4.2f\r\n",temp, humid);
    fclose(fp);
    blinkBLUE();
}

///////////////////////////////////////////////////////////////////////
#define BROADCAST_TIME      25     //sleep time
float temp,humid; 

int main(){
    
    wdt_sleep.wdtClkSetup(WDTCLK_SRC_IRC_OSC);
    
    PWRON:
    // get temp and humidity
    getTempHumid(&temp, &humid);
    
    sdWrite(temp, humid);

    // send data to ThingSpeak.com
    sendToThingSpeak(temp, humid);
    
    //sleep
    wdt_sleep.sleep(BROADCAST_TIME);
    
    //wake
    goto PWRON;
    
        
    
}