Sensors: DHT11, TEMT600 Analog ambient light sensor This version uses the ARCH_GPRS_V2_HW library.
Dependencies: ARCH_GPRS_V2_HW Blinker DHT GPRSInterface HTTPClient_GPRS SDFileSystem mbed
Fork of roam_v1 by
roam_v2.cpp@2:fa721e0fff30, 2015-04-09 (annotated)
- Committer:
- seedteam20
- Date:
- Thu Apr 09 22:10:04 2015 +0000
- Revision:
- 2:fa721e0fff30
- Parent:
- 1:3d2e110f5dc8
Roam V2
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
seedteam20 | 1:3d2e110f5dc8 | 1 | /** Seed Team 20 - Michael Zonnenberg |
seedteam20 | 1:3d2e110f5dc8 | 2 | Board: Arch GPRS V2 |
seedteam20 | 1:3d2e110f5dc8 | 3 | Sensors: DHT11 temp&humidity |
seedteam20 | 1:3d2e110f5dc8 | 4 | */ |
seedteam20 | 1:3d2e110f5dc8 | 5 | |
seedteam20 | 1:3d2e110f5dc8 | 6 | #include "mbed.h" |
seedteam20 | 1:3d2e110f5dc8 | 7 | #include "ARCH_GPRS_V2_HW.h" |
seedteam20 | 1:3d2e110f5dc8 | 8 | #include "HTTPClient.h" |
seedteam20 | 1:3d2e110f5dc8 | 9 | #include "GPRSInterface.h" |
seedteam20 | 1:3d2e110f5dc8 | 10 | #include "Blinker.h" |
seedteam20 | 1:3d2e110f5dc8 | 11 | #include "DHT.h" |
seedteam20 | 1:3d2e110f5dc8 | 12 | #include "i2c_uart.h" |
seedteam20 | 1:3d2e110f5dc8 | 13 | #include "ARCH_GPRS_Sleep.h" |
seedteam20 | 1:3d2e110f5dc8 | 14 | |
seedteam20 | 1:3d2e110f5dc8 | 15 | //LED Blink |
seedteam20 | 1:3d2e110f5dc8 | 16 | Blinker yellowLED(LED1), redLED(LED2), greenLED(LED3), blueLED(LED4); |
seedteam20 | 1:3d2e110f5dc8 | 17 | |
seedteam20 | 1:3d2e110f5dc8 | 18 | //DHT11 Sensor |
seedteam20 | 1:3d2e110f5dc8 | 19 | int temp, humidity; |
seedteam20 | 1:3d2e110f5dc8 | 20 | DHT sensor(P1_14, DHT11); |
seedteam20 | 1:3d2e110f5dc8 | 21 | |
seedteam20 | 1:3d2e110f5dc8 | 22 | //TEMT6000 Ambient Light Sensor, Using P0_12 |
seedteam20 | 1:3d2e110f5dc8 | 23 | int light; |
seedteam20 | 1:3d2e110f5dc8 | 24 | AnalogIn lightSensor(P0_12); |
seedteam20 | 1:3d2e110f5dc8 | 25 | |
seedteam20 | 1:3d2e110f5dc8 | 26 | #define BROADCAST_TIME 100 |
seedteam20 | 1:3d2e110f5dc8 | 27 | #define THINGSPEAK_APIKEY "QY931S2NP23LG9IM" |
seedteam20 | 1:3d2e110f5dc8 | 28 | |
seedteam20 | 1:3d2e110f5dc8 | 29 | #define HTTP_POST_URL "http://api.thingspeak.com/update" |
seedteam20 | 1:3d2e110f5dc8 | 30 | |
seedteam20 | 1:3d2e110f5dc8 | 31 | #define TEST_HTTP_GET 1 |
seedteam20 | 1:3d2e110f5dc8 | 32 | #define TEST_HTTP_POST 1 |
seedteam20 | 1:3d2e110f5dc8 | 33 | #define TEST_HTTP_PUT 1 |
seedteam20 | 1:3d2e110f5dc8 | 34 | #define TEST_HTTP_DELETE 1 |
seedteam20 | 1:3d2e110f5dc8 | 35 | |
seedteam20 | 1:3d2e110f5dc8 | 36 | #define PIN_TX P1_27 |
seedteam20 | 1:3d2e110f5dc8 | 37 | #define PIN_RX P1_26 |
seedteam20 | 1:3d2e110f5dc8 | 38 | |
seedteam20 | 1:3d2e110f5dc8 | 39 | #define TS_FEED_ID 25152 |
seedteam20 | 1:3d2e110f5dc8 | 40 | #define TS_API "JDMPGG7T7O8OY45M" |
seedteam20 | 1:3d2e110f5dc8 | 41 | |
seedteam20 | 1:3d2e110f5dc8 | 42 | char* thingSpeakUrl = "http://api.thingspeak.com/update"; |
seedteam20 | 1:3d2e110f5dc8 | 43 | char* thingSpeakKey = TS_API; |
seedteam20 | 1:3d2e110f5dc8 | 44 | char urlBuffer[256]; |
seedteam20 | 1:3d2e110f5dc8 | 45 | char timeBuffer[64]; |
seedteam20 | 1:3d2e110f5dc8 | 46 | char str[1024]; |
seedteam20 | 1:3d2e110f5dc8 | 47 | GPRSInterface gprs(PIN_TX,PIN_RX,115200,"internetd.gdsp",NULL,NULL); |
seedteam20 | 1:3d2e110f5dc8 | 48 | HTTPClient http; |
seedteam20 | 1:3d2e110f5dc8 | 49 | /** |
seedteam20 | 1:3d2e110f5dc8 | 50 | Function sends args to thingskpeak |
seedteam20 | 1:3d2e110f5dc8 | 51 | Blinks green LED 5 times if success |
seedteam20 | 1:3d2e110f5dc8 | 52 | Blinks red LED 5 times if failure |
seedteam20 | 1:3d2e110f5dc8 | 53 | @param temperature The temperaure measurment from sensor |
seedteam20 | 1:3d2e110f5dc8 | 54 | @param humidity The humidity measurment from sensor |
seedteam20 | 1:3d2e110f5dc8 | 55 | @param light The light measurement from analog sensor |
seedteam20 | 1:3d2e110f5dc8 | 56 | */ |
seedteam20 | 1:3d2e110f5dc8 | 57 | void sendToThingSpeak(int sensor1, int sensor2, int sensor3){ |
seedteam20 | 1:3d2e110f5dc8 | 58 | iot_hw.init(); // power on SIM900 |
seedteam20 | 1:3d2e110f5dc8 | 59 | |
seedteam20 | 1:3d2e110f5dc8 | 60 | int count = 0; |
seedteam20 | 1:3d2e110f5dc8 | 61 | while(false == gprs.connect() && count < 5) { |
seedteam20 | 1:3d2e110f5dc8 | 62 | wait(2); |
seedteam20 | 1:3d2e110f5dc8 | 63 | count += 1; |
seedteam20 | 1:3d2e110f5dc8 | 64 | } |
seedteam20 | 1:3d2e110f5dc8 | 65 | |
seedteam20 | 1:3d2e110f5dc8 | 66 | // format url here |
seedteam20 | 1:3d2e110f5dc8 | 67 | urlBuffer[0] = 0; |
seedteam20 | 1:3d2e110f5dc8 | 68 | sprintf(urlBuffer, "%s?key=%s&field1=%d&field2=%d&field3=%d", thingSpeakUrl, thingSpeakKey, sensor1, sensor2,sensor3); |
seedteam20 | 1:3d2e110f5dc8 | 69 | |
seedteam20 | 1:3d2e110f5dc8 | 70 | // send request |
seedteam20 | 1:3d2e110f5dc8 | 71 | HTTPResult res = http.get(urlBuffer, str,128); |
seedteam20 | 1:3d2e110f5dc8 | 72 | // and verify the result |
seedteam20 | 1:3d2e110f5dc8 | 73 | if (res != HTTP_OK) { |
seedteam20 | 1:3d2e110f5dc8 | 74 | redLED.blink(5); |
seedteam20 | 1:3d2e110f5dc8 | 75 | } else { |
seedteam20 | 1:3d2e110f5dc8 | 76 | greenLED.blink(5); |
seedteam20 | 1:3d2e110f5dc8 | 77 | } |
seedteam20 | 1:3d2e110f5dc8 | 78 | iot_hw.init_io(); //power down SIM900 |
seedteam20 | 1:3d2e110f5dc8 | 79 | } |
seedteam20 | 1:3d2e110f5dc8 | 80 | |
seedteam20 | 1:3d2e110f5dc8 | 81 | /** |
seedteam20 | 1:3d2e110f5dc8 | 82 | Function returns temperature and hunidity reading |
seedteam20 | 1:3d2e110f5dc8 | 83 | from DHT11 sensor |
seedteam20 | 1:3d2e110f5dc8 | 84 | @return temp The temperature in Farenheit |
seedteam20 | 1:3d2e110f5dc8 | 85 | @return hunidity The percent hunidity |
seedteam20 | 1:3d2e110f5dc8 | 86 | */ |
seedteam20 | 1:3d2e110f5dc8 | 87 | void getTempHumid(int* temp,int* humidity){ |
seedteam20 | 1:3d2e110f5dc8 | 88 | int err = 1; |
seedteam20 | 1:3d2e110f5dc8 | 89 | int count = 0; |
seedteam20 | 1:3d2e110f5dc8 | 90 | iot_hw.grovePwrOn(); |
seedteam20 | 1:3d2e110f5dc8 | 91 | wait(1); // wait 1 second for device stable status |
seedteam20 | 1:3d2e110f5dc8 | 92 | while (err != 0 && count < 4) { |
seedteam20 | 1:3d2e110f5dc8 | 93 | err = sensor.readData(); |
seedteam20 | 1:3d2e110f5dc8 | 94 | count += 1; |
seedteam20 | 1:3d2e110f5dc8 | 95 | *temp = sensor.ReadTemperature(FARENHEIT); |
seedteam20 | 1:3d2e110f5dc8 | 96 | *humidity = sensor.ReadHumidity(); |
seedteam20 | 1:3d2e110f5dc8 | 97 | |
seedteam20 | 1:3d2e110f5dc8 | 98 | wait(1); |
seedteam20 | 1:3d2e110f5dc8 | 99 | } |
seedteam20 | 1:3d2e110f5dc8 | 100 | iot_hw.grovePwrOff(); |
seedteam20 | 1:3d2e110f5dc8 | 101 | } |
seedteam20 | 1:3d2e110f5dc8 | 102 | |
seedteam20 | 1:3d2e110f5dc8 | 103 | /** Function returns a light reading between 0 and 1000 |
seedteam20 | 1:3d2e110f5dc8 | 104 | TEMT600 analog ambient light sensor |
seedteam20 | 1:3d2e110f5dc8 | 105 | @return light The light reading use to measure lights on/off |
seedteam20 | 1:3d2e110f5dc8 | 106 | */ |
seedteam20 | 1:3d2e110f5dc8 | 107 | void getLightReading(int* light) |
seedteam20 | 1:3d2e110f5dc8 | 108 | { |
seedteam20 | 1:3d2e110f5dc8 | 109 | *light = lightSensor*1000; |
seedteam20 | 1:3d2e110f5dc8 | 110 | } |
seedteam20 | 1:3d2e110f5dc8 | 111 | |
seedteam20 | 1:3d2e110f5dc8 | 112 | |
seedteam20 | 1:3d2e110f5dc8 | 113 | int main() |
seedteam20 | 1:3d2e110f5dc8 | 114 | { |
seedteam20 | 1:3d2e110f5dc8 | 115 | wdt_sleep.wdtClkSetup(WDTCLK_SRC_IRC_OSC); |
seedteam20 | 1:3d2e110f5dc8 | 116 | |
seedteam20 | 1:3d2e110f5dc8 | 117 | PWRON: |
seedteam20 | 1:3d2e110f5dc8 | 118 | //get temp and hunidity |
seedteam20 | 1:3d2e110f5dc8 | 119 | getTempHumid(&temp,&humidity); |
seedteam20 | 1:3d2e110f5dc8 | 120 | //get light reading |
seedteam20 | 1:3d2e110f5dc8 | 121 | getLightReading(&light); |
seedteam20 | 1:3d2e110f5dc8 | 122 | |
seedteam20 | 1:3d2e110f5dc8 | 123 | //upload to thingspeak |
seedteam20 | 1:3d2e110f5dc8 | 124 | sendToThingSpeak(temp,humidity,light); //blinks green if success, blinks red if failure |
seedteam20 | 1:3d2e110f5dc8 | 125 | |
seedteam20 | 1:3d2e110f5dc8 | 126 | //sleep for BROADCAST_TIME defined above. WFI with WDT |
seedteam20 | 1:3d2e110f5dc8 | 127 | wdt_sleep.sleep(BROADCAST_TIME); |
seedteam20 | 1:3d2e110f5dc8 | 128 | |
seedteam20 | 1:3d2e110f5dc8 | 129 | goto PWRON; |
seedteam20 | 1:3d2e110f5dc8 | 130 | } |