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 Cellular building monitoring

Committer:
seedteam20
Date:
Thu Apr 09 22:09:50 2015 +0000
Revision:
1:3d2e110f5dc8
asdf

Who changed what in which revision?

UserRevisionLine numberNew 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 }