Code to run the controller for the wifi robot

Dependencies:   ESP8266Interface HTTPClient-SSL WebSocketClient mbed-rtos mbed

Committer:
anewton8
Date:
Tue Oct 20 17:35:45 2015 +0000
Revision:
0:e68e51f935d1
Finished controller code. Tuesday October 20th, 2015

Who changed what in which revision?

UserRevisionLine numberNew contents of line
anewton8 0:e68e51f935d1 1 #include "mbed.h"
anewton8 0:e68e51f935d1 2
anewton8 0:e68e51f935d1 3 #define USE_CAP 1
anewton8 0:e68e51f935d1 4 #define USE_WIFI_BASIC 0
anewton8 0:e68e51f935d1 5 #define USE_WIFI_ADVANCED 1
anewton8 0:e68e51f935d1 6
anewton8 0:e68e51f935d1 7 DigitalOut led1(LED1);
anewton8 0:e68e51f935d1 8 DigitalOut led2(LED2);
anewton8 0:e68e51f935d1 9 DigitalOut led3(LED3);
anewton8 0:e68e51f935d1 10 DigitalOut led4(LED4);
anewton8 0:e68e51f935d1 11 Serial pc(USBTX, USBRX); // tx, rx
anewton8 0:e68e51f935d1 12
anewton8 0:e68e51f935d1 13 #if USE_CAP
anewton8 0:e68e51f935d1 14 #include <mpr121.h>
anewton8 0:e68e51f935d1 15 // Create the interrupt receiver object on pin 26
anewton8 0:e68e51f935d1 16 InterruptIn interrupt(p26);
anewton8 0:e68e51f935d1 17 // Setup the i2c bus on pins 9 and 10
anewton8 0:e68e51f935d1 18 I2C i2c(p9, p10);
anewton8 0:e68e51f935d1 19 // Setup the Mpr121:
anewton8 0:e68e51f935d1 20 // constructor(i2c object, i2c address of the mpr121)
anewton8 0:e68e51f935d1 21 Mpr121 mpr121(&i2c, Mpr121::ADD_VSS);
anewton8 0:e68e51f935d1 22
anewton8 0:e68e51f935d1 23 void fallInterrupt();
anewton8 0:e68e51f935d1 24 #endif
anewton8 0:e68e51f935d1 25
anewton8 0:e68e51f935d1 26 // WiFi stuff
anewton8 0:e68e51f935d1 27 #if USE_WIFI_BASIC
anewton8 0:e68e51f935d1 28 Serial esp(p28, p27); // tx, rx
anewton8 0:e68e51f935d1 29 DigitalOut reset(p29);
anewton8 0:e68e51f935d1 30 Timer t;
anewton8 0:e68e51f935d1 31
anewton8 0:e68e51f935d1 32 char ssid[32] = "GTother"; // enter WiFi router ssid inside the quotes
anewton8 0:e68e51f935d1 33 char pwd [32] = "GeorgeP@1927"; // enter WiFi router password inside the quotes
anewton8 0:e68e51f935d1 34 int count,ended,timeout;
anewton8 0:e68e51f935d1 35 char buf[1024];
anewton8 0:e68e51f935d1 36 char snd[255];
anewton8 0:e68e51f935d1 37
anewton8 0:e68e51f935d1 38 void SendCMD(), getreply(), ESPconfig(), ESPsetbaudrate();
anewton8 0:e68e51f935d1 39
anewton8 0:e68e51f935d1 40 void basicWifiSetup();
anewton8 0:e68e51f935d1 41 void basicWifiLoop();
anewton8 0:e68e51f935d1 42 #endif
anewton8 0:e68e51f935d1 43
anewton8 0:e68e51f935d1 44 #if USE_WIFI_ADVANCED
anewton8 0:e68e51f935d1 45 #include "HTTPClient.h"
anewton8 0:e68e51f935d1 46 #include "ESP8266Interface.h"
anewton8 0:e68e51f935d1 47 #include "TCPSocketConnection.h"
anewton8 0:e68e51f935d1 48 #include "Websocket.h"
anewton8 0:e68e51f935d1 49 #include "rtos.h"
anewton8 0:e68e51f935d1 50
anewton8 0:e68e51f935d1 51 const char *httpDest = "http://143.215.98.59/";
anewton8 0:e68e51f935d1 52 ESP8266Interface wifi(p28, p27, p29, "GTother", "GeorgeP@1927", 115200); // TX,RX,Reset,SSID,Password,Baud
anewton8 0:e68e51f935d1 53
anewton8 0:e68e51f935d1 54 HTTPClient http;
anewton8 0:e68e51f935d1 55 char responseBuffer[512];
anewton8 0:e68e51f935d1 56
anewton8 0:e68e51f935d1 57 void advWifiSetup();
anewton8 0:e68e51f935d1 58 void advWifiTest();
anewton8 0:e68e51f935d1 59 void advWifiSendCommand(int val);
anewton8 0:e68e51f935d1 60
anewton8 0:e68e51f935d1 61 Mutex advWifiMutex;
anewton8 0:e68e51f935d1 62 void advWifiThread(void const *args);
anewton8 0:e68e51f935d1 63 int gKeycode = -1;
anewton8 0:e68e51f935d1 64 bool gKeycodeLatch = false;
anewton8 0:e68e51f935d1 65 #endif
anewton8 0:e68e51f935d1 66
anewton8 0:e68e51f935d1 67 int main() {
anewton8 0:e68e51f935d1 68 pc.printf("====\n\r===\n\r===\n\r=== Reset ====\n\r====\n\r\n\r");
anewton8 0:e68e51f935d1 69
anewton8 0:e68e51f935d1 70 led1 = led2 = led3 = led4 = 0;
anewton8 0:e68e51f935d1 71
anewton8 0:e68e51f935d1 72 #if USE_CAP
anewton8 0:e68e51f935d1 73 interrupt.fall(&fallInterrupt);
anewton8 0:e68e51f935d1 74 interrupt.mode(PullUp);
anewton8 0:e68e51f935d1 75 #endif
anewton8 0:e68e51f935d1 76
anewton8 0:e68e51f935d1 77 // Wifi setup
anewton8 0:e68e51f935d1 78 #if USE_WIFI_BASIC
anewton8 0:e68e51f935d1 79 basicWifiSetup();
anewton8 0:e68e51f935d1 80 #endif
anewton8 0:e68e51f935d1 81
anewton8 0:e68e51f935d1 82 #if USE_WIFI_ADVANCED
anewton8 0:e68e51f935d1 83 advWifiSetup();
anewton8 0:e68e51f935d1 84 Thread t2(advWifiThread);
anewton8 0:e68e51f935d1 85 #endif
anewton8 0:e68e51f935d1 86
anewton8 0:e68e51f935d1 87 while(1) {
anewton8 0:e68e51f935d1 88 #if USE_WIFI_BASIC
anewton8 0:e68e51f935d1 89 basicWifiLoop();
anewton8 0:e68e51f935d1 90 #endif
anewton8 0:e68e51f935d1 91
anewton8 0:e68e51f935d1 92 #if USE_WIFI_ADVANCED
anewton8 0:e68e51f935d1 93 //for (int i = 0; i < 2; i++) {
anewton8 0:e68e51f935d1 94 // advWifiSendCommand(i);
anewton8 0:e68e51f935d1 95 //}
anewton8 0:e68e51f935d1 96 #endif
anewton8 0:e68e51f935d1 97 }
anewton8 0:e68e51f935d1 98 }
anewton8 0:e68e51f935d1 99
anewton8 0:e68e51f935d1 100 #if USE_CAP
anewton8 0:e68e51f935d1 101 // Light up LEDs with capacitive touch interrupt stuff
anewton8 0:e68e51f935d1 102 void fallInterrupt() {
anewton8 0:e68e51f935d1 103 int key_code = 0;
anewton8 0:e68e51f935d1 104 int i = 0;
anewton8 0:e68e51f935d1 105
anewton8 0:e68e51f935d1 106 // Address 0x00 has touch status of 0 - 7 (7, 6, 5, 4, 3, 2, 1, 0)
anewton8 0:e68e51f935d1 107 // Address 0x01 has touch status of 8 - 11 (X,X,X,X, 11, 10, 9, 8)
anewton8 0:e68e51f935d1 108 // Combined value is a bitfield type thing
anewton8 0:e68e51f935d1 109 int value = mpr121.read(0x00);
anewton8 0:e68e51f935d1 110 value += mpr121.read(0x01) << 8;
anewton8 0:e68e51f935d1 111
anewton8 0:e68e51f935d1 112 // Takes highest set key and uses it
anewton8 0:e68e51f935d1 113 int bits[12];
anewton8 0:e68e51f935d1 114 for (i = 0; i < 12; i++) {
anewton8 0:e68e51f935d1 115 bits[i] = (value >> i) & 0x01;
anewton8 0:e68e51f935d1 116 if (bits[i] == 1) {
anewton8 0:e68e51f935d1 117 key_code = i + 1;
anewton8 0:e68e51f935d1 118 }
anewton8 0:e68e51f935d1 119 }
anewton8 0:e68e51f935d1 120 led4 = (key_code >> 0) & 0x01;
anewton8 0:e68e51f935d1 121 led3 = (key_code >> 1) & 0x01;
anewton8 0:e68e51f935d1 122 led2 = (key_code >> 2) & 0x01;
anewton8 0:e68e51f935d1 123 led1 = (key_code >> 3) & 0x01;
anewton8 0:e68e51f935d1 124
anewton8 0:e68e51f935d1 125 #if USE_WIFI_ADVANCED
anewton8 0:e68e51f935d1 126 gKeycode = key_code - 1;
anewton8 0:e68e51f935d1 127 gKeycodeLatch = true;
anewton8 0:e68e51f935d1 128 #endif
anewton8 0:e68e51f935d1 129 }
anewton8 0:e68e51f935d1 130 #endif
anewton8 0:e68e51f935d1 131
anewton8 0:e68e51f935d1 132 #if USE_WIFI_BASIC
anewton8 0:e68e51f935d1 133 // Sets new ESP8266 baurate, change the esp.baud(xxxxx) to match your new setting once this has been executed
anewton8 0:e68e51f935d1 134 void ESPsetbaudrate()
anewton8 0:e68e51f935d1 135 {
anewton8 0:e68e51f935d1 136 strcpy(snd, "AT+CIOBAUD=115200\r\n"); // change the numeric value to the required baudrate
anewton8 0:e68e51f935d1 137 SendCMD();
anewton8 0:e68e51f935d1 138 }
anewton8 0:e68e51f935d1 139
anewton8 0:e68e51f935d1 140 // +++++++++++++++++++++++++++++++++ This is for ESP8266 config only, run this once to set up the ESP8266 +++++++++++++++
anewton8 0:e68e51f935d1 141 void ESPconfig()
anewton8 0:e68e51f935d1 142 {
anewton8 0:e68e51f935d1 143 wait(5);
anewton8 0:e68e51f935d1 144 strcpy(snd,"AT\r\n");
anewton8 0:e68e51f935d1 145 SendCMD();
anewton8 0:e68e51f935d1 146 wait(1);
anewton8 0:e68e51f935d1 147 strcpy(snd,"AT\r\n");
anewton8 0:e68e51f935d1 148 SendCMD();
anewton8 0:e68e51f935d1 149 wait(1);
anewton8 0:e68e51f935d1 150 strcpy(snd,"AT\r\n");
anewton8 0:e68e51f935d1 151 SendCMD();
anewton8 0:e68e51f935d1 152 timeout=1;
anewton8 0:e68e51f935d1 153 getreply();
anewton8 0:e68e51f935d1 154 wait(1);
anewton8 0:e68e51f935d1 155 pc.printf("\f---------- Starting ESP Config ----------\r\n\n");
anewton8 0:e68e51f935d1 156
anewton8 0:e68e51f935d1 157 pc.printf("---------- Reset & get Firmware ----------\r\n");
anewton8 0:e68e51f935d1 158 strcpy(snd,"AT+RST\r\n");
anewton8 0:e68e51f935d1 159 SendCMD();
anewton8 0:e68e51f935d1 160 timeout=5;
anewton8 0:e68e51f935d1 161 getreply();
anewton8 0:e68e51f935d1 162 pc.printf(buf);
anewton8 0:e68e51f935d1 163
anewton8 0:e68e51f935d1 164 wait(2);
anewton8 0:e68e51f935d1 165
anewton8 0:e68e51f935d1 166 pc.printf("\n---------- Get Version ----------\r\n");
anewton8 0:e68e51f935d1 167 strcpy(snd,"AT+GMR\r\n");
anewton8 0:e68e51f935d1 168 SendCMD();
anewton8 0:e68e51f935d1 169 timeout=4;
anewton8 0:e68e51f935d1 170 getreply();
anewton8 0:e68e51f935d1 171 pc.printf(buf);
anewton8 0:e68e51f935d1 172
anewton8 0:e68e51f935d1 173 wait(3);
anewton8 0:e68e51f935d1 174
anewton8 0:e68e51f935d1 175 // set CWMODE to 1=Station,2=AP,3=BOTH, default mode 1 (Station)
anewton8 0:e68e51f935d1 176 pc.printf("\n---------- Setting Mode ----------\r\n");
anewton8 0:e68e51f935d1 177 strcpy(snd, "AT+CWMODE=1\r\n");
anewton8 0:e68e51f935d1 178 SendCMD();
anewton8 0:e68e51f935d1 179 timeout=4;
anewton8 0:e68e51f935d1 180 getreply();
anewton8 0:e68e51f935d1 181 pc.printf(buf);
anewton8 0:e68e51f935d1 182
anewton8 0:e68e51f935d1 183 wait(2);
anewton8 0:e68e51f935d1 184
anewton8 0:e68e51f935d1 185 // set CIPMUX to 0=Single,1=Multi
anewton8 0:e68e51f935d1 186 pc.printf("\n---------- Setting Connection Mode ----------\r\n");
anewton8 0:e68e51f935d1 187 strcpy(snd, "AT+CIPMUX=1\r\n");
anewton8 0:e68e51f935d1 188 SendCMD();
anewton8 0:e68e51f935d1 189 timeout=4;
anewton8 0:e68e51f935d1 190 getreply();
anewton8 0:e68e51f935d1 191 pc.printf(buf);
anewton8 0:e68e51f935d1 192
anewton8 0:e68e51f935d1 193 wait(2);
anewton8 0:e68e51f935d1 194
anewton8 0:e68e51f935d1 195 pc.printf("\n---------- Listing Access Points ----------\r\n");
anewton8 0:e68e51f935d1 196 strcpy(snd, "AT+CWLAP\r\n");
anewton8 0:e68e51f935d1 197 SendCMD();
anewton8 0:e68e51f935d1 198 timeout=15;
anewton8 0:e68e51f935d1 199 getreply();
anewton8 0:e68e51f935d1 200 pc.printf(buf);
anewton8 0:e68e51f935d1 201
anewton8 0:e68e51f935d1 202 wait(2);
anewton8 0:e68e51f935d1 203
anewton8 0:e68e51f935d1 204 pc.printf("\n---------- Connecting to AP ----------\r\n");
anewton8 0:e68e51f935d1 205 pc.printf("ssid = %s pwd = %s\r\n",ssid,pwd);
anewton8 0:e68e51f935d1 206 strcpy(snd, "AT+CWJAP=\"");
anewton8 0:e68e51f935d1 207 strcat(snd, ssid);
anewton8 0:e68e51f935d1 208 strcat(snd, "\",\"");
anewton8 0:e68e51f935d1 209 strcat(snd, pwd);
anewton8 0:e68e51f935d1 210 strcat(snd, "\"\r\n");
anewton8 0:e68e51f935d1 211 SendCMD();
anewton8 0:e68e51f935d1 212 timeout=10;
anewton8 0:e68e51f935d1 213 getreply();
anewton8 0:e68e51f935d1 214 pc.printf(buf);
anewton8 0:e68e51f935d1 215
anewton8 0:e68e51f935d1 216 wait(5);
anewton8 0:e68e51f935d1 217
anewton8 0:e68e51f935d1 218 pc.printf("\n---------- Get IP's ----------\r\n");
anewton8 0:e68e51f935d1 219 strcpy(snd, "AT+CIFSR\r\n");
anewton8 0:e68e51f935d1 220 SendCMD();
anewton8 0:e68e51f935d1 221 timeout=3;
anewton8 0:e68e51f935d1 222 getreply();
anewton8 0:e68e51f935d1 223 pc.printf(buf);
anewton8 0:e68e51f935d1 224
anewton8 0:e68e51f935d1 225 wait(1);
anewton8 0:e68e51f935d1 226
anewton8 0:e68e51f935d1 227 pc.printf("\n---------- Get Connection Status ----------\r\n");
anewton8 0:e68e51f935d1 228 strcpy(snd, "AT+CIPSTATUS\r\n");
anewton8 0:e68e51f935d1 229 SendCMD();
anewton8 0:e68e51f935d1 230 timeout=5;
anewton8 0:e68e51f935d1 231 getreply();
anewton8 0:e68e51f935d1 232 pc.printf(buf);
anewton8 0:e68e51f935d1 233
anewton8 0:e68e51f935d1 234 pc.printf("\n\n\n If you get a valid (non zero) IP, ESP8266 has been set up.\r\n");
anewton8 0:e68e51f935d1 235 pc.printf(" Run this if you want to reconfig the ESP8266 at any time.\r\n");
anewton8 0:e68e51f935d1 236 pc.printf(" It saves the SSID and password settings internally\r\n");
anewton8 0:e68e51f935d1 237 wait(10);
anewton8 0:e68e51f935d1 238 }
anewton8 0:e68e51f935d1 239
anewton8 0:e68e51f935d1 240 void SendCMD()
anewton8 0:e68e51f935d1 241 {
anewton8 0:e68e51f935d1 242 esp.printf("%s", snd);
anewton8 0:e68e51f935d1 243 }
anewton8 0:e68e51f935d1 244
anewton8 0:e68e51f935d1 245 void getreply()
anewton8 0:e68e51f935d1 246 {
anewton8 0:e68e51f935d1 247 memset(buf, '\0', sizeof(buf));
anewton8 0:e68e51f935d1 248 t.start();
anewton8 0:e68e51f935d1 249 ended=0;
anewton8 0:e68e51f935d1 250 count=0;
anewton8 0:e68e51f935d1 251 while(!ended) {
anewton8 0:e68e51f935d1 252 if(esp.readable()) {
anewton8 0:e68e51f935d1 253 buf[count] = esp.getc();
anewton8 0:e68e51f935d1 254 count++;
anewton8 0:e68e51f935d1 255 }
anewton8 0:e68e51f935d1 256 if(t.read() > timeout) {
anewton8 0:e68e51f935d1 257 ended = 1;
anewton8 0:e68e51f935d1 258 t.stop();
anewton8 0:e68e51f935d1 259 t.reset();
anewton8 0:e68e51f935d1 260 }
anewton8 0:e68e51f935d1 261 }
anewton8 0:e68e51f935d1 262 }
anewton8 0:e68e51f935d1 263
anewton8 0:e68e51f935d1 264 // Basic wifi setup code
anewton8 0:e68e51f935d1 265 void basicWifiSetup() {
anewton8 0:e68e51f935d1 266 reset=0; //hardware reset for 8266
anewton8 0:e68e51f935d1 267 pc.baud(9600); // set what you want here depending on your terminal program speed
anewton8 0:e68e51f935d1 268 pc.printf("\f\n\r-------------ESP8266 Hardware Reset-------------\n\r");
anewton8 0:e68e51f935d1 269 wait(0.5);
anewton8 0:e68e51f935d1 270 reset=1;
anewton8 0:e68e51f935d1 271 timeout=2;
anewton8 0:e68e51f935d1 272 getreply();
anewton8 0:e68e51f935d1 273
anewton8 0:e68e51f935d1 274 esp.baud(115200); // change this to the new ESP8266 baudrate if it is changed at any time.
anewton8 0:e68e51f935d1 275
anewton8 0:e68e51f935d1 276 //ESPsetbaudrate(); //****************** include this routine to set a different ESP8266 baudrate ******************
anewton8 0:e68e51f935d1 277
anewton8 0:e68e51f935d1 278 ESPconfig(); //****************** include Config to set the ESP8266 configuration ***********************
anewton8 0:e68e51f935d1 279 }
anewton8 0:e68e51f935d1 280
anewton8 0:e68e51f935d1 281 // Loop for basic wifi stuff
anewton8 0:e68e51f935d1 282 void basicWifiLoop() {
anewton8 0:e68e51f935d1 283 pc.printf("\n---------- Listing Acces Points ----------\r\n");
anewton8 0:e68e51f935d1 284 strcpy(snd, "AT+CWLAP\r\n");
anewton8 0:e68e51f935d1 285 SendCMD();
anewton8 0:e68e51f935d1 286 timeout=15;
anewton8 0:e68e51f935d1 287 getreply();
anewton8 0:e68e51f935d1 288 pc.printf(buf);
anewton8 0:e68e51f935d1 289 wait(2);
anewton8 0:e68e51f935d1 290 pc.printf("\n---------- Get IP and MAC ----------\r\n");
anewton8 0:e68e51f935d1 291 strcpy(snd, "AT+CIFSR\r\n");
anewton8 0:e68e51f935d1 292 SendCMD();
anewton8 0:e68e51f935d1 293 timeout=10;
anewton8 0:e68e51f935d1 294 getreply();
anewton8 0:e68e51f935d1 295 pc.printf(buf);
anewton8 0:e68e51f935d1 296 wait(2);
anewton8 0:e68e51f935d1 297 }
anewton8 0:e68e51f935d1 298 #endif
anewton8 0:e68e51f935d1 299
anewton8 0:e68e51f935d1 300 #if USE_WIFI_ADVANCED
anewton8 0:e68e51f935d1 301 // Setup advanced wifi
anewton8 0:e68e51f935d1 302 void advWifiSetup() {
anewton8 0:e68e51f935d1 303 pc.baud(9600);
anewton8 0:e68e51f935d1 304 wifi.init(); //Reset
anewton8 0:e68e51f935d1 305 wifi.connect(); //Use DHCP
anewton8 0:e68e51f935d1 306
anewton8 0:e68e51f935d1 307 advWifiTest(); // Test the connection
anewton8 0:e68e51f935d1 308 }
anewton8 0:e68e51f935d1 309
anewton8 0:e68e51f935d1 310 // Test that the advanced wifi is working with pastebin get/post
anewton8 0:e68e51f935d1 311 void advWifiTest() {
anewton8 0:e68e51f935d1 312 bool getSuccess = false,
anewton8 0:e68e51f935d1 313 postSuccess = false;
anewton8 0:e68e51f935d1 314
anewton8 0:e68e51f935d1 315 //GET
anewton8 0:e68e51f935d1 316 pc.printf("\nTrying to fetch page using GET...\n\r");
anewton8 0:e68e51f935d1 317 int httpResp = http.get("http://54.175.222.246/get", responseBuffer, 512);//IP address is httpbin.org/get
anewton8 0:e68e51f935d1 318 if (!httpResp) {
anewton8 0:e68e51f935d1 319 pc.printf("Page fetched successfully - read %d characters\n\r", strlen(responseBuffer));
anewton8 0:e68e51f935d1 320 pc.printf("Result: %s\n\r", responseBuffer);
anewton8 0:e68e51f935d1 321 getSuccess = true;
anewton8 0:e68e51f935d1 322 } else {
anewton8 0:e68e51f935d1 323 pc.printf("Error - ret = %d - HTTP return code = %d\n\r", httpResp, http.getHTTPResponseCode());
anewton8 0:e68e51f935d1 324 getSuccess = false;
anewton8 0:e68e51f935d1 325 }
anewton8 0:e68e51f935d1 326
anewton8 0:e68e51f935d1 327 //POST
anewton8 0:e68e51f935d1 328 HTTPMap postDataMap;
anewton8 0:e68e51f935d1 329 HTTPText responseTextBind(responseBuffer, 512);
anewton8 0:e68e51f935d1 330 postDataMap.put("Hello", "World");
anewton8 0:e68e51f935d1 331 postDataMap.put("test", "1234");
anewton8 0:e68e51f935d1 332 pc.printf("\nTrying to POST data to httpbin.org/post...\n\r");
anewton8 0:e68e51f935d1 333 httpResp = http.post("http://54.175.222.246/post", postDataMap, &responseTextBind);//IP address is httpbin.org/post
anewton8 0:e68e51f935d1 334 if (!httpResp) {
anewton8 0:e68e51f935d1 335 pc.printf("Executed POST successfully - read %d characters\n\r", strlen(responseBuffer));
anewton8 0:e68e51f935d1 336 pc.printf("Result: %s\n\r", responseBuffer);
anewton8 0:e68e51f935d1 337 postSuccess = true;
anewton8 0:e68e51f935d1 338 }
anewton8 0:e68e51f935d1 339 else {
anewton8 0:e68e51f935d1 340 pc.printf("Error - ret = %d - HTTP return code = %d\n\r", httpResp, http.getHTTPResponseCode());
anewton8 0:e68e51f935d1 341 postSuccess = false;
anewton8 0:e68e51f935d1 342 }
anewton8 0:e68e51f935d1 343
anewton8 0:e68e51f935d1 344 if (getSuccess && postSuccess) {
anewton8 0:e68e51f935d1 345 pc.printf("\n\r=== WIFI SETUP AND GOOD TO GO====\n\r\n\r");
anewton8 0:e68e51f935d1 346 } else {
anewton8 0:e68e51f935d1 347 pc.printf("\n\r=== WIFI BAD - Try at your own risk... ====\n\r\n\r");
anewton8 0:e68e51f935d1 348 }
anewton8 0:e68e51f935d1 349 }
anewton8 0:e68e51f935d1 350
anewton8 0:e68e51f935d1 351 // Send an advanced wifi command (non-blocking)
anewton8 0:e68e51f935d1 352 // INPUTS:
anewton8 0:e68e51f935d1 353 // keycode - Keycode from capacitive touch screen
anewton8 0:e68e51f935d1 354 void advWifiSendCommand(int keycode) {
anewton8 0:e68e51f935d1 355 pc.printf("Send command %d\n\r", keycode);
anewton8 0:e68e51f935d1 356
anewton8 0:e68e51f935d1 357 char sendVal[32];
anewton8 0:e68e51f935d1 358 switch (keycode) {
anewton8 0:e68e51f935d1 359 case 2:
anewton8 0:e68e51f935d1 360 sprintf(sendVal, "fwd");
anewton8 0:e68e51f935d1 361 break;
anewton8 0:e68e51f935d1 362 case 5:
anewton8 0:e68e51f935d1 363 sprintf(sendVal, "left");
anewton8 0:e68e51f935d1 364 break;
anewton8 0:e68e51f935d1 365 case 7:
anewton8 0:e68e51f935d1 366 sprintf(sendVal, "right");
anewton8 0:e68e51f935d1 367 break;
anewton8 0:e68e51f935d1 368 case 10:
anewton8 0:e68e51f935d1 369 sprintf(sendVal, "back");
anewton8 0:e68e51f935d1 370 break;
anewton8 0:e68e51f935d1 371 default:
anewton8 0:e68e51f935d1 372 pc.printf("\tBailing from bad keycode '%d'...\n\r", keycode);
anewton8 0:e68e51f935d1 373 return; // Bail
anewton8 0:e68e51f935d1 374 }
anewton8 0:e68e51f935d1 375
anewton8 0:e68e51f935d1 376 // We good to go? Grab a mutex
anewton8 0:e68e51f935d1 377 //if (!advWifiMutex.trylock()) {
anewton8 0:e68e51f935d1 378 // pc.printf("\tFailed to lock mutex. Bailing...\n\r");
anewton8 0:e68e51f935d1 379 // return;
anewton8 0:e68e51f935d1 380 //}
anewton8 0:e68e51f935d1 381
anewton8 0:e68e51f935d1 382 // Clear buffer
anewton8 0:e68e51f935d1 383 responseBuffer[0] = '\0';
anewton8 0:e68e51f935d1 384
anewton8 0:e68e51f935d1 385 // Setup bindings
anewton8 0:e68e51f935d1 386 HTTPMap postDataMap;
anewton8 0:e68e51f935d1 387 HTTPText responseTextBind(responseBuffer, 512);
anewton8 0:e68e51f935d1 388 postDataMap.put("keycode", sendVal);
anewton8 0:e68e51f935d1 389
anewton8 0:e68e51f935d1 390 pc.printf("Turning: %s with %d\t(%s)\n\r", sendVal, keycode, httpDest);
anewton8 0:e68e51f935d1 391 int httpResp = http.post(httpDest, postDataMap, &responseTextBind);
anewton8 0:e68e51f935d1 392 if (!httpResp) {
anewton8 0:e68e51f935d1 393 pc.printf("\tSuccess!\n\r");
anewton8 0:e68e51f935d1 394 pc.printf("\tResult: %s\n\r", responseBuffer);
anewton8 0:e68e51f935d1 395 } else {
anewton8 0:e68e51f935d1 396 pc.printf("\tFailed!\n\r");
anewton8 0:e68e51f935d1 397 pc.printf("\tResult: %s\n\r", responseBuffer);
anewton8 0:e68e51f935d1 398 pc.printf("\tRespVal(%d) \ ResponseCode(%d)\n\r", httpResp, http.getHTTPResponseCode());
anewton8 0:e68e51f935d1 399 }
anewton8 0:e68e51f935d1 400
anewton8 0:e68e51f935d1 401 //advWifiMutex.unlock();
anewton8 0:e68e51f935d1 402 }
anewton8 0:e68e51f935d1 403
anewton8 0:e68e51f935d1 404 void advWifiThread(void const *args) {
anewton8 0:e68e51f935d1 405 while(1) {
anewton8 0:e68e51f935d1 406 if (gKeycodeLatch && gKeycode != -1) {
anewton8 0:e68e51f935d1 407 advWifiSendCommand(gKeycode);
anewton8 0:e68e51f935d1 408 gKeycodeLatch = false;
anewton8 0:e68e51f935d1 409 }
anewton8 0:e68e51f935d1 410
anewton8 0:e68e51f935d1 411 Thread::wait(100);
anewton8 0:e68e51f935d1 412 }
anewton8 0:e68e51f935d1 413 }
anewton8 0:e68e51f935d1 414 #endif