A basic example of using the mbed NXP LPC1768 Application Board with Exosite.

Dependencies:   C12832_lcd EthernetInterface HTTPClient LM75B MMA7660 RGBLed mbed-rtos mbed

Fork of exosite_http_example by Patrick Barrett

Committer:
maanenson
Date:
Wed Jan 21 08:24:54 2015 +0000
Revision:
5:04490f27f83f
Parent:
4:d6e87aea518f
Updated to add temp, pots, and real uptime

Who changed what in which revision?

UserRevisionLine numberNew contents of line
maanenson 0:30a991e08e77 1 #include "mbed.h"
maanenson 0:30a991e08e77 2 #include "EthernetInterface.h"
PBarrett 2:8907a25944ab 3 #include "HTTPClient.h"
PBarrett 1:ae20607dd0c1 4 #include "C12832_lcd.h"
PBarrett 4:d6e87aea518f 5 #include <FileSystemLike.h>
PBarrett 4:d6e87aea518f 6 #include <FileHandle.h>
maanenson 5:04490f27f83f 7 #include "LM75B.h"
maanenson 0:30a991e08e77 8
maanenson 5:04490f27f83f 9 /* known issues:
maanenson 5:04490f27f83f 10 1. CIK becomes corrupted after updating bin files on mbed device -or- resets
maanenson 5:04490f27f83f 11 2. Does not read led1 yet to control LED1 on/off
maanenson 5:04490f27f83f 12
maanenson 5:04490f27f83f 13 */
PBarrett 4:d6e87aea518f 14 const char VENDOR[] = "exosite";
PBarrett 4:d6e87aea518f 15 const char MODEL[] = "mbed_lpc1768_appbrdv1";
PBarrett 2:8907a25944ab 16
PBarrett 2:8907a25944ab 17 #define WRITE_ALIAS "temp"
maanenson 5:04490f27f83f 18 #define READ_ALIASES "?screen&led1"
maanenson 0:30a991e08e77 19
PBarrett 4:d6e87aea518f 20 char EXO_CIK_HDR[] = "X-Exosite-CIK: 0000000000000000000000000000000000000000\r\n";
PBarrett 4:d6e87aea518f 21 const char EXO_CIK_HDR_FMT[] = "X-Exosite-CIK: %s\r\n";
PBarrett 2:8907a25944ab 22 char EXO_ACCEPT_HDR[] = "Accept: application/x-www-form-urlencoded; charset=utf-8\r\n";
PBarrett 2:8907a25944ab 23 char EXO_CONTYP_HDR[] = "Content-Type: application/x-www-form-urlencoded; charset=utf-8\r\n";
PBarrett 2:8907a25944ab 24 const char EXO_URI[] = "https://m2.exosite.com:443/onep:v1/stack/alias" READ_ALIASES;
PBarrett 2:8907a25944ab 25 // NOTE: Need to specify port due to parsing bug in lib on "onep:v1"
PBarrett 4:d6e87aea518f 26 const char EXO_ACTIVATE_URI[] = "https://m2.exosite.com/provision/activate";
PBarrett 2:8907a25944ab 27
PBarrett 2:8907a25944ab 28 #define TIMEOUT 2000
PBarrett 2:8907a25944ab 29 #define BUFFSIZE 1024
maanenson 0:30a991e08e77 30
maanenson 0:30a991e08e77 31 AnalogIn aPot1(p19);
PBarrett 2:8907a25944ab 32 Timer send_timer, connection_timer, run_time;
PBarrett 1:ae20607dd0c1 33
PBarrett 4:d6e87aea518f 34 EthernetInterface eth;
PBarrett 4:d6e87aea518f 35 HTTPClient http;
PBarrett 4:d6e87aea518f 36
PBarrett 4:d6e87aea518f 37 LocalFileSystem localfs("local");
PBarrett 4:d6e87aea518f 38
PBarrett 1:ae20607dd0c1 39 static C12832_LCD lcd;
maanenson 5:04490f27f83f 40 LM75B tmp(p28,p27);
maanenson 5:04490f27f83f 41
maanenson 5:04490f27f83f 42 AnalogIn Pot1(p19);
maanenson 5:04490f27f83f 43 AnalogIn Pot2(p20);
maanenson 5:04490f27f83f 44 DigitalOut Led1Out(LED1);
PBarrett 1:ae20607dd0c1 45
PBarrett 1:ae20607dd0c1 46 int main()
PBarrett 1:ae20607dd0c1 47 {
maanenson 5:04490f27f83f 48 int uptime = 0;
maanenson 5:04490f27f83f 49
PBarrett 1:ae20607dd0c1 50 run_time.start();
PBarrett 1:ae20607dd0c1 51 send_timer.start();
maanenson 0:30a991e08e77 52
PBarrett 1:ae20607dd0c1 53 printf("\r\nStart\r\n");
PBarrett 1:ae20607dd0c1 54
PBarrett 1:ae20607dd0c1 55 eth.init(); //Use DHCP
maanenson 0:30a991e08e77 56
PBarrett 1:ae20607dd0c1 57 lcd.printf("Exosite HTTP Cloud Demo");
PBarrett 1:ae20607dd0c1 58 lcd.locate(0,11);
PBarrett 1:ae20607dd0c1 59 lcd.printf("MAC: %s", eth.getMACAddress());
PBarrett 1:ae20607dd0c1 60 lcd.locate(0,22);
PBarrett 1:ae20607dd0c1 61 lcd.printf("IP: Requesting From DHCP...");
PBarrett 1:ae20607dd0c1 62
maanenson 0:30a991e08e77 63 eth.connect();
PBarrett 1:ae20607dd0c1 64
PBarrett 1:ae20607dd0c1 65 printf("IP Address is %s\r\n", eth.getIPAddress());
PBarrett 1:ae20607dd0c1 66 printf("MAC Address is %s\r\n", eth.getMACAddress());
maanenson 0:30a991e08e77 67
PBarrett 1:ae20607dd0c1 68 lcd.locate(0,22);
PBarrett 4:d6e87aea518f 69 lcd.printf("IP: %s ", eth.getIPAddress());
PBarrett 1:ae20607dd0c1 70
PBarrett 1:ae20607dd0c1 71 printf("[%f] Running...\r\n", run_time.read());
maanenson 0:30a991e08e77 72
PBarrett 4:d6e87aea518f 73 printf("[%f] Attempting Activation\r\n", run_time.read());
PBarrett 4:d6e87aea518f 74 {
PBarrett 4:d6e87aea518f 75 int ret;
PBarrett 4:d6e87aea518f 76 char incomming_buffer[BUFFSIZE];
PBarrett 4:d6e87aea518f 77 HTTPText hti = HTTPText(incomming_buffer, BUFFSIZE);
PBarrett 4:d6e87aea518f 78 HTTPMap hto = HTTPMap();
PBarrett 4:d6e87aea518f 79 hto.put("vendor", VENDOR);
PBarrett 4:d6e87aea518f 80 hto.put("model", MODEL);
PBarrett 4:d6e87aea518f 81 hto.put("sn", eth.getMACAddress());
PBarrett 4:d6e87aea518f 82 if ((ret = http.post(EXO_ACTIVATE_URI, hto, &hti)) == 0) {
PBarrett 4:d6e87aea518f 83 printf("Success, Got: %s\n", incomming_buffer);
PBarrett 4:d6e87aea518f 84 lcd.locate(0,0);
PBarrett 4:d6e87aea518f 85 sprintf(EXO_CIK_HDR, EXO_CIK_HDR_FMT, incomming_buffer);
PBarrett 4:d6e87aea518f 86 FILE *fp = fopen("/local/cik.txt", "w");
PBarrett 4:d6e87aea518f 87 fprintf(fp, "%s", incomming_buffer);
PBarrett 4:d6e87aea518f 88 fclose(fp);
PBarrett 4:d6e87aea518f 89 } else if (ret == 0) {
PBarrett 4:d6e87aea518f 90 printf("Couldn't Connect to Exosite, Check Network\r\n");
PBarrett 4:d6e87aea518f 91 lcd.locate(0,0);
PBarrett 4:d6e87aea518f 92 lcd.printf("Couldn't Connect to Exosite");
PBarrett 4:d6e87aea518f 93 lcd.locate(0,11);
PBarrett 4:d6e87aea518f 94 lcd.printf("Check Network");
PBarrett 4:d6e87aea518f 95 } else {
PBarrett 4:d6e87aea518f 96 printf("Error %d\r\n", http.getHTTPResponseCode());
PBarrett 4:d6e87aea518f 97 lcd.locate(0,0);
PBarrett 4:d6e87aea518f 98 lcd.printf("Act Error (%d)", http.getHTTPResponseCode());
PBarrett 4:d6e87aea518f 99 FILE *fp = fopen("/local/cik.txt", "r");
PBarrett 4:d6e87aea518f 100 if (fp !=0 && fread(incomming_buffer, 1, 40, fp) == 40) {
PBarrett 4:d6e87aea518f 101 sprintf(EXO_CIK_HDR, EXO_CIK_HDR_FMT, incomming_buffer);
PBarrett 4:d6e87aea518f 102 printf("Found cik in nv: %s\r\n", incomming_buffer);
PBarrett 4:d6e87aea518f 103 } else if (ret != 0) {
PBarrett 4:d6e87aea518f 104 printf("No CIK, Please Re-Enable Device for Activation in Portals\r\n");
PBarrett 4:d6e87aea518f 105 lcd.locate(0,0);
PBarrett 4:d6e87aea518f 106 lcd.printf("No CIK, Re-Enable in Portals");
PBarrett 4:d6e87aea518f 107 lcd.locate(0,22);
PBarrett 4:d6e87aea518f 108 lcd.printf("Then Hard-Reset Board");
PBarrett 4:d6e87aea518f 109 while(1);
PBarrett 4:d6e87aea518f 110 }
PBarrett 4:d6e87aea518f 111
PBarrett 4:d6e87aea518f 112 if (fp != 0)
PBarrett 4:d6e87aea518f 113 fclose(fp);
PBarrett 4:d6e87aea518f 114 }
PBarrett 4:d6e87aea518f 115 }
PBarrett 4:d6e87aea518f 116
maanenson 0:30a991e08e77 117 while (1) {
PBarrett 1:ae20607dd0c1 118 int ret;
PBarrett 4:d6e87aea518f 119 char *key, *value;
PBarrett 2:8907a25944ab 120 char incomming_buffer[BUFFSIZE];
PBarrett 4:d6e87aea518f 121 char scratch[32];
maanenson 5:04490f27f83f 122 char tmp_str[8]={0};
maanenson 5:04490f27f83f 123 char uptime_str[8]={0};
maanenson 5:04490f27f83f 124 char pot1_str[8]={0};
maanenson 5:04490f27f83f 125 char pot2_str[8]={0};
maanenson 5:04490f27f83f 126
PBarrett 4:d6e87aea518f 127 HTTPMap read_map = HTTPMap(incomming_buffer, BUFFSIZE);
PBarrett 4:d6e87aea518f 128 HTTPMap write_map = HTTPMap();
PBarrett 1:ae20607dd0c1 129
maanenson 5:04490f27f83f 130 if(tmp.open())
maanenson 5:04490f27f83f 131 {
maanenson 5:04490f27f83f 132 snprintf(tmp_str, 16, "%.2f", (float)tmp);
maanenson 5:04490f27f83f 133 printf("[%f] temp: %s C\r\n", run_time.read(), tmp_str);
maanenson 5:04490f27f83f 134 write_map.put("tempc", tmp_str);
maanenson 5:04490f27f83f 135 }
maanenson 5:04490f27f83f 136 else {
maanenson 5:04490f27f83f 137 error("Temp Sensor not detected!\n");
maanenson 5:04490f27f83f 138 }
maanenson 5:04490f27f83f 139
maanenson 5:04490f27f83f 140 snprintf(pot1_str, 16, "%3.3f", Pot1.read()*100.0f);
maanenson 5:04490f27f83f 141 printf("[%f] Pot1: %s %%\r\n", run_time.read(), pot1_str);
maanenson 5:04490f27f83f 142 write_map.put("pot1", pot1_str);
maanenson 5:04490f27f83f 143
maanenson 5:04490f27f83f 144 snprintf(pot2_str, 16, "%3.3f", Pot2.read()*100.0f);
maanenson 5:04490f27f83f 145 printf("[%f] Pot2: %s %%\r\n", run_time.read(), pot2_str);
maanenson 5:04490f27f83f 146 write_map.put("pot2", pot2_str);
maanenson 5:04490f27f83f 147
maanenson 5:04490f27f83f 148 /*if(Pot1 > 0.3f) {
maanenson 5:04490f27f83f 149 Led1Out = 1;
maanenson 5:04490f27f83f 150 } else {
maanenson 5:04490f27f83f 151 Led1Out = 0;
maanenson 5:04490f27f83f 152 }*/
maanenson 5:04490f27f83f 153
maanenson 5:04490f27f83f 154 snprintf(uptime_str, 16, "%d", uptime);
maanenson 5:04490f27f83f 155 printf("[%f] Uptimer Counter: %s\r\n", run_time.read(), uptime_str);
maanenson 5:04490f27f83f 156 write_map.put("uptime", uptime_str);
PBarrett 2:8907a25944ab 157
PBarrett 2:8907a25944ab 158 http.setHeader(0,EXO_CIK_HDR);
PBarrett 2:8907a25944ab 159 http.setHeader(1,EXO_ACCEPT_HDR);
PBarrett 4:d6e87aea518f 160 //http.setHeader(2,EXO_CONTYP_HDR);
PBarrett 4:d6e87aea518f 161
PBarrett 4:d6e87aea518f 162 printf("[%f] Making Request...\r\n", run_time.read());
PBarrett 4:d6e87aea518f 163 connection_timer.reset();
PBarrett 4:d6e87aea518f 164 connection_timer.start();
PBarrett 1:ae20607dd0c1 165
PBarrett 4:d6e87aea518f 166 // make request
PBarrett 4:d6e87aea518f 167 ret = http.post(EXO_URI, write_map, &read_map);
PBarrett 4:d6e87aea518f 168 connection_timer.stop();
PBarrett 4:d6e87aea518f 169 printf("[%f] Done! Status: %d, %d\r\n", run_time.read(), ret, http.getHTTPResponseCode());
PBarrett 2:8907a25944ab 170 lcd.locate(0,0);
PBarrett 4:d6e87aea518f 171 lcd.printf(" ");
PBarrett 2:8907a25944ab 172 if (!ret) {
PBarrett 4:d6e87aea518f 173 // write 'screen' dp to screen
PBarrett 2:8907a25944ab 174 lcd.locate(0,0);
PBarrett 4:d6e87aea518f 175 if (read_map.get("screen", scratch, 32)) {
PBarrett 4:d6e87aea518f 176 lcd.printf(scratch);
PBarrett 4:d6e87aea518f 177 } else {
PBarrett 4:d6e87aea518f 178 lcd.printf("couldn't read 'screen' dp");
PBarrett 4:d6e87aea518f 179 }
PBarrett 4:d6e87aea518f 180
PBarrett 4:d6e87aea518f 181 // list returned dataports
PBarrett 4:d6e87aea518f 182 while(read_map.pop(key, value)) {
PBarrett 4:d6e87aea518f 183 printf(" %s: %s\r\n", key, value);
PBarrett 4:d6e87aea518f 184 }
PBarrett 2:8907a25944ab 185 } else {
PBarrett 2:8907a25944ab 186 lcd.locate(0,0);
PBarrett 4:d6e87aea518f 187 lcd.printf("Error (%d, %d)", ret, http.getHTTPResponseCode());
maanenson 0:30a991e08e77 188 }
maanenson 0:30a991e08e77 189
PBarrett 4:d6e87aea518f 190 printf("[%f] Completed in %f seconds.\r\n", run_time.read(), connection_timer.read());
maanenson 5:04490f27f83f 191 uptime++;
PBarrett 1:ae20607dd0c1 192 wait(5);
maanenson 0:30a991e08e77 193 }
maanenson 0:30a991e08e77 194
maanenson 0:30a991e08e77 195 }