Full code to read temperature and post to Think Speak (not working)

Dependencies:   GPRSInterface HTTPClient NTPClient USBDevice mbed

Committer:
mbotkinl
Date:
Wed Feb 25 20:34:13 2015 +0000
Revision:
0:3f6e369de720
Think Speak Test;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbotkinl 0:3f6e369de720 1 #include "mbed.h"
mbotkinl 0:3f6e369de720 2 #include "GPRSInterface.h"
mbotkinl 0:3f6e369de720 3 #include "USBSerial.h"
mbotkinl 0:3f6e369de720 4 #include "NTPClient.h"
mbotkinl 0:3f6e369de720 5 #include "HTTPClient.h"
mbotkinl 0:3f6e369de720 6
mbotkinl 0:3f6e369de720 7
mbotkinl 0:3f6e369de720 8 #define PIN_PWR P1_2 //power up gprs module
mbotkinl 0:3f6e369de720 9 #define PIN_PWR_KEY P1_7
mbotkinl 0:3f6e369de720 10 #define PIN_TX P1_27
mbotkinl 0:3f6e369de720 11 #define PIN_RX P1_26
mbotkinl 0:3f6e369de720 12
mbotkinl 0:3f6e369de720 13 #define TS_FEED_ID 25152
mbotkinl 0:3f6e369de720 14 #define TS_API "GH5ZL0IHZV81017V"
mbotkinl 0:3f6e369de720 15
mbotkinl 0:3f6e369de720 16 NTPClient ntp;
mbotkinl 0:3f6e369de720 17 HTTPClient http;
mbotkinl 0:3f6e369de720 18
mbotkinl 0:3f6e369de720 19 char* ntpServerUrl = "0.ca.pool.ntp.org";
mbotkinl 0:3f6e369de720 20
mbotkinl 0:3f6e369de720 21 char* thingSpeakUrl = "http://api.thingspeak.com/update";
mbotkinl 0:3f6e369de720 22 char* thingSpeakKey = "GH5ZL0IHZV81017V";
mbotkinl 0:3f6e369de720 23
mbotkinl 0:3f6e369de720 24
mbotkinl 0:3f6e369de720 25 char urlBuffer[256];
mbotkinl 0:3f6e369de720 26 char timeBuffer[64];
mbotkinl 0:3f6e369de720 27
mbotkinl 0:3f6e369de720 28 GPRSInterface gprs(PIN_TX,PIN_RX,115200,"live.vodafone.com",NULL,NULL);
mbotkinl 0:3f6e369de720 29 DigitalOut power(PIN_PWR);
mbotkinl 0:3f6e369de720 30 DigitalOut powerKey(PIN_PWR_KEY);
mbotkinl 0:3f6e369de720 31 AnalogIn sensor(P0_12);
mbotkinl 0:3f6e369de720 32
mbotkinl 0:3f6e369de720 33 USBSerial pc;
mbotkinl 0:3f6e369de720 34
mbotkinl 0:3f6e369de720 35
mbotkinl 0:3f6e369de720 36 void gprsPowerUp(void)
mbotkinl 0:3f6e369de720 37 {
mbotkinl 0:3f6e369de720 38 power = 1;
mbotkinl 0:3f6e369de720 39 wait(2);
mbotkinl 0:3f6e369de720 40 power = 0;
mbotkinl 0:3f6e369de720 41 wait(2);
mbotkinl 0:3f6e369de720 42
mbotkinl 0:3f6e369de720 43 powerKey = 0;
mbotkinl 0:3f6e369de720 44 wait(1);
mbotkinl 0:3f6e369de720 45 powerKey = 1;
mbotkinl 0:3f6e369de720 46 wait(2);
mbotkinl 0:3f6e369de720 47 powerKey = 0;
mbotkinl 0:3f6e369de720 48 wait(3);
mbotkinl 0:3f6e369de720 49 }
mbotkinl 0:3f6e369de720 50
mbotkinl 0:3f6e369de720 51 void settingsChanged(int baud, int bits, int parity, int stop)
mbotkinl 0:3f6e369de720 52 {
mbotkinl 0:3f6e369de720 53 const Serial::Parity parityTable[] = {Serial::None, Serial::Odd, Serial::Even, Serial::Forced0, Serial::Forced1};
mbotkinl 0:3f6e369de720 54
mbotkinl 0:3f6e369de720 55 if (stop != 2) {
mbotkinl 0:3f6e369de720 56 stop = 1; // stop bit(s) = 1 or 1.5
mbotkinl 0:3f6e369de720 57 }
mbotkinl 0:3f6e369de720 58
mbotkinl 0:3f6e369de720 59 gprs.serialModem.baud(baud);
mbotkinl 0:3f6e369de720 60 gprs.serialModem.format(bits, parityTable[parity], stop);
mbotkinl 0:3f6e369de720 61 }
mbotkinl 0:3f6e369de720 62 int main() {
mbotkinl 0:3f6e369de720 63
mbotkinl 0:3f6e369de720 64 pc.printf("starting...\r\n");
mbotkinl 0:3f6e369de720 65 pc.attach(settingsChanged);
mbotkinl 0:3f6e369de720 66
mbotkinl 0:3f6e369de720 67 gprsPowerUp();
mbotkinl 0:3f6e369de720 68
mbotkinl 0:3f6e369de720 69 gprs.init(); //Use DHCP
mbotkinl 0:3f6e369de720 70 // attempt DHCP
mbotkinl 0:3f6e369de720 71 if(gprs.connect()<0) {
mbotkinl 0:3f6e369de720 72 wait(2);
mbotkinl 0:3f6e369de720 73 pc.printf("gprs connect error\r\n");
mbotkinl 0:3f6e369de720 74 }
mbotkinl 0:3f6e369de720 75 pc.printf("GPRS Connect = %s \r\n", gprs.connect());
mbotkinl 0:3f6e369de720 76 pc.printf("IP Address is %s\r\n", gprs.getIPAddress());
mbotkinl 0:3f6e369de720 77
mbotkinl 0:3f6e369de720 78
mbotkinl 0:3f6e369de720 79
mbotkinl 0:3f6e369de720 80
mbotkinl 0:3f6e369de720 81 // get time from ntp
mbotkinl 0:3f6e369de720 82 time_t ctTime;
mbotkinl 0:3f6e369de720 83 Host server(IpAddr(), 123, ntpServerUrl);
mbotkinl 0:3f6e369de720 84 ntp.setTime(server);
mbotkinl 0:3f6e369de720 85
mbotkinl 0:3f6e369de720 86 while(1)
mbotkinl 0:3f6e369de720 87 {
mbotkinl 0:3f6e369de720 88 // update data here
mbotkinl 0:3f6e369de720 89 ctTime = time(NULL);
mbotkinl 0:3f6e369de720 90 pc.printf("Reading....");
mbotkinl 0:3f6e369de720 91 float temperature = 100*sensor.read();
mbotkinl 0:3f6e369de720 92
mbotkinl 0:3f6e369de720 93 // format time here
mbotkinl 0:3f6e369de720 94 timeBuffer[0] = 0;
mbotkinl 0:3f6e369de720 95 strftime(timeBuffer, 64, "%Y-%m-%d %H:%M:%S", localtime(&ctTime));
mbotkinl 0:3f6e369de720 96
mbotkinl 0:3f6e369de720 97 // for debug
mbotkinl 0:3f6e369de720 98 pc.printf("Time: %s, Temperature: %f\r\n", timeBuffer, temperature);
mbotkinl 0:3f6e369de720 99
mbotkinl 0:3f6e369de720 100 // format url here
mbotkinl 0:3f6e369de720 101 urlBuffer[0] = 0;
mbotkinl 0:3f6e369de720 102 sprintf(urlBuffer, "%s?key=%s&field1=%s&field2=%f", thingSpeakUrl, thingSpeakKey, timeBuffer, temperature);
mbotkinl 0:3f6e369de720 103 pc.printf("Request to %s\r\n", urlBuffer);
mbotkinl 0:3f6e369de720 104
mbotkinl 0:3f6e369de720 105 HTTPText resp;
mbotkinl 0:3f6e369de720 106 HTTPResult res = http.get(urlBuffer, &resp);
mbotkinl 0:3f6e369de720 107 if (res == HTTP_OK)
mbotkinl 0:3f6e369de720 108 {
mbotkinl 0:3f6e369de720 109 pc.printf("Result :\"%s\"\r\n", resp.gets());
mbotkinl 0:3f6e369de720 110 }
mbotkinl 0:3f6e369de720 111 else
mbotkinl 0:3f6e369de720 112 {
mbotkinl 0:3f6e369de720 113 pc.printf("Error %d\r\n", res);
mbotkinl 0:3f6e369de720 114 }
mbotkinl 0:3f6e369de720 115
mbotkinl 0:3f6e369de720 116 wait(16); // limited by ThingSpeak's API
mbotkinl 0:3f6e369de720 117
mbotkinl 0:3f6e369de720 118 }
mbotkinl 0:3f6e369de720 119
mbotkinl 0:3f6e369de720 120
mbotkinl 0:3f6e369de720 121
mbotkinl 0:3f6e369de720 122 }
mbotkinl 0:3f6e369de720 123