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

Dependencies:   DHT GPRSInterface HTTPClient_GPRS SDFileSystem USBDevice mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers roam_v1.cpp Source File

roam_v1.cpp

00001 /** Seed Team 20 - Michael Zonnenberg
00002     Board: Arch GPRS V2
00003     Sensors: DHT11 temp&humidity
00004  */
00005  
00006  #include "mbed.h"
00007  #include "DHT.h"
00008  #include "SDFileSystem.h"
00009  #include "GPRSInterface.h"
00010  #include "HTTPClient.h"
00011  #include "ARCH_GPRS_Sleep.h"
00012 
00013  
00014 //LED Blink Functions
00015 DigitalOut yellowled(LED1);
00016 DigitalOut redled(LED2);
00017 DigitalOut greenled(LED3);
00018 DigitalOut blueled(LED4);
00019 void blinkYELLOW(void){
00020     yellowled = 1;
00021     wait(0.5);
00022     yellowled = 0;
00023     wait(0.5);
00024     yellowled = 1;
00025     wait(0.5);
00026     yellowled = 0;
00027     wait(0.5);  
00028 }
00029 void blinkRED(void){
00030     redled = 1;
00031     wait(0.5);
00032     redled = 0;
00033     wait(0.5);
00034     redled = 1;
00035     wait(0.5);
00036     redled = 0;
00037     wait(0.5);  
00038 }
00039 void blinkBLUE(void){
00040     blueled = 1;
00041     wait(0.5);
00042     blueled = 0;
00043     wait(0.5);
00044     blueled = 1;
00045     wait(0.5);
00046     blueled = 0;
00047     wait(0.5);  
00048 }
00049 void blinkGREEN(void){
00050     greenled = 1;
00051     wait(0.5);
00052     greenled = 0;
00053     wait(0.5);
00054     greenled = 1;
00055     wait(0.5);
00056     greenled = 0;
00057     wait(0.5);  
00058 }
00059 
00060 
00061 
00062 #define PIN_PWR                 P1_2    //power up gprs module
00063 #define PIN_PWR_KEY             P1_7
00064 #define PIN_TX                  P1_27
00065 #define PIN_RX                  P1_26
00066 DigitalOut power(PIN_PWR);
00067 DigitalOut powerKey(PIN_PWR_KEY);
00068 void gprsPowerUp(void)
00069 {
00070     power = 1;
00071     wait(2);
00072     power = 0;
00073     wait(2);
00074  
00075     powerKey = 0;
00076     wait(1);
00077     powerKey = 1;
00078     wait(2);
00079     powerKey = 0;
00080     wait(3);
00081 }
00082 void gprsPowerDown(void)
00083 {
00084    power = 1;
00085    wait(2);
00086    power = 0;
00087    wait(2); 
00088 }
00089 
00090 #define TEST_HTTP_GET       1
00091 #define TEST_HTTP_POST      1
00092 #define TEST_HTTP_PUT       1
00093 #define TEST_HTTP_DELETE    1
00094 
00095 #define TS_FEED_ID              25152
00096 #define TS_API                  "QY931S2NP23LG9IM"
00097 
00098 char* thingSpeakUrl = "http://api.thingspeak.com/update";
00099 char* thingSpeakKey = "QY931S2NP23LG9IM";
00100 char urlBuffer[256];
00101 char timeBuffer[64];
00102 char str[1024];
00103 GPRSInterface gprs(PIN_TX,PIN_RX,115200,"internetd.gdsp",NULL,NULL);
00104 HTTPClient http;
00105 
00106 /** 
00107     Function sends args to thingskpeak
00108     @param temperature The temperaure measurment from sensor
00109     @param humidity The humidity measurment from sensor
00110  */
00111 void sendToThingSpeak(float temperature, float humidity){
00112     //turn on cellular module
00113     gprsPowerUp();
00114 
00115     gprs.init();
00116     
00117     int count = 0;
00118     while(false == gprs.connect() && count < 5) {
00119         wait(2);
00120         count += 1;
00121     }
00122 
00123     // format url here
00124     urlBuffer[0] = 0;
00125     sprintf(urlBuffer, "%s?key=%s&field1=%f&field2=%f", thingSpeakUrl, thingSpeakKey, temperature, humidity);
00126 
00127     // send request
00128     HTTPResult res = http.get(urlBuffer, str,128);
00129     // and verify the result
00130     if (res != HTTP_OK) {
00131         blinkRED();
00132     } else {
00133         blinkGREEN();
00134     }
00135     gprsPowerDown();
00136 }
00137 
00138 /** 
00139     Function sends args to thingskpeak
00140     @return temp and humid values from DHT11 sensor
00141  */
00142 DHT sensor(P1_14, DHT11);
00143 DigitalOut POWER(P1_3); //drive low to activate pins
00144 void getTempHumid(float* temp, float* humid){
00145    int err = 1;
00146     wait(1); // wait 1 second for device stable status
00147     POWER.write(0);
00148     while (err != 0) {
00149         err = sensor.readData();
00150         *temp = sensor.ReadTemperature(FARENHEIT);
00151         *humid = sensor.ReadHumidity();
00152         wait(1);
00153         }     
00154 }   
00155 
00156 /** 
00157     Function writes data to sd card (comma seperated)
00158     @param temperature The temperaure measurment from sensor
00159     @param humidity The humidity measurment from sensor
00160  */
00161 SDFileSystem sd(P1_22, P1_21, P1_20, P1_23, "sd"); // the pinout on the /Arch GPRS v2 mbed board.
00162 void sdWrite(double temp, double humid)
00163 {
00164     mkdir("/sd", 0777);           // All other times open file in append mode
00165     FILE *fp = fopen("/sd/node1.csv","a");
00166     fprintf(fp,"%4.2f, %4.2f\r\n",temp, humid);
00167     fclose(fp);
00168     blinkBLUE();
00169 }
00170 
00171 ///////////////////////////////////////////////////////////////////////
00172 #define BROADCAST_TIME      25     //sleep time
00173 float temp,humid; 
00174 
00175 int main(){
00176     
00177     wdt_sleep.wdtClkSetup(WDTCLK_SRC_IRC_OSC);
00178     
00179     PWRON:
00180     // get temp and humidity
00181     getTempHumid(&temp, &humid);
00182     
00183     sdWrite(temp, humid);
00184 
00185     // send data to ThingSpeak.com
00186     sendToThingSpeak(temp, humid);
00187     
00188     //sleep
00189     wdt_sleep.sleep(BROADCAST_TIME);
00190     
00191     //wake
00192     goto PWRON;
00193     
00194         
00195     
00196 }