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

Dependencies:   DHT GPRSInterface HTTPClient_GPRS SDFileSystem USBDevice mbed

Committer:
seedteam20
Date:
Wed Apr 01 16:16:13 2015 +0000
Revision:
0:b6b64c1e74bb
Using DHT11 sensor and wdt. Not fully going to sleep.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
seedteam20 0:b6b64c1e74bb 1 /** Seed Team 20 - Michael Zonnenberg
seedteam20 0:b6b64c1e74bb 2 Board: Arch GPRS V2
seedteam20 0:b6b64c1e74bb 3 Sensors: DHT11 temp&humidity
seedteam20 0:b6b64c1e74bb 4 */
seedteam20 0:b6b64c1e74bb 5
seedteam20 0:b6b64c1e74bb 6 #include "mbed.h"
seedteam20 0:b6b64c1e74bb 7 #include "DHT.h"
seedteam20 0:b6b64c1e74bb 8 #include "SDFileSystem.h"
seedteam20 0:b6b64c1e74bb 9 #include "GPRSInterface.h"
seedteam20 0:b6b64c1e74bb 10 #include "HTTPClient.h"
seedteam20 0:b6b64c1e74bb 11 #include "ARCH_GPRS_Sleep.h"
seedteam20 0:b6b64c1e74bb 12
seedteam20 0:b6b64c1e74bb 13
seedteam20 0:b6b64c1e74bb 14 //LED Blink Functions
seedteam20 0:b6b64c1e74bb 15 DigitalOut yellowled(LED1);
seedteam20 0:b6b64c1e74bb 16 DigitalOut redled(LED2);
seedteam20 0:b6b64c1e74bb 17 DigitalOut greenled(LED3);
seedteam20 0:b6b64c1e74bb 18 DigitalOut blueled(LED4);
seedteam20 0:b6b64c1e74bb 19 void blinkYELLOW(void){
seedteam20 0:b6b64c1e74bb 20 yellowled = 1;
seedteam20 0:b6b64c1e74bb 21 wait(0.5);
seedteam20 0:b6b64c1e74bb 22 yellowled = 0;
seedteam20 0:b6b64c1e74bb 23 wait(0.5);
seedteam20 0:b6b64c1e74bb 24 yellowled = 1;
seedteam20 0:b6b64c1e74bb 25 wait(0.5);
seedteam20 0:b6b64c1e74bb 26 yellowled = 0;
seedteam20 0:b6b64c1e74bb 27 wait(0.5);
seedteam20 0:b6b64c1e74bb 28 }
seedteam20 0:b6b64c1e74bb 29 void blinkRED(void){
seedteam20 0:b6b64c1e74bb 30 redled = 1;
seedteam20 0:b6b64c1e74bb 31 wait(0.5);
seedteam20 0:b6b64c1e74bb 32 redled = 0;
seedteam20 0:b6b64c1e74bb 33 wait(0.5);
seedteam20 0:b6b64c1e74bb 34 redled = 1;
seedteam20 0:b6b64c1e74bb 35 wait(0.5);
seedteam20 0:b6b64c1e74bb 36 redled = 0;
seedteam20 0:b6b64c1e74bb 37 wait(0.5);
seedteam20 0:b6b64c1e74bb 38 }
seedteam20 0:b6b64c1e74bb 39 void blinkBLUE(void){
seedteam20 0:b6b64c1e74bb 40 blueled = 1;
seedteam20 0:b6b64c1e74bb 41 wait(0.5);
seedteam20 0:b6b64c1e74bb 42 blueled = 0;
seedteam20 0:b6b64c1e74bb 43 wait(0.5);
seedteam20 0:b6b64c1e74bb 44 blueled = 1;
seedteam20 0:b6b64c1e74bb 45 wait(0.5);
seedteam20 0:b6b64c1e74bb 46 blueled = 0;
seedteam20 0:b6b64c1e74bb 47 wait(0.5);
seedteam20 0:b6b64c1e74bb 48 }
seedteam20 0:b6b64c1e74bb 49 void blinkGREEN(void){
seedteam20 0:b6b64c1e74bb 50 greenled = 1;
seedteam20 0:b6b64c1e74bb 51 wait(0.5);
seedteam20 0:b6b64c1e74bb 52 greenled = 0;
seedteam20 0:b6b64c1e74bb 53 wait(0.5);
seedteam20 0:b6b64c1e74bb 54 greenled = 1;
seedteam20 0:b6b64c1e74bb 55 wait(0.5);
seedteam20 0:b6b64c1e74bb 56 greenled = 0;
seedteam20 0:b6b64c1e74bb 57 wait(0.5);
seedteam20 0:b6b64c1e74bb 58 }
seedteam20 0:b6b64c1e74bb 59
seedteam20 0:b6b64c1e74bb 60
seedteam20 0:b6b64c1e74bb 61
seedteam20 0:b6b64c1e74bb 62 #define PIN_PWR P1_2 //power up gprs module
seedteam20 0:b6b64c1e74bb 63 #define PIN_PWR_KEY P1_7
seedteam20 0:b6b64c1e74bb 64 #define PIN_TX P1_27
seedteam20 0:b6b64c1e74bb 65 #define PIN_RX P1_26
seedteam20 0:b6b64c1e74bb 66 DigitalOut power(PIN_PWR);
seedteam20 0:b6b64c1e74bb 67 DigitalOut powerKey(PIN_PWR_KEY);
seedteam20 0:b6b64c1e74bb 68 void gprsPowerUp(void)
seedteam20 0:b6b64c1e74bb 69 {
seedteam20 0:b6b64c1e74bb 70 power = 1;
seedteam20 0:b6b64c1e74bb 71 wait(2);
seedteam20 0:b6b64c1e74bb 72 power = 0;
seedteam20 0:b6b64c1e74bb 73 wait(2);
seedteam20 0:b6b64c1e74bb 74
seedteam20 0:b6b64c1e74bb 75 powerKey = 0;
seedteam20 0:b6b64c1e74bb 76 wait(1);
seedteam20 0:b6b64c1e74bb 77 powerKey = 1;
seedteam20 0:b6b64c1e74bb 78 wait(2);
seedteam20 0:b6b64c1e74bb 79 powerKey = 0;
seedteam20 0:b6b64c1e74bb 80 wait(3);
seedteam20 0:b6b64c1e74bb 81 }
seedteam20 0:b6b64c1e74bb 82 void gprsPowerDown(void)
seedteam20 0:b6b64c1e74bb 83 {
seedteam20 0:b6b64c1e74bb 84 power = 1;
seedteam20 0:b6b64c1e74bb 85 wait(2);
seedteam20 0:b6b64c1e74bb 86 power = 0;
seedteam20 0:b6b64c1e74bb 87 wait(2);
seedteam20 0:b6b64c1e74bb 88 }
seedteam20 0:b6b64c1e74bb 89
seedteam20 0:b6b64c1e74bb 90 #define TEST_HTTP_GET 1
seedteam20 0:b6b64c1e74bb 91 #define TEST_HTTP_POST 1
seedteam20 0:b6b64c1e74bb 92 #define TEST_HTTP_PUT 1
seedteam20 0:b6b64c1e74bb 93 #define TEST_HTTP_DELETE 1
seedteam20 0:b6b64c1e74bb 94
seedteam20 0:b6b64c1e74bb 95 #define TS_FEED_ID 25152
seedteam20 0:b6b64c1e74bb 96 #define TS_API "QY931S2NP23LG9IM"
seedteam20 0:b6b64c1e74bb 97
seedteam20 0:b6b64c1e74bb 98 char* thingSpeakUrl = "http://api.thingspeak.com/update";
seedteam20 0:b6b64c1e74bb 99 char* thingSpeakKey = "QY931S2NP23LG9IM";
seedteam20 0:b6b64c1e74bb 100 char urlBuffer[256];
seedteam20 0:b6b64c1e74bb 101 char timeBuffer[64];
seedteam20 0:b6b64c1e74bb 102 char str[1024];
seedteam20 0:b6b64c1e74bb 103 GPRSInterface gprs(PIN_TX,PIN_RX,115200,"internetd.gdsp",NULL,NULL);
seedteam20 0:b6b64c1e74bb 104 HTTPClient http;
seedteam20 0:b6b64c1e74bb 105
seedteam20 0:b6b64c1e74bb 106 /**
seedteam20 0:b6b64c1e74bb 107 Function sends args to thingskpeak
seedteam20 0:b6b64c1e74bb 108 @param temperature The temperaure measurment from sensor
seedteam20 0:b6b64c1e74bb 109 @param humidity The humidity measurment from sensor
seedteam20 0:b6b64c1e74bb 110 */
seedteam20 0:b6b64c1e74bb 111 void sendToThingSpeak(float temperature, float humidity){
seedteam20 0:b6b64c1e74bb 112 //turn on cellular module
seedteam20 0:b6b64c1e74bb 113 gprsPowerUp();
seedteam20 0:b6b64c1e74bb 114
seedteam20 0:b6b64c1e74bb 115 gprs.init();
seedteam20 0:b6b64c1e74bb 116
seedteam20 0:b6b64c1e74bb 117 int count = 0;
seedteam20 0:b6b64c1e74bb 118 while(false == gprs.connect() && count < 5) {
seedteam20 0:b6b64c1e74bb 119 wait(2);
seedteam20 0:b6b64c1e74bb 120 count += 1;
seedteam20 0:b6b64c1e74bb 121 }
seedteam20 0:b6b64c1e74bb 122
seedteam20 0:b6b64c1e74bb 123 // format url here
seedteam20 0:b6b64c1e74bb 124 urlBuffer[0] = 0;
seedteam20 0:b6b64c1e74bb 125 sprintf(urlBuffer, "%s?key=%s&field1=%f&field2=%f", thingSpeakUrl, thingSpeakKey, temperature, humidity);
seedteam20 0:b6b64c1e74bb 126
seedteam20 0:b6b64c1e74bb 127 // send request
seedteam20 0:b6b64c1e74bb 128 HTTPResult res = http.get(urlBuffer, str,128);
seedteam20 0:b6b64c1e74bb 129 // and verify the result
seedteam20 0:b6b64c1e74bb 130 if (res != HTTP_OK) {
seedteam20 0:b6b64c1e74bb 131 blinkRED();
seedteam20 0:b6b64c1e74bb 132 } else {
seedteam20 0:b6b64c1e74bb 133 blinkGREEN();
seedteam20 0:b6b64c1e74bb 134 }
seedteam20 0:b6b64c1e74bb 135 gprsPowerDown();
seedteam20 0:b6b64c1e74bb 136 }
seedteam20 0:b6b64c1e74bb 137
seedteam20 0:b6b64c1e74bb 138 /**
seedteam20 0:b6b64c1e74bb 139 Function sends args to thingskpeak
seedteam20 0:b6b64c1e74bb 140 @return temp and humid values from DHT11 sensor
seedteam20 0:b6b64c1e74bb 141 */
seedteam20 0:b6b64c1e74bb 142 DHT sensor(P1_14, DHT11);
seedteam20 0:b6b64c1e74bb 143 DigitalOut POWER(P1_3); //drive low to activate pins
seedteam20 0:b6b64c1e74bb 144 void getTempHumid(float* temp, float* humid){
seedteam20 0:b6b64c1e74bb 145 int err = 1;
seedteam20 0:b6b64c1e74bb 146 wait(1); // wait 1 second for device stable status
seedteam20 0:b6b64c1e74bb 147 POWER.write(0);
seedteam20 0:b6b64c1e74bb 148 while (err != 0) {
seedteam20 0:b6b64c1e74bb 149 err = sensor.readData();
seedteam20 0:b6b64c1e74bb 150 *temp = sensor.ReadTemperature(FARENHEIT);
seedteam20 0:b6b64c1e74bb 151 *humid = sensor.ReadHumidity();
seedteam20 0:b6b64c1e74bb 152 wait(1);
seedteam20 0:b6b64c1e74bb 153 }
seedteam20 0:b6b64c1e74bb 154 }
seedteam20 0:b6b64c1e74bb 155
seedteam20 0:b6b64c1e74bb 156 /**
seedteam20 0:b6b64c1e74bb 157 Function writes data to sd card (comma seperated)
seedteam20 0:b6b64c1e74bb 158 @param temperature The temperaure measurment from sensor
seedteam20 0:b6b64c1e74bb 159 @param humidity The humidity measurment from sensor
seedteam20 0:b6b64c1e74bb 160 */
seedteam20 0:b6b64c1e74bb 161 SDFileSystem sd(P1_22, P1_21, P1_20, P1_23, "sd"); // the pinout on the /Arch GPRS v2 mbed board.
seedteam20 0:b6b64c1e74bb 162 void sdWrite(double temp, double humid)
seedteam20 0:b6b64c1e74bb 163 {
seedteam20 0:b6b64c1e74bb 164 mkdir("/sd", 0777); // All other times open file in append mode
seedteam20 0:b6b64c1e74bb 165 FILE *fp = fopen("/sd/node1.csv","a");
seedteam20 0:b6b64c1e74bb 166 fprintf(fp,"%4.2f, %4.2f\r\n",temp, humid);
seedteam20 0:b6b64c1e74bb 167 fclose(fp);
seedteam20 0:b6b64c1e74bb 168 blinkBLUE();
seedteam20 0:b6b64c1e74bb 169 }
seedteam20 0:b6b64c1e74bb 170
seedteam20 0:b6b64c1e74bb 171 ///////////////////////////////////////////////////////////////////////
seedteam20 0:b6b64c1e74bb 172 #define BROADCAST_TIME 25 //sleep time
seedteam20 0:b6b64c1e74bb 173 float temp,humid;
seedteam20 0:b6b64c1e74bb 174
seedteam20 0:b6b64c1e74bb 175 int main(){
seedteam20 0:b6b64c1e74bb 176
seedteam20 0:b6b64c1e74bb 177 wdt_sleep.wdtClkSetup(WDTCLK_SRC_IRC_OSC);
seedteam20 0:b6b64c1e74bb 178
seedteam20 0:b6b64c1e74bb 179 PWRON:
seedteam20 0:b6b64c1e74bb 180 // get temp and humidity
seedteam20 0:b6b64c1e74bb 181 getTempHumid(&temp, &humid);
seedteam20 0:b6b64c1e74bb 182
seedteam20 0:b6b64c1e74bb 183 sdWrite(temp, humid);
seedteam20 0:b6b64c1e74bb 184
seedteam20 0:b6b64c1e74bb 185 // send data to ThingSpeak.com
seedteam20 0:b6b64c1e74bb 186 sendToThingSpeak(temp, humid);
seedteam20 0:b6b64c1e74bb 187
seedteam20 0:b6b64c1e74bb 188 //sleep
seedteam20 0:b6b64c1e74bb 189 wdt_sleep.sleep(BROADCAST_TIME);
seedteam20 0:b6b64c1e74bb 190
seedteam20 0:b6b64c1e74bb 191 //wake
seedteam20 0:b6b64c1e74bb 192 goto PWRON;
seedteam20 0:b6b64c1e74bb 193
seedteam20 0:b6b64c1e74bb 194
seedteam20 0:b6b64c1e74bb 195
seedteam20 0:b6b64c1e74bb 196 }