ECE 4180 final project. Used to connected with both Adafruit Huzzah WiFi and Adafruit Bluetooth LE UART.

Dependents:   WirelessInterface_Demo

Committer:
gboggs3
Date:
Thu Apr 28 22:09:33 2016 +0000
Revision:
1:67c95e75c998
Parent:
0:ee4d2deea4be
Allowed for setting up a server to accept serial passthrough communication

Who changed what in which revision?

UserRevisionLine numberNew contents of line
gboggs3 0:ee4d2deea4be 1 /*===================================================================
gboggs3 0:ee4d2deea4be 2 --------------------- Huzzah.cpp ----------------------
gboggs3 0:ee4d2deea4be 3 *Description
gboggs3 0:ee4d2deea4be 4
gboggs3 0:ee4d2deea4be 5 Written for:
gboggs3 0:ee4d2deea4be 6 Georgia Institute of Technology
gboggs3 0:ee4d2deea4be 7 ECE 4180, Final Project
gboggs3 0:ee4d2deea4be 8 Dr. James Hamblen
gboggs3 0:ee4d2deea4be 9
gboggs3 0:ee4d2deea4be 10 Authors:
gboggs3 0:ee4d2deea4be 11 Garren Boggs
gboggs3 0:ee4d2deea4be 12 David Cox
gboggs3 0:ee4d2deea4be 13 Anthony Jones
gboggs3 0:ee4d2deea4be 14 Parth Patel
gboggs3 0:ee4d2deea4be 15 ===================================================================*/
gboggs3 0:ee4d2deea4be 16
gboggs3 0:ee4d2deea4be 17 #include "mbed.h"
gboggs3 0:ee4d2deea4be 18 #include "Huzzah.h"
gboggs3 0:ee4d2deea4be 19
gboggs3 0:ee4d2deea4be 20 char buf[2024];
gboggs3 0:ee4d2deea4be 21 char snd[1024];
gboggs3 0:ee4d2deea4be 22
gboggs3 0:ee4d2deea4be 23 char ssid[32];
gboggs3 0:ee4d2deea4be 24 char pwd [32];
gboggs3 0:ee4d2deea4be 25 int count,ended,timeout;
gboggs3 0:ee4d2deea4be 26 //Timer t;
gboggs3 0:ee4d2deea4be 27
gboggs3 0:ee4d2deea4be 28 Huzzah :: Huzzah(PinName tx, PinName rx, PinName rst, RawSerial dev, int baudrate) :
gboggs3 0:ee4d2deea4be 29 _cmd(tx, rx), _rst(rst),
gboggs3 0:ee4d2deea4be 30 #if DEBUGMODE
gboggs3 0:ee4d2deea4be 31 _dev(USBTX, USBRX)
gboggs3 0:ee4d2deea4be 32 #else
gboggs3 0:ee4d2deea4be 33 _dev(dev)
gboggs3 0:ee4d2deea4be 34 #endif
gboggs3 0:ee4d2deea4be 35 {
gboggs3 0:ee4d2deea4be 36 _cmd.baud(baudrate);
gboggs3 0:ee4d2deea4be 37 _dev.baud(baudrate);
gboggs3 0:ee4d2deea4be 38 _cmd.attach(this, &Huzzah::send, Serial::RxIrq);
gboggs3 0:ee4d2deea4be 39 _dev.attach(this, &Huzzah::recv, Serial::RxIrq);
gboggs3 0:ee4d2deea4be 40 #if DEBUGMODE
gboggs3 0:ee4d2deea4be 41 _dev.printf("Initializing the Huzzah ESP8622...\n\r");
gboggs3 0:ee4d2deea4be 42 #endif
gboggs3 0:ee4d2deea4be 43 reset();
gboggs3 0:ee4d2deea4be 44 ESPSetBaudrate(baudrate);
gboggs3 0:ee4d2deea4be 45 timeout=2;
gboggs3 0:ee4d2deea4be 46 getReply();
gboggs3 0:ee4d2deea4be 47 }
gboggs3 0:ee4d2deea4be 48
gboggs3 0:ee4d2deea4be 49 // Sets new ESP8266 baurate, change the esp.baud(xxxxx) to match your new setting once this has been executed
gboggs3 0:ee4d2deea4be 50 void Huzzah :: ESPSetBaudrate(int speed)
gboggs3 0:ee4d2deea4be 51 {
gboggs3 0:ee4d2deea4be 52 memset(buf, '\0', sizeof(buf));
gboggs3 0:ee4d2deea4be 53 sprintf(buf, "AT+CIOBAUD=%d\r\n", speed);
gboggs3 0:ee4d2deea4be 54 strcpy(snd, buf);
gboggs3 0:ee4d2deea4be 55 SendCMD();
gboggs3 0:ee4d2deea4be 56 _dev.printf("\f\n\r-------------ESP8266 Baudrate Set-------------\n\r");
gboggs3 0:ee4d2deea4be 57 _dev.printf("ESP Baudrate set to %d\n\r",speed);
gboggs3 0:ee4d2deea4be 58 }
gboggs3 0:ee4d2deea4be 59
gboggs3 0:ee4d2deea4be 60 /**
gboggs3 0:ee4d2deea4be 61 *
gboggs3 0:ee4d2deea4be 62 */
gboggs3 0:ee4d2deea4be 63 void Huzzah :: configure(char* SSID, char* PASSWORD)
gboggs3 0:ee4d2deea4be 64 {
gboggs3 0:ee4d2deea4be 65 ESPConfig(SSID,PASSWORD);
gboggs3 0:ee4d2deea4be 66 }
gboggs3 0:ee4d2deea4be 67
gboggs3 0:ee4d2deea4be 68 // +++++++++++++++++++++++++++++++++ This is for ESP8266 config only, run this once to set up the ESP8266 +++++++++++++++
gboggs3 0:ee4d2deea4be 69 void Huzzah :: ESPConfig(char* SSID, char* PASSWORD)
gboggs3 0:ee4d2deea4be 70 {
gboggs3 0:ee4d2deea4be 71 //Resets the device to clear current configuration
gboggs3 0:ee4d2deea4be 72 reset();
gboggs3 0:ee4d2deea4be 73
gboggs3 0:ee4d2deea4be 74 //Clear the current SSID and password of connection
gboggs3 0:ee4d2deea4be 75 memset(&ssid[0], '\0', sizeof(ssid));
gboggs3 0:ee4d2deea4be 76 memset(&pwd[0], '\0', sizeof(pwd));
gboggs3 0:ee4d2deea4be 77
gboggs3 0:ee4d2deea4be 78 //Set the SSID and password of connection
gboggs3 0:ee4d2deea4be 79 strcpy(ssid, SSID);
gboggs3 0:ee4d2deea4be 80 strcpy(pwd, PASSWORD);
gboggs3 0:ee4d2deea4be 81
gboggs3 0:ee4d2deea4be 82
gboggs3 0:ee4d2deea4be 83
gboggs3 0:ee4d2deea4be 84 wait(5);
gboggs3 0:ee4d2deea4be 85 _dev.printf("\f---------- Starting ESP Configuration ----------\r\n\n");
gboggs3 0:ee4d2deea4be 86 strcpy(snd,".\r\n.\r\n");
gboggs3 0:ee4d2deea4be 87 SendCMD();
gboggs3 0:ee4d2deea4be 88
gboggs3 0:ee4d2deea4be 89 wait(1);
gboggs3 0:ee4d2deea4be 90 _dev.printf("---------- Reset & get Firmware ----------\r\n");
gboggs3 0:ee4d2deea4be 91 strcpy(snd,"node.restart()\r\n");
gboggs3 0:ee4d2deea4be 92 SendCMD();
gboggs3 0:ee4d2deea4be 93 timeout=5;
gboggs3 0:ee4d2deea4be 94 getReply();
gboggs3 0:ee4d2deea4be 95 _dev.printf(buf);
gboggs3 0:ee4d2deea4be 96
gboggs3 0:ee4d2deea4be 97 wait(2);
gboggs3 0:ee4d2deea4be 98 _dev.printf("\n---------- Get Version ----------\r\n");
gboggs3 0:ee4d2deea4be 99 strcpy(snd,"print(node.info())\r\n");
gboggs3 0:ee4d2deea4be 100 SendCMD();
gboggs3 0:ee4d2deea4be 101 timeout=4;
gboggs3 0:ee4d2deea4be 102 getReply();
gboggs3 0:ee4d2deea4be 103 _dev.printf(buf);
gboggs3 0:ee4d2deea4be 104
gboggs3 0:ee4d2deea4be 105 wait(3);
gboggs3 0:ee4d2deea4be 106 // Set CWMODE to 1=Station, 2=AP, 3=BOTH, Default mode=1 (Station)
gboggs3 0:ee4d2deea4be 107 _dev.printf("\n---------- Setting Mode ----------\r\n");
gboggs3 0:ee4d2deea4be 108 strcpy(snd, "wifi.setmode(wifi.STATION)\r\n");
gboggs3 0:ee4d2deea4be 109 SendCMD();
gboggs3 0:ee4d2deea4be 110 timeout=4;
gboggs3 0:ee4d2deea4be 111 getReply();
gboggs3 0:ee4d2deea4be 112 _dev.printf(buf);
gboggs3 0:ee4d2deea4be 113
gboggs3 0:ee4d2deea4be 114 wait(2);
gboggs3 0:ee4d2deea4be 115 _dev.printf("\n---------- Listing Access Points ----------\r\n");
gboggs3 0:ee4d2deea4be 116 strcpy(snd, "function listap(t)\r\n");
gboggs3 0:ee4d2deea4be 117 SendCMD();
gboggs3 0:ee4d2deea4be 118 wait(1);
gboggs3 0:ee4d2deea4be 119 strcpy(snd, "for k,v in pairs(t) do\r\n");
gboggs3 0:ee4d2deea4be 120 SendCMD();
gboggs3 0:ee4d2deea4be 121 wait(1);
gboggs3 0:ee4d2deea4be 122 strcpy(snd, "print(k..\" : \"..v)\r\n");
gboggs3 0:ee4d2deea4be 123 SendCMD();
gboggs3 0:ee4d2deea4be 124 wait(1);
gboggs3 0:ee4d2deea4be 125 strcpy(snd, "end\r\n");
gboggs3 0:ee4d2deea4be 126 SendCMD();
gboggs3 0:ee4d2deea4be 127 wait(1);
gboggs3 0:ee4d2deea4be 128 strcpy(snd, "end\r\n");
gboggs3 0:ee4d2deea4be 129 SendCMD();
gboggs3 0:ee4d2deea4be 130 wait(1);
gboggs3 0:ee4d2deea4be 131 strcpy(snd, "wifi.sta.getap(listap)\r\n");
gboggs3 0:ee4d2deea4be 132 SendCMD();
gboggs3 0:ee4d2deea4be 133
gboggs3 0:ee4d2deea4be 134 wait(1);
gboggs3 0:ee4d2deea4be 135 timeout=15;
gboggs3 0:ee4d2deea4be 136 getReply();
gboggs3 0:ee4d2deea4be 137 _dev.printf(buf);
gboggs3 0:ee4d2deea4be 138
gboggs3 0:ee4d2deea4be 139 wait(2);
gboggs3 0:ee4d2deea4be 140 _dev.printf("\n---------- Connecting to AP ----------\r\n");
gboggs3 0:ee4d2deea4be 141 _dev.printf("ssid = %s pwd = %s\r\n",ssid,pwd);
gboggs3 0:ee4d2deea4be 142 strcpy(snd, "wifi.sta.config(\"");
gboggs3 0:ee4d2deea4be 143 strcat(snd, ssid);
gboggs3 0:ee4d2deea4be 144 strcat(snd, "\",\"");
gboggs3 0:ee4d2deea4be 145 strcat(snd, pwd);
gboggs3 0:ee4d2deea4be 146 strcat(snd, "\")\r\n");
gboggs3 0:ee4d2deea4be 147 SendCMD();
gboggs3 0:ee4d2deea4be 148 timeout=10;
gboggs3 0:ee4d2deea4be 149 getReply();
gboggs3 0:ee4d2deea4be 150 _dev.printf(buf);
gboggs3 0:ee4d2deea4be 151
gboggs3 0:ee4d2deea4be 152 wait(5);
gboggs3 0:ee4d2deea4be 153 _dev.printf("\n---------- Get IP's ----------\r\n");
gboggs3 0:ee4d2deea4be 154 strcpy(snd, "print(wifi.sta.getip())\r\n");
gboggs3 0:ee4d2deea4be 155 SendCMD();
gboggs3 0:ee4d2deea4be 156 timeout=3;
gboggs3 0:ee4d2deea4be 157 getReply();
gboggs3 0:ee4d2deea4be 158 _dev.printf(buf);
gboggs3 0:ee4d2deea4be 159
gboggs3 0:ee4d2deea4be 160 wait(1);
gboggs3 0:ee4d2deea4be 161 _dev.printf("\n---------- Get Connection Status ----------\r\n");
gboggs3 0:ee4d2deea4be 162 strcpy(snd, "print(wifi.sta.status())\r\n");
gboggs3 0:ee4d2deea4be 163 SendCMD();
gboggs3 0:ee4d2deea4be 164 timeout=5;
gboggs3 0:ee4d2deea4be 165 getReply();
gboggs3 0:ee4d2deea4be 166 _dev.printf(buf);
gboggs3 0:ee4d2deea4be 167 _dev.printf("\n\n\n If you get a valid (non zero) IP, ESP8266 has been set up.\r\n");
gboggs3 0:ee4d2deea4be 168 _dev.printf(" Run this if you want to reconfig the ESP8266 at any time.\r\n");
gboggs3 0:ee4d2deea4be 169 _dev.printf(" It saves the SSID and password settings internally\r\n");
gboggs3 0:ee4d2deea4be 170
gboggs3 0:ee4d2deea4be 171 wait(10);
gboggs3 0:ee4d2deea4be 172 _dev.printf("\n---------- Setting up http server ----------\r\n");
gboggs3 0:ee4d2deea4be 173 strcpy(snd, "srv=net.createServer(net.TCP)\r\n");
gboggs3 0:ee4d2deea4be 174 SendCMD();
gboggs3 0:ee4d2deea4be 175 wait(1);
gboggs3 0:ee4d2deea4be 176 strcpy(snd, "srv:listen(80,function(conn)\r\n");
gboggs3 0:ee4d2deea4be 177 SendCMD();
gboggs3 0:ee4d2deea4be 178 wait(1);
gboggs3 0:ee4d2deea4be 179 strcpy(snd, "conn:on(\"receive\",function(conn,payload)\r\n");
gboggs3 0:ee4d2deea4be 180 SendCMD();
gboggs3 0:ee4d2deea4be 181 wait(1);
gboggs3 0:ee4d2deea4be 182 strcpy(snd, "print(payload)\r\n");
gboggs3 0:ee4d2deea4be 183 SendCMD();
gboggs3 0:ee4d2deea4be 184 wait(1);
gboggs3 0:ee4d2deea4be 185 strcpy(snd, "conn:send(\"<!DOCTYPE html>\")\r\n");
gboggs3 0:ee4d2deea4be 186 SendCMD();
gboggs3 0:ee4d2deea4be 187 wait(1);
gboggs3 0:ee4d2deea4be 188 strcpy(snd, "conn:send(\"<html>\")\r\n");
gboggs3 0:ee4d2deea4be 189 SendCMD();
gboggs3 0:ee4d2deea4be 190 wait(1);
gboggs3 0:ee4d2deea4be 191 strcpy(snd, "conn:send(\"</html>\")\r\n");
gboggs3 0:ee4d2deea4be 192 SendCMD();
gboggs3 0:ee4d2deea4be 193 wait(1);
gboggs3 0:ee4d2deea4be 194 strcpy(snd, "end)\r\n");
gboggs3 0:ee4d2deea4be 195 SendCMD();
gboggs3 0:ee4d2deea4be 196 wait(1);
gboggs3 0:ee4d2deea4be 197 strcpy(snd, "conn:on(\"sent\",function(conn) conn:close() end)\r\n");
gboggs3 0:ee4d2deea4be 198 SendCMD();
gboggs3 0:ee4d2deea4be 199 wait(1);
gboggs3 0:ee4d2deea4be 200 strcpy(snd, "end)\r\n");
gboggs3 0:ee4d2deea4be 201 SendCMD();
gboggs3 0:ee4d2deea4be 202
gboggs3 0:ee4d2deea4be 203 wait(1);
gboggs3 0:ee4d2deea4be 204 timeout=17;
gboggs3 0:ee4d2deea4be 205 getReply();
gboggs3 0:ee4d2deea4be 206 _dev.printf(buf);
gboggs3 0:ee4d2deea4be 207 _dev.printf("\r\nDONE");
gboggs3 0:ee4d2deea4be 208 }
gboggs3 0:ee4d2deea4be 209
gboggs3 0:ee4d2deea4be 210 /**
gboggs3 0:ee4d2deea4be 211 *
gboggs3 0:ee4d2deea4be 212 */
gboggs3 0:ee4d2deea4be 213 void Huzzah :: SendCMD()
gboggs3 0:ee4d2deea4be 214 {
gboggs3 0:ee4d2deea4be 215 _cmd.printf("%s", snd);
gboggs3 0:ee4d2deea4be 216 }
gboggs3 0:ee4d2deea4be 217
gboggs3 0:ee4d2deea4be 218 /**
gboggs3 0:ee4d2deea4be 219 *
gboggs3 0:ee4d2deea4be 220 */
gboggs3 0:ee4d2deea4be 221 void Huzzah :: getReply()
gboggs3 0:ee4d2deea4be 222 {
gboggs3 0:ee4d2deea4be 223 memset(buf, '\0', sizeof(buf));
gboggs3 0:ee4d2deea4be 224 t.start();
gboggs3 0:ee4d2deea4be 225 ended = 0;
gboggs3 0:ee4d2deea4be 226 count = 0;
gboggs3 0:ee4d2deea4be 227 while(!ended) {
gboggs3 0:ee4d2deea4be 228 if(_cmd.readable()) {
gboggs3 0:ee4d2deea4be 229 buf[count] = _cmd.getc();
gboggs3 0:ee4d2deea4be 230 count++;
gboggs3 0:ee4d2deea4be 231 }
gboggs3 0:ee4d2deea4be 232 if(t.read() > timeout) {
gboggs3 0:ee4d2deea4be 233 ended = 1;
gboggs3 0:ee4d2deea4be 234 t.stop();
gboggs3 0:ee4d2deea4be 235 t.reset();
gboggs3 0:ee4d2deea4be 236 }
gboggs3 0:ee4d2deea4be 237 }
gboggs3 0:ee4d2deea4be 238 }
gboggs3 0:ee4d2deea4be 239
gboggs3 0:ee4d2deea4be 240 /**
gboggs3 0:ee4d2deea4be 241 *
gboggs3 0:ee4d2deea4be 242 *
gboggs3 0:ee4d2deea4be 243 */
gboggs3 0:ee4d2deea4be 244 void Huzzah :: setLocalSerial(RawSerial cmd, int baud)
gboggs3 0:ee4d2deea4be 245 {
gboggs3 0:ee4d2deea4be 246 _cmd = cmd;
gboggs3 0:ee4d2deea4be 247 _cmd.baud(baud);
gboggs3 0:ee4d2deea4be 248 }
gboggs3 0:ee4d2deea4be 249
gboggs3 0:ee4d2deea4be 250 /**
gboggs3 0:ee4d2deea4be 251 *
gboggs3 0:ee4d2deea4be 252 *
gboggs3 0:ee4d2deea4be 253 */
gboggs3 0:ee4d2deea4be 254 void Huzzah :: setSerialDev(RawSerial dev, int baud)
gboggs3 0:ee4d2deea4be 255 {
gboggs3 0:ee4d2deea4be 256 _dev = dev;
gboggs3 0:ee4d2deea4be 257 _dev.baud(baud);
gboggs3 0:ee4d2deea4be 258 }
gboggs3 0:ee4d2deea4be 259
gboggs3 0:ee4d2deea4be 260 /**
gboggs3 0:ee4d2deea4be 261 *
gboggs3 0:ee4d2deea4be 262 *
gboggs3 0:ee4d2deea4be 263 */
gboggs3 0:ee4d2deea4be 264 RawSerial Huzzah :: getLocalSerial()
gboggs3 0:ee4d2deea4be 265 {
gboggs3 0:ee4d2deea4be 266 return _cmd;
gboggs3 0:ee4d2deea4be 267 }
gboggs3 0:ee4d2deea4be 268
gboggs3 0:ee4d2deea4be 269 /**
gboggs3 0:ee4d2deea4be 270 *
gboggs3 0:ee4d2deea4be 271 *
gboggs3 0:ee4d2deea4be 272 */
gboggs3 0:ee4d2deea4be 273 RawSerial Huzzah :: getSerialDev()
gboggs3 0:ee4d2deea4be 274 {
gboggs3 0:ee4d2deea4be 275 return _dev;
gboggs3 0:ee4d2deea4be 276 }
gboggs3 0:ee4d2deea4be 277
gboggs3 0:ee4d2deea4be 278
gboggs3 0:ee4d2deea4be 279 /**
gboggs3 0:ee4d2deea4be 280 *
gboggs3 0:ee4d2deea4be 281 *
gboggs3 0:ee4d2deea4be 282 */
gboggs3 0:ee4d2deea4be 283 void Huzzah :: reset()
gboggs3 0:ee4d2deea4be 284 {
gboggs3 0:ee4d2deea4be 285
gboggs3 0:ee4d2deea4be 286 _rst = 0;
gboggs3 0:ee4d2deea4be 287 wait(0.5);
gboggs3 0:ee4d2deea4be 288 _rst = 1;
gboggs3 0:ee4d2deea4be 289 _dev.printf("\f\n\r-------------ESP8266 Hardware Reset-------------\n\r");
gboggs3 0:ee4d2deea4be 290 }
gboggs3 0:ee4d2deea4be 291
gboggs3 0:ee4d2deea4be 292 /**
gboggs3 0:ee4d2deea4be 293 *
gboggs3 0:ee4d2deea4be 294 *
gboggs3 0:ee4d2deea4be 295 */
gboggs3 0:ee4d2deea4be 296 void Huzzah :: baudrate(int speed)
gboggs3 0:ee4d2deea4be 297 {
gboggs3 0:ee4d2deea4be 298 _cmd.baud(speed);
gboggs3 0:ee4d2deea4be 299 ESPSetBaudrate(speed);
gboggs3 0:ee4d2deea4be 300 }
gboggs3 0:ee4d2deea4be 301
gboggs3 0:ee4d2deea4be 302 /**
gboggs3 0:ee4d2deea4be 303 *
gboggs3 0:ee4d2deea4be 304 *
gboggs3 0:ee4d2deea4be 305 */
gboggs3 0:ee4d2deea4be 306 void Huzzah :: recv()
gboggs3 0:ee4d2deea4be 307 {
gboggs3 0:ee4d2deea4be 308 while(_dev.readable()) {
gboggs3 0:ee4d2deea4be 309 _cmd.putc(_dev.getc());
gboggs3 0:ee4d2deea4be 310 }
gboggs3 0:ee4d2deea4be 311 }
gboggs3 0:ee4d2deea4be 312
gboggs3 0:ee4d2deea4be 313
gboggs3 0:ee4d2deea4be 314 /**
gboggs3 0:ee4d2deea4be 315 *
gboggs3 0:ee4d2deea4be 316 *
gboggs3 0:ee4d2deea4be 317 */
gboggs3 0:ee4d2deea4be 318 void Huzzah :: send()
gboggs3 0:ee4d2deea4be 319 {
gboggs3 0:ee4d2deea4be 320 while(_cmd.readable()) {
gboggs3 0:ee4d2deea4be 321 _dev.putc(_cmd.getc());
gboggs3 0:ee4d2deea4be 322 }
gboggs3 0:ee4d2deea4be 323 }
gboggs3 0:ee4d2deea4be 324
gboggs3 0:ee4d2deea4be 325
gboggs3 0:ee4d2deea4be 326