Kevin Rhyne / Whiffy

Dependencies:   4DGL-uLCD-SE mbed

Committer:
kevinrhyne
Date:
Wed Oct 21 19:08:18 2015 +0000
Revision:
18:94536dca963c
Parent:
17:4d0e180cde20
code

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kevinrhyne 10:99392075e1d0 1 #include "mbed.h"
kevinrhyne 7:33ef027d0378 2 #include <stdio.h>
kevinrhyne 10:99392075e1d0 3 #include "WifiControl.h"
kevinrhyne 10:99392075e1d0 4
kevinrhyne 14:8d31d304eeb3 5 WifiControl::WifiControl() : pc(USBTX, USBRX), esp(p28, p27) {
kevinrhyne 10:99392075e1d0 6
kevinrhyne 10:99392075e1d0 7
kevinrhyne 10:99392075e1d0 8 DigitalOut reset(p26);
kevinrhyne 18:94536dca963c 9 AnalogIn configSwitch(p15);
kevinrhyne 18:94536dca963c 10
kevinrhyne 10:99392075e1d0 11 reset=0; //hardware reset for 8266
kevinrhyne 14:8d31d304eeb3 12 pc.baud(115200); // set what you want here depending on your terminal program speed
kevinrhyne 14:8d31d304eeb3 13 pc.printf("\f\n\r-------------ESP8266 Hardware Reset-------------\n\r");
kevinrhyne 10:99392075e1d0 14 wait(0.5);
kevinrhyne 10:99392075e1d0 15 reset=1;
kevinrhyne 10:99392075e1d0 16 timeout=2;
kevinrhyne 10:99392075e1d0 17 getreply();
kevinrhyne 10:99392075e1d0 18
kevinrhyne 14:8d31d304eeb3 19 esp.baud(115200); // change this to the new ESP8266 baudrate if it is changed at any time.
kevinrhyne 14:8d31d304eeb3 20
kevinrhyne 14:8d31d304eeb3 21 //ESPsetbaudrate(); //****************** include this routine to set a different ESP8266 baudrate ******************
kevinrhyne 14:8d31d304eeb3 22
kevinrhyne 14:8d31d304eeb3 23 //ESPconfig(); //****************** include Config to set the ESP8266 configuration ***********************
kevinrhyne 13:ef68cbcb4e9a 24
kevinrhyne 18:94536dca963c 25
kevinrhyne 18:94536dca963c 26
kevinrhyne 18:94536dca963c 27 if ( configSwitch > 0.5f ) {
kevinrhyne 18:94536dca963c 28 pc.printf("CONFIG SWITCH THROWN");
kevinrhyne 18:94536dca963c 29 ESPconfig();
kevinrhyne 18:94536dca963c 30 }
kevinrhyne 18:94536dca963c 31
kevinrhyne 18:94536dca963c 32
kevinrhyne 16:491e2336bb95 33 strcpy(snd,"AT+RST\r\n");
kevinrhyne 16:491e2336bb95 34 SendCMD();
kevinrhyne 18:94536dca963c 35 wait(3);
kevinrhyne 18:94536dca963c 36
kevinrhyne 18:94536dca963c 37
kevinrhyne 16:491e2336bb95 38
kevinrhyne 16:491e2336bb95 39
kevinrhyne 16:491e2336bb95 40
kevinrhyne 13:ef68cbcb4e9a 41
kevinrhyne 13:ef68cbcb4e9a 42
kevinrhyne 13:ef68cbcb4e9a 43 }
kevinrhyne 13:ef68cbcb4e9a 44
kevinrhyne 14:8d31d304eeb3 45 void WifiControl::quickConfig() {
kevinrhyne 13:ef68cbcb4e9a 46
kevinrhyne 14:8d31d304eeb3 47
kevinrhyne 14:8d31d304eeb3 48
kevinrhyne 14:8d31d304eeb3 49 }
kevinrhyne 14:8d31d304eeb3 50
kevinrhyne 14:8d31d304eeb3 51 string WifiControl::pollAP(){
kevinrhyne 13:ef68cbcb4e9a 52
kevinrhyne 14:8d31d304eeb3 53 pc.printf("\n---------- Privately polling APs ----------\r\n");
kevinrhyne 14:8d31d304eeb3 54 strcpy(snd, "AT+CWLAP\r\n");
kevinrhyne 14:8d31d304eeb3 55 SendCMD();
kevinrhyne 14:8d31d304eeb3 56 timeout=15;
kevinrhyne 14:8d31d304eeb3 57 getreply();
kevinrhyne 15:469db0f84fd5 58 pc.printf(buf);
kevinrhyne 14:8d31d304eeb3 59 string results(buf);
kevinrhyne 14:8d31d304eeb3 60 pc.printf(" "); //Serial weirdness.
kevinrhyne 14:8d31d304eeb3 61 return results;
kevinrhyne 13:ef68cbcb4e9a 62
kevinrhyne 13:ef68cbcb4e9a 63
kevinrhyne 13:ef68cbcb4e9a 64 }
kevinrhyne 13:ef68cbcb4e9a 65
kevinrhyne 13:ef68cbcb4e9a 66 void WifiControl::getIPMAC() {
kevinrhyne 13:ef68cbcb4e9a 67
kevinrhyne 14:8d31d304eeb3 68 pc.printf("\n---------- Get IP and MAC ----------\r\n");
kevinrhyne 10:99392075e1d0 69 strcpy(snd, "AT+CIFSR\r\n");
kevinrhyne 10:99392075e1d0 70 SendCMD();
kevinrhyne 10:99392075e1d0 71 timeout=10;
kevinrhyne 10:99392075e1d0 72 getreply();
kevinrhyne 14:8d31d304eeb3 73 pc.printf(buf);
kevinrhyne 10:99392075e1d0 74 wait(2);
kevinrhyne 10:99392075e1d0 75 }
kevinrhyne 10:99392075e1d0 76
kevinrhyne 13:ef68cbcb4e9a 77 void WifiControl::connect(char * ssid, char * pwd) { //32 byte chars
kevinrhyne 13:ef68cbcb4e9a 78
kevinrhyne 14:8d31d304eeb3 79 pc.printf("\n---------- Connecting to AP ----------\r\n");
kevinrhyne 14:8d31d304eeb3 80 pc.printf("ssid = %s pwd = %s\r\n",ssid,pwd);
kevinrhyne 13:ef68cbcb4e9a 81 strcpy(snd, "AT+CWJAP=\"");
kevinrhyne 13:ef68cbcb4e9a 82 strcat(snd, ssid);
kevinrhyne 13:ef68cbcb4e9a 83 strcat(snd, "\",\"");
kevinrhyne 13:ef68cbcb4e9a 84 strcat(snd, pwd);
kevinrhyne 13:ef68cbcb4e9a 85 strcat(snd, "\"\r\n");
kevinrhyne 12:ef988c7fe8a4 86 SendCMD();
kevinrhyne 13:ef68cbcb4e9a 87 timeout=10;
kevinrhyne 12:ef988c7fe8a4 88 getreply();
kevinrhyne 14:8d31d304eeb3 89 //pc.printf(buf);
kevinrhyne 12:ef988c7fe8a4 90
kevinrhyne 12:ef988c7fe8a4 91 }
kevinrhyne 12:ef988c7fe8a4 92
kevinrhyne 13:ef68cbcb4e9a 93
kevinrhyne 13:ef68cbcb4e9a 94
kevinrhyne 13:ef68cbcb4e9a 95
kevinrhyne 13:ef68cbcb4e9a 96
kevinrhyne 13:ef68cbcb4e9a 97
kevinrhyne 10:99392075e1d0 98 void WifiControl::ESPsetbaudrate()
kevinrhyne 10:99392075e1d0 99 {
kevinrhyne 10:99392075e1d0 100 strcpy(snd, "AT+CIOBAUD=115200\r\n"); // change the numeric value to the required baudrate
kevinrhyne 10:99392075e1d0 101 SendCMD();
kevinrhyne 10:99392075e1d0 102 }
kevinrhyne 10:99392075e1d0 103
kevinrhyne 10:99392075e1d0 104 // +++++++++++++++++++++++++++++++++ This is for ESP8266 config only, run this once to set up the ESP8266 +++++++++++++++
kevinrhyne 10:99392075e1d0 105 void WifiControl::ESPconfig()
kevinrhyne 10:99392075e1d0 106 {
kevinrhyne 10:99392075e1d0 107
kevinrhyne 3:d30ae8ff30bf 108
kevinrhyne 3:d30ae8ff30bf 109
kevinrhyne 10:99392075e1d0 110 strcpy(snd, "AT+CIOBAUD=115200\r\n"); // change the numeric value to the required baudrate
kevinrhyne 10:99392075e1d0 111 SendCMD();
kevinrhyne 14:8d31d304eeb3 112
kevinrhyne 10:99392075e1d0 113 wait(5);
kevinrhyne 10:99392075e1d0 114 strcpy(snd,"AT\r\n");
kevinrhyne 10:99392075e1d0 115 SendCMD();
kevinrhyne 10:99392075e1d0 116 wait(1);
kevinrhyne 10:99392075e1d0 117 strcpy(snd,"AT\r\n");
kevinrhyne 10:99392075e1d0 118 SendCMD();
kevinrhyne 10:99392075e1d0 119 wait(1);
kevinrhyne 10:99392075e1d0 120 strcpy(snd,"AT\r\n");
kevinrhyne 10:99392075e1d0 121 SendCMD();
kevinrhyne 10:99392075e1d0 122 timeout=1;
kevinrhyne 10:99392075e1d0 123 getreply();
kevinrhyne 10:99392075e1d0 124 wait(1);
kevinrhyne 14:8d31d304eeb3 125 pc.printf("\f---------- Starting ESP Config ----------\r\n\n");
kevinrhyne 10:99392075e1d0 126
kevinrhyne 14:8d31d304eeb3 127 pc.printf("---------- Reset & get Firmware ----------\r\n");
kevinrhyne 10:99392075e1d0 128 strcpy(snd,"AT+RST\r\n");
kevinrhyne 10:99392075e1d0 129 SendCMD();
kevinrhyne 10:99392075e1d0 130 timeout=5;
kevinrhyne 10:99392075e1d0 131 getreply();
kevinrhyne 14:8d31d304eeb3 132 pc.printf(buf);
kevinrhyne 10:99392075e1d0 133
kevinrhyne 10:99392075e1d0 134 wait(2);
kevinrhyne 10:99392075e1d0 135
kevinrhyne 14:8d31d304eeb3 136 pc.printf("\n---------- Get Version ----------\r\n");
kevinrhyne 10:99392075e1d0 137 strcpy(snd,"AT+GMR\r\n");
kevinrhyne 10:99392075e1d0 138 SendCMD();
kevinrhyne 10:99392075e1d0 139 timeout=4;
kevinrhyne 10:99392075e1d0 140 getreply();
kevinrhyne 14:8d31d304eeb3 141 pc.printf(buf);
kevinrhyne 10:99392075e1d0 142
kevinrhyne 10:99392075e1d0 143 wait(3);
kevinrhyne 10:99392075e1d0 144
kevinrhyne 10:99392075e1d0 145 // set CWMODE to 1=Station,2=AP,3=BOTH, default mode 1 (Station)
kevinrhyne 14:8d31d304eeb3 146 pc.printf("\n---------- Setting Mode ----------\r\n");
kevinrhyne 10:99392075e1d0 147 strcpy(snd, "AT+CWMODE=1\r\n");
kevinrhyne 10:99392075e1d0 148 SendCMD();
kevinrhyne 10:99392075e1d0 149 timeout=4;
kevinrhyne 10:99392075e1d0 150 getreply();
kevinrhyne 14:8d31d304eeb3 151 pc.printf(buf);
kevinrhyne 10:99392075e1d0 152
kevinrhyne 10:99392075e1d0 153 wait(2);
kevinrhyne 10:99392075e1d0 154
kevinrhyne 10:99392075e1d0 155 // set CIPMUX to 0=Single,1=Multi
kevinrhyne 14:8d31d304eeb3 156 pc.printf("\n---------- Setting Connection Mode ----------\r\n");
kevinrhyne 10:99392075e1d0 157 strcpy(snd, "AT+CIPMUX=1\r\n");
kevinrhyne 10:99392075e1d0 158 SendCMD();
kevinrhyne 10:99392075e1d0 159 timeout=4;
kevinrhyne 10:99392075e1d0 160 getreply();
kevinrhyne 14:8d31d304eeb3 161 pc.printf(buf);
kevinrhyne 10:99392075e1d0 162
kevinrhyne 10:99392075e1d0 163 wait(2);
kevinrhyne 10:99392075e1d0 164
kevinrhyne 14:8d31d304eeb3 165 pc.printf("\n---------- Listing Access Points ----------\r\n");
kevinrhyne 10:99392075e1d0 166 strcpy(snd, "AT+CWLAP\r\n");
kevinrhyne 10:99392075e1d0 167 SendCMD();
kevinrhyne 10:99392075e1d0 168 timeout=15;
kevinrhyne 10:99392075e1d0 169 getreply();
kevinrhyne 14:8d31d304eeb3 170 pc.printf(buf);
kevinrhyne 10:99392075e1d0 171
kevinrhyne 10:99392075e1d0 172 wait(2);
kevinrhyne 13:ef68cbcb4e9a 173
kevinrhyne 13:ef68cbcb4e9a 174 char ssid[32] = "GTOther";
kevinrhyne 13:ef68cbcb4e9a 175 char pwd[32] = "GeorgeP@1927";
kevinrhyne 13:ef68cbcb4e9a 176
kevinrhyne 13:ef68cbcb4e9a 177 connect(ssid, pwd);
kevinrhyne 13:ef68cbcb4e9a 178
kevinrhyne 10:99392075e1d0 179 wait(5);
kevinrhyne 10:99392075e1d0 180
kevinrhyne 14:8d31d304eeb3 181 pc.printf("\n---------- Get IP's ----------\r\n");
kevinrhyne 10:99392075e1d0 182 strcpy(snd, "AT+CIFSR\r\n");
kevinrhyne 10:99392075e1d0 183 SendCMD();
kevinrhyne 10:99392075e1d0 184 timeout=3;
kevinrhyne 10:99392075e1d0 185 getreply();
kevinrhyne 14:8d31d304eeb3 186 pc.printf(buf);
kevinrhyne 10:99392075e1d0 187
kevinrhyne 10:99392075e1d0 188 wait(1);
kevinrhyne 10:99392075e1d0 189
kevinrhyne 14:8d31d304eeb3 190 pc.printf("\n---------- Get Connection Status ----------\r\n");
kevinrhyne 10:99392075e1d0 191 strcpy(snd, "AT+CIPSTATUS\r\n");
kevinrhyne 10:99392075e1d0 192 SendCMD();
kevinrhyne 10:99392075e1d0 193 timeout=5;
kevinrhyne 10:99392075e1d0 194 getreply();
kevinrhyne 14:8d31d304eeb3 195 pc.printf(buf);
kevinrhyne 10:99392075e1d0 196
kevinrhyne 14:8d31d304eeb3 197 pc.printf("\n\n\n If you get a valid (non zero) IP, ESP8266 has been set up.\r\n");
kevinrhyne 14:8d31d304eeb3 198 pc.printf(" Run this if you want to reconfig the ESP8266 at any time.\r\n");
kevinrhyne 14:8d31d304eeb3 199 pc.printf(" It saves the SSID and password settings internally\r\n");
kevinrhyne 10:99392075e1d0 200 wait(10);
kevinrhyne 10:99392075e1d0 201 }
kevinrhyne 10:99392075e1d0 202
kevinrhyne 10:99392075e1d0 203 void WifiControl::SendCMD()
kevinrhyne 10:99392075e1d0 204 {
kevinrhyne 14:8d31d304eeb3 205 esp.printf("%s", snd);
kevinrhyne 10:99392075e1d0 206 }
kevinrhyne 10:99392075e1d0 207
kevinrhyne 10:99392075e1d0 208 void WifiControl::getreply()
kevinrhyne 10:99392075e1d0 209 {
kevinrhyne 10:99392075e1d0 210 memset(buf, '\0', sizeof(buf));
kevinrhyne 10:99392075e1d0 211 t.start();
kevinrhyne 10:99392075e1d0 212 ended=0;
kevinrhyne 10:99392075e1d0 213 count=0;
kevinrhyne 10:99392075e1d0 214 while(!ended) {
kevinrhyne 14:8d31d304eeb3 215 if(esp.readable()) {
kevinrhyne 14:8d31d304eeb3 216 buf[count] = esp.getc();
kevinrhyne 10:99392075e1d0 217 count++;
kevinrhyne 10:99392075e1d0 218 }
kevinrhyne 10:99392075e1d0 219 if(t.read() > timeout) {
kevinrhyne 10:99392075e1d0 220 ended = 1;
kevinrhyne 10:99392075e1d0 221 t.stop();
kevinrhyne 10:99392075e1d0 222 t.reset();
kevinrhyne 10:99392075e1d0 223 }
kevinrhyne 10:99392075e1d0 224 }
kevinrhyne 10:99392075e1d0 225 }