Kevin Rhyne / Whiffy

Dependencies:   4DGL-uLCD-SE mbed

Committer:
kevinrhyne
Date:
Tue Oct 20 09:24:07 2015 +0000
Revision:
15:469db0f84fd5
Parent:
14:8d31d304eeb3
Child:
16:491e2336bb95
doesntwork;

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