Full code to read temperature and post to Think Speak (not working)
Dependencies: GPRSInterface HTTPClient NTPClient USBDevice mbed
ThinkSpeak.cpp@0:3f6e369de720, 2015-02-25 (annotated)
- Committer:
- mbotkinl
- Date:
- Wed Feb 25 20:34:13 2015 +0000
- Revision:
- 0:3f6e369de720
Think Speak Test;
Who changed what in which revision?
User | Revision | Line number | New 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 |