Kevin Rhyne / Whiffy

Dependencies:   4DGL-uLCD-SE mbed

Committer:
kevinrhyne
Date:
Tue Oct 20 12:38:02 2015 +0000
Revision:
17:4d0e180cde20
Parent:
16:491e2336bb95
Child:
18:94536dca963c
working

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