Using DHT11 sensor, sdWrite, wdt. Need to sleep more then this.
Dependencies: DHT GPRSInterface HTTPClient_GPRS SDFileSystem USBDevice mbed
roam_v1.cpp@0:b6b64c1e74bb, 2015-04-01 (annotated)
- 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?
User | Revision | Line number | New 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 | } |