Libery to interface thingspeak
Fork of ThingCloud by
thingspeak.cpp@0:ac8067fb9cee, 2016-06-22 (annotated)
- Committer:
- gert_lauritsen
- Date:
- Wed Jun 22 15:58:19 2016 +0000
- Revision:
- 0:ac8067fb9cee
- Child:
- 1:6f2f82b98d1f
Working version of a thingspeak interface
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
gert_lauritsen | 0:ac8067fb9cee | 1 | #include "mbed.h" |
gert_lauritsen | 0:ac8067fb9cee | 2 | #include "thingspeak.h" |
gert_lauritsen | 0:ac8067fb9cee | 3 | #include "TCPSocketConnection.h" |
gert_lauritsen | 0:ac8067fb9cee | 4 | |
gert_lauritsen | 0:ac8067fb9cee | 5 | /**************************************************************************************** |
gert_lauritsen | 0:ac8067fb9cee | 6 | * --- Global Parameters --- * |
gert_lauritsen | 0:ac8067fb9cee | 7 | ***************************************************************************************/ |
gert_lauritsen | 0:ac8067fb9cee | 8 | |
gert_lauritsen | 0:ac8067fb9cee | 9 | int i; |
gert_lauritsen | 0:ac8067fb9cee | 10 | bool flagTCP=0; |
gert_lauritsen | 0:ac8067fb9cee | 11 | bool flagTCPisCON=0; |
gert_lauritsen | 0:ac8067fb9cee | 12 | int z = 0; |
gert_lauritsen | 0:ac8067fb9cee | 13 | int Error = 0; |
gert_lauritsen | 0:ac8067fb9cee | 14 | |
gert_lauritsen | 0:ac8067fb9cee | 15 | THINGSPEAK::THINGSPEAK() { |
gert_lauritsen | 0:ac8067fb9cee | 16 | FieldNumber=1; |
gert_lauritsen | 0:ac8067fb9cee | 17 | p=&thingStr[0]; |
gert_lauritsen | 0:ac8067fb9cee | 18 | } |
gert_lauritsen | 0:ac8067fb9cee | 19 | |
gert_lauritsen | 0:ac8067fb9cee | 20 | void THINGSPEAK::AddFloat(float Value) { |
gert_lauritsen | 0:ac8067fb9cee | 21 | if (FieldNumber>1) |
gert_lauritsen | 0:ac8067fb9cee | 22 | p+=sprintf(p,"&field%d=%f",FieldNumber,Value); |
gert_lauritsen | 0:ac8067fb9cee | 23 | else |
gert_lauritsen | 0:ac8067fb9cee | 24 | p+=sprintf(p,"field1=%f",Value); |
gert_lauritsen | 0:ac8067fb9cee | 25 | FieldNumber++; |
gert_lauritsen | 0:ac8067fb9cee | 26 | } |
gert_lauritsen | 0:ac8067fb9cee | 27 | |
gert_lauritsen | 0:ac8067fb9cee | 28 | void THINGSPEAK::AddInt(int Value) { |
gert_lauritsen | 0:ac8067fb9cee | 29 | if (FieldNumber>1) |
gert_lauritsen | 0:ac8067fb9cee | 30 | p+=sprintf(p,"&field%d=%f",FieldNumber,Value); |
gert_lauritsen | 0:ac8067fb9cee | 31 | else |
gert_lauritsen | 0:ac8067fb9cee | 32 | p+=sprintf(p,"field1=%f",Value); |
gert_lauritsen | 0:ac8067fb9cee | 33 | FieldNumber++; |
gert_lauritsen | 0:ac8067fb9cee | 34 | } |
gert_lauritsen | 0:ac8067fb9cee | 35 | |
gert_lauritsen | 0:ac8067fb9cee | 36 | void THINGSPEAK::SendData(char* apikey) { |
gert_lauritsen | 0:ac8067fb9cee | 37 | ThingString(apikey,thingStr,strlen(thingStr)); |
gert_lauritsen | 0:ac8067fb9cee | 38 | } |
gert_lauritsen | 0:ac8067fb9cee | 39 | |
gert_lauritsen | 0:ac8067fb9cee | 40 | int THINGSPEAK::ThingString(char* apikey, char* data, int MessSize) |
gert_lauritsen | 0:ac8067fb9cee | 41 | { |
gert_lauritsen | 0:ac8067fb9cee | 42 | Error = 0; |
gert_lauritsen | 0:ac8067fb9cee | 43 | TCPSocketConnection ThingSock; |
gert_lauritsen | 0:ac8067fb9cee | 44 | flagTCP=0; |
gert_lauritsen | 0:ac8067fb9cee | 45 | |
gert_lauritsen | 0:ac8067fb9cee | 46 | char strPOST[195+MessSize]; |
gert_lauritsen | 0:ac8067fb9cee | 47 | sprintf( strPOST, "POST /update HTTP/1.1\r\nHost: api.thingspeak.com\r\nConnection: close\r\nX-THINGSPEAKAPIKEY: %s\r\nContent-Type: application/x-www-form-urlencoded\r\nContent-Length: %d\r\n\r\n%s", apikey, MessSize, data); |
gert_lauritsen | 0:ac8067fb9cee | 48 | //printf("%s\r\n",strPOST); |
gert_lauritsen | 0:ac8067fb9cee | 49 | while(flagTCP==FALSE) |
gert_lauritsen | 0:ac8067fb9cee | 50 | { |
gert_lauritsen | 0:ac8067fb9cee | 51 | if(z==5) |
gert_lauritsen | 0:ac8067fb9cee | 52 | { |
gert_lauritsen | 0:ac8067fb9cee | 53 | z=0; |
gert_lauritsen | 0:ac8067fb9cee | 54 | flagTCP=TRUE; |
gert_lauritsen | 0:ac8067fb9cee | 55 | Error=1; |
gert_lauritsen | 0:ac8067fb9cee | 56 | } |
gert_lauritsen | 0:ac8067fb9cee | 57 | else |
gert_lauritsen | 0:ac8067fb9cee | 58 | { |
gert_lauritsen | 0:ac8067fb9cee | 59 | ThingSock.connect(IPThingSpeak, 80); |
gert_lauritsen | 0:ac8067fb9cee | 60 | flagTCP=ThingSock.is_connected(); |
gert_lauritsen | 0:ac8067fb9cee | 61 | flagTCPisCON=flagTCP; |
gert_lauritsen | 0:ac8067fb9cee | 62 | z++; |
gert_lauritsen | 0:ac8067fb9cee | 63 | } |
gert_lauritsen | 0:ac8067fb9cee | 64 | } |
gert_lauritsen | 0:ac8067fb9cee | 65 | |
gert_lauritsen | 0:ac8067fb9cee | 66 | if(flagTCPisCON==TRUE) |
gert_lauritsen | 0:ac8067fb9cee | 67 | { |
gert_lauritsen | 0:ac8067fb9cee | 68 | ThingSock.send_all(strPOST, (int)strlen(strPOST)); |
gert_lauritsen | 0:ac8067fb9cee | 69 | // Receive message from server |
gert_lauritsen | 0:ac8067fb9cee | 70 | char buf[256]; |
gert_lauritsen | 0:ac8067fb9cee | 71 | int n = ThingSock.receive(buf, 256); |
gert_lauritsen | 0:ac8067fb9cee | 72 | buf[n] = '\0'; |
gert_lauritsen | 0:ac8067fb9cee | 73 | // printf("Received message from server: '%s'\n", buf); |
gert_lauritsen | 0:ac8067fb9cee | 74 | ThingSock.close(); |
gert_lauritsen | 0:ac8067fb9cee | 75 | flagTCPisCON=FALSE; |
gert_lauritsen | 0:ac8067fb9cee | 76 | } |
gert_lauritsen | 0:ac8067fb9cee | 77 | FieldNumber=1; //Ready for next time |
gert_lauritsen | 0:ac8067fb9cee | 78 | p=&thingStr[0]; |
gert_lauritsen | 0:ac8067fb9cee | 79 | |
gert_lauritsen | 0:ac8067fb9cee | 80 | return Error; |
gert_lauritsen | 0:ac8067fb9cee | 81 | } |