Kevin Rhyne / Whiffy

Dependencies:   4DGL-uLCD-SE mbed

Committer:
kevinrhyne
Date:
Mon Oct 19 22:25:18 2015 +0000
Revision:
13:ef68cbcb4e9a
Parent:
12:ef988c7fe8a4
Child:
14:8d31d304eeb3
wifi char passing

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