Kevin Rhyne / Whiffy

Dependencies:   4DGL-uLCD-SE mbed

Committer:
kevinrhyne
Date:
Tue Oct 20 09:32:35 2015 +0000
Revision:
16:491e2336bb95
Parent:
15:469db0f84fd5
Child:
17:4d0e180cde20
Working lister;

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