For test

Dependencies:   mbed

Committer:
shennongmin
Date:
Tue Feb 03 07:31:13 2015 +0000
Revision:
11:7bd1b2a67b1a
Parent:
10:9d4ec0359a5c
Child:
12:4e4e72f18047
debug linked list

Who changed what in which revision?

UserRevisionLine numberNew contents of line
shennongmin 10:9d4ec0359a5c 1 #include "ESP8266.h"
shennongmin 10:9d4ec0359a5c 2
shennongmin 10:9d4ec0359a5c 3 #define ESP8266_DEBUG
shennongmin 10:9d4ec0359a5c 4
shennongmin 10:9d4ec0359a5c 5 #ifdef ESP8266_DEBUG
shennongmin 10:9d4ec0359a5c 6 #define DBG(message) printf(message)
shennongmin 10:9d4ec0359a5c 7 #else
shennongmin 10:9d4ec0359a5c 8 #define DBG(message) do{}while(0)
shennongmin 10:9d4ec0359a5c 9 #endif
shennongmin 10:9d4ec0359a5c 10
shennongmin 10:9d4ec0359a5c 11
shennongmin 10:9d4ec0359a5c 12 ESP8266::ESP8266(PinName tx, PinName rx):esp_uart(tx, rx) {
shennongmin 10:9d4ec0359a5c 13
shennongmin 10:9d4ec0359a5c 14 }
shennongmin 10:9d4ec0359a5c 15
shennongmin 10:9d4ec0359a5c 16 int ESP8266::get_chlID(void) {
shennongmin 10:9d4ec0359a5c 17 return chlID;
shennongmin 10:9d4ec0359a5c 18 }
shennongmin 10:9d4ec0359a5c 19
shennongmin 10:9d4ec0359a5c 20 void ESP8266::begin(void)
shennongmin 10:9d4ec0359a5c 21 {
shennongmin 10:9d4ec0359a5c 22 bool result = false;
shennongmin 10:9d4ec0359a5c 23 esp_uart.begin(9600); //The default baud rate of ESP8266 is 115200
shennongmin 10:9d4ec0359a5c 24
shennongmin 10:9d4ec0359a5c 25 esp_uart.flush();
shennongmin 10:9d4ec0359a5c 26 esp_uart.setTimeout(5000);
shennongmin 10:9d4ec0359a5c 27 esp_uart.println("AT+RST");
shennongmin 10:9d4ec0359a5c 28 DBG("AT+RST\r\n");
shennongmin 11:7bd1b2a67b1a 29 printf("0.0\r\n");
shennongmin 10:9d4ec0359a5c 30 result = esp_uart.find("eady");
shennongmin 11:7bd1b2a67b1a 31 printf("2.0\r\n");
shennongmin 11:7bd1b2a67b1a 32
shennongmin 10:9d4ec0359a5c 33 if(result)
shennongmin 10:9d4ec0359a5c 34 DBG("Module is ready\r\n");
shennongmin 10:9d4ec0359a5c 35 else
shennongmin 10:9d4ec0359a5c 36 {
shennongmin 10:9d4ec0359a5c 37 DBG("Module have no response\r\n");
shennongmin 10:9d4ec0359a5c 38 while(1);
shennongmin 10:9d4ec0359a5c 39 }
shennongmin 10:9d4ec0359a5c 40
shennongmin 10:9d4ec0359a5c 41 }
shennongmin 10:9d4ec0359a5c 42
shennongmin 10:9d4ec0359a5c 43
shennongmin 10:9d4ec0359a5c 44 /*************************************************************************
shennongmin 10:9d4ec0359a5c 45 //Initialize port
shennongmin 10:9d4ec0359a5c 46
shennongmin 10:9d4ec0359a5c 47 mode: setting operation mode
shennongmin 10:9d4ec0359a5c 48
shennongmin 10:9d4ec0359a5c 49 chl: channel number
shennongmin 10:9d4ec0359a5c 50 ecn: encryption
shennongmin 10:9d4ec0359a5c 51
shennongmin 10:9d4ec0359a5c 52 return:
shennongmin 10:9d4ec0359a5c 53 true - successfully
shennongmin 10:9d4ec0359a5c 54 false - unsuccessfully
shennongmin 10:9d4ec0359a5c 55
shennongmin 10:9d4ec0359a5c 56 ***************************************************************************/
shennongmin 10:9d4ec0359a5c 57 bool ESP8266::Initialize(uint8_t mode, String ssid, String pwd, uint8_t chl, uint8_t ecn)
shennongmin 10:9d4ec0359a5c 58 {
shennongmin 10:9d4ec0359a5c 59 if (mode == ESP8266_MODE_STA)
shennongmin 10:9d4ec0359a5c 60 {
shennongmin 10:9d4ec0359a5c 61 bool b = confMode(mode);
shennongmin 10:9d4ec0359a5c 62 if (!b)
shennongmin 10:9d4ec0359a5c 63 {
shennongmin 10:9d4ec0359a5c 64 return false;
shennongmin 10:9d4ec0359a5c 65 }
shennongmin 10:9d4ec0359a5c 66 Reset();
shennongmin 10:9d4ec0359a5c 67 confJAP(ssid, pwd);
shennongmin 10:9d4ec0359a5c 68 }
shennongmin 10:9d4ec0359a5c 69 else if (mode == ESP8266_MODE_SAP)
shennongmin 10:9d4ec0359a5c 70 {
shennongmin 10:9d4ec0359a5c 71 bool b = confMode(mode);
shennongmin 10:9d4ec0359a5c 72 if (!b)
shennongmin 10:9d4ec0359a5c 73 {
shennongmin 10:9d4ec0359a5c 74 return false;
shennongmin 10:9d4ec0359a5c 75 }
shennongmin 10:9d4ec0359a5c 76 Reset();
shennongmin 10:9d4ec0359a5c 77 confSAP(ssid, pwd, chl, ecn);
shennongmin 10:9d4ec0359a5c 78 }
shennongmin 10:9d4ec0359a5c 79 else if (mode == ESP8266_MODE_STA_SAP)
shennongmin 10:9d4ec0359a5c 80 {
shennongmin 10:9d4ec0359a5c 81 bool b = confMode(mode);
shennongmin 10:9d4ec0359a5c 82 if (!b)
shennongmin 10:9d4ec0359a5c 83 {
shennongmin 10:9d4ec0359a5c 84 return false;
shennongmin 10:9d4ec0359a5c 85 }
shennongmin 10:9d4ec0359a5c 86 Reset();
shennongmin 10:9d4ec0359a5c 87 confJAP(ssid, pwd);
shennongmin 10:9d4ec0359a5c 88 confSAP(ssid, pwd, chl, ecn);
shennongmin 10:9d4ec0359a5c 89 }
shennongmin 10:9d4ec0359a5c 90
shennongmin 10:9d4ec0359a5c 91 return true;
shennongmin 10:9d4ec0359a5c 92 }
shennongmin 10:9d4ec0359a5c 93
shennongmin 10:9d4ec0359a5c 94 /*************************************************************************
shennongmin 10:9d4ec0359a5c 95 //Set up tcp or udp connection
shennongmin 10:9d4ec0359a5c 96
shennongmin 10:9d4ec0359a5c 97 type: tcp or udp
shennongmin 10:9d4ec0359a5c 98
shennongmin 10:9d4ec0359a5c 99 addr: ip address
shennongmin 10:9d4ec0359a5c 100
shennongmin 10:9d4ec0359a5c 101 port: port number
shennongmin 10:9d4ec0359a5c 102
shennongmin 10:9d4ec0359a5c 103 a: set multiple connection
shennongmin 10:9d4ec0359a5c 104 0 for sigle connection
shennongmin 10:9d4ec0359a5c 105 1 for multiple connection
shennongmin 10:9d4ec0359a5c 106
shennongmin 10:9d4ec0359a5c 107 id: id number(0-4)
shennongmin 10:9d4ec0359a5c 108
shennongmin 10:9d4ec0359a5c 109 return:
shennongmin 10:9d4ec0359a5c 110 true - successfully
shennongmin 10:9d4ec0359a5c 111 false - unsuccessfully
shennongmin 10:9d4ec0359a5c 112
shennongmin 10:9d4ec0359a5c 113 ***************************************************************************/
shennongmin 10:9d4ec0359a5c 114 bool ESP8266::ipConfig(uint8_t type, String addr, int port, uint8_t a, uint8_t id)
shennongmin 10:9d4ec0359a5c 115 {
shennongmin 10:9d4ec0359a5c 116 bool result = false;
shennongmin 10:9d4ec0359a5c 117 if (a == 0 )
shennongmin 10:9d4ec0359a5c 118 {
shennongmin 10:9d4ec0359a5c 119 confMux(a);
shennongmin 10:9d4ec0359a5c 120
shennongmin 10:9d4ec0359a5c 121 long timeStart = millis();
shennongmin 10:9d4ec0359a5c 122 while (1)
shennongmin 10:9d4ec0359a5c 123 {
shennongmin 10:9d4ec0359a5c 124 long time0 = millis();
shennongmin 10:9d4ec0359a5c 125 if (time0 - timeStart > 5000)
shennongmin 10:9d4ec0359a5c 126 {
shennongmin 10:9d4ec0359a5c 127 break;
shennongmin 10:9d4ec0359a5c 128 }
shennongmin 10:9d4ec0359a5c 129 }
shennongmin 10:9d4ec0359a5c 130 result = newMux(type, addr, port);
shennongmin 10:9d4ec0359a5c 131 }
shennongmin 10:9d4ec0359a5c 132 else if (a == 1)
shennongmin 10:9d4ec0359a5c 133 {
shennongmin 10:9d4ec0359a5c 134 confMux(a);
shennongmin 10:9d4ec0359a5c 135 long timeStart = millis();
shennongmin 10:9d4ec0359a5c 136 while (1)
shennongmin 10:9d4ec0359a5c 137 {
shennongmin 10:9d4ec0359a5c 138 long time0 = millis();
shennongmin 10:9d4ec0359a5c 139 if (time0 - timeStart > 5000)
shennongmin 10:9d4ec0359a5c 140 {
shennongmin 10:9d4ec0359a5c 141 break;
shennongmin 10:9d4ec0359a5c 142 }
shennongmin 10:9d4ec0359a5c 143 }
shennongmin 10:9d4ec0359a5c 144 result = newMux(id, type, addr, port);
shennongmin 10:9d4ec0359a5c 145 }
shennongmin 10:9d4ec0359a5c 146 return result;
shennongmin 10:9d4ec0359a5c 147 }
shennongmin 10:9d4ec0359a5c 148
shennongmin 10:9d4ec0359a5c 149 /*************************************************************************
shennongmin 10:9d4ec0359a5c 150 //receive message from wifi
shennongmin 10:9d4ec0359a5c 151
shennongmin 10:9d4ec0359a5c 152 buf: buffer for receiving data
shennongmin 10:9d4ec0359a5c 153
shennongmin 10:9d4ec0359a5c 154 chlID: <id>(0-4)
shennongmin 10:9d4ec0359a5c 155
shennongmin 10:9d4ec0359a5c 156 return: size of the buffer
shennongmin 10:9d4ec0359a5c 157
shennongmin 10:9d4ec0359a5c 158
shennongmin 10:9d4ec0359a5c 159 ***************************************************************************/
shennongmin 10:9d4ec0359a5c 160 int ESP8266::ReceiveMessage(char *buf)
shennongmin 10:9d4ec0359a5c 161 {
shennongmin 10:9d4ec0359a5c 162 //+IPD,<len>:<data>
shennongmin 10:9d4ec0359a5c 163 //+IPD,<id>,<len>:<data>
shennongmin 10:9d4ec0359a5c 164 String data = "";
shennongmin 10:9d4ec0359a5c 165 if (esp_uart.available()>0)
shennongmin 10:9d4ec0359a5c 166 {
shennongmin 10:9d4ec0359a5c 167
shennongmin 10:9d4ec0359a5c 168 unsigned long start;
shennongmin 10:9d4ec0359a5c 169 start = millis();
shennongmin 10:9d4ec0359a5c 170 char c0 = esp_uart.read_char();
shennongmin 10:9d4ec0359a5c 171 if (c0 == '+')
shennongmin 10:9d4ec0359a5c 172 {
shennongmin 10:9d4ec0359a5c 173
shennongmin 10:9d4ec0359a5c 174 while (millis()-start<5000)
shennongmin 10:9d4ec0359a5c 175 {
shennongmin 10:9d4ec0359a5c 176 if (esp_uart.available()>0)
shennongmin 10:9d4ec0359a5c 177 {
shennongmin 10:9d4ec0359a5c 178 char c = esp_uart.read_char();
shennongmin 10:9d4ec0359a5c 179 data += c;
shennongmin 10:9d4ec0359a5c 180 }
shennongmin 10:9d4ec0359a5c 181 if (data.indexOf("\nOK")!=-1)
shennongmin 10:9d4ec0359a5c 182 {
shennongmin 10:9d4ec0359a5c 183 break;
shennongmin 10:9d4ec0359a5c 184 }
shennongmin 10:9d4ec0359a5c 185 }
shennongmin 10:9d4ec0359a5c 186 //Serial.println(data);
shennongmin 10:9d4ec0359a5c 187 int sLen = strlen(data.c_str());
shennongmin 10:9d4ec0359a5c 188 int i,j;
shennongmin 10:9d4ec0359a5c 189 for (i = 0; i <= sLen; i++)
shennongmin 10:9d4ec0359a5c 190 {
shennongmin 10:9d4ec0359a5c 191 if (data[i] == ':')
shennongmin 10:9d4ec0359a5c 192 {
shennongmin 10:9d4ec0359a5c 193 break;
shennongmin 10:9d4ec0359a5c 194 }
shennongmin 10:9d4ec0359a5c 195
shennongmin 10:9d4ec0359a5c 196 }
shennongmin 10:9d4ec0359a5c 197 bool found = false;
shennongmin 10:9d4ec0359a5c 198 for (j = 4; j <= i; j++)
shennongmin 10:9d4ec0359a5c 199 {
shennongmin 10:9d4ec0359a5c 200 if (data[j] == ',')
shennongmin 10:9d4ec0359a5c 201 {
shennongmin 10:9d4ec0359a5c 202 found = true;
shennongmin 10:9d4ec0359a5c 203 break;
shennongmin 10:9d4ec0359a5c 204 }
shennongmin 10:9d4ec0359a5c 205
shennongmin 10:9d4ec0359a5c 206 }
shennongmin 10:9d4ec0359a5c 207 int iSize;
shennongmin 10:9d4ec0359a5c 208 //DBG(data);
shennongmin 10:9d4ec0359a5c 209 //DBG("\r\n");
shennongmin 10:9d4ec0359a5c 210 if(found ==true)
shennongmin 10:9d4ec0359a5c 211 {
shennongmin 10:9d4ec0359a5c 212 String _id = data.substring(4, j);
shennongmin 10:9d4ec0359a5c 213 chlID = _id.toInt();
shennongmin 10:9d4ec0359a5c 214 String _size = data.substring(j+1, i);
shennongmin 10:9d4ec0359a5c 215 iSize = _size.toInt();
shennongmin 10:9d4ec0359a5c 216 //DBG(_size);
shennongmin 10:9d4ec0359a5c 217 String str = data.substring(i+1, i+1+iSize);
shennongmin 10:9d4ec0359a5c 218 strcpy(buf, str.c_str());
shennongmin 10:9d4ec0359a5c 219 //DBG(str);
shennongmin 10:9d4ec0359a5c 220
shennongmin 10:9d4ec0359a5c 221 }
shennongmin 10:9d4ec0359a5c 222 else
shennongmin 10:9d4ec0359a5c 223 {
shennongmin 10:9d4ec0359a5c 224 String _size = data.substring(4, i);
shennongmin 10:9d4ec0359a5c 225 iSize = _size.toInt();
shennongmin 10:9d4ec0359a5c 226 //DBG(iSize);
shennongmin 10:9d4ec0359a5c 227 //DBG("\r\n");
shennongmin 10:9d4ec0359a5c 228 String str = data.substring(i+1, i+1+iSize);
shennongmin 10:9d4ec0359a5c 229 strcpy(buf, str.c_str());
shennongmin 10:9d4ec0359a5c 230 //DBG(str);
shennongmin 10:9d4ec0359a5c 231 }
shennongmin 10:9d4ec0359a5c 232 return iSize;
shennongmin 10:9d4ec0359a5c 233 }
shennongmin 10:9d4ec0359a5c 234 }
shennongmin 10:9d4ec0359a5c 235
shennongmin 10:9d4ec0359a5c 236 return 0;
shennongmin 10:9d4ec0359a5c 237 }
shennongmin 10:9d4ec0359a5c 238
shennongmin 10:9d4ec0359a5c 239 //////////////////////////////////////////////////////////////////////////
shennongmin 10:9d4ec0359a5c 240
shennongmin 10:9d4ec0359a5c 241
shennongmin 10:9d4ec0359a5c 242 /*************************************************************************
shennongmin 10:9d4ec0359a5c 243 //reboot the wifi module
shennongmin 10:9d4ec0359a5c 244
shennongmin 10:9d4ec0359a5c 245
shennongmin 10:9d4ec0359a5c 246
shennongmin 10:9d4ec0359a5c 247 ***************************************************************************/
shennongmin 10:9d4ec0359a5c 248 void ESP8266::Reset(void)
shennongmin 10:9d4ec0359a5c 249 {
shennongmin 10:9d4ec0359a5c 250 esp_uart.println("AT+RST");
shennongmin 10:9d4ec0359a5c 251 unsigned long start;
shennongmin 10:9d4ec0359a5c 252 start = millis();
shennongmin 10:9d4ec0359a5c 253 while (millis()-start<5000) {
shennongmin 10:9d4ec0359a5c 254 if(esp_uart.find("ready")==true)
shennongmin 10:9d4ec0359a5c 255 {
shennongmin 10:9d4ec0359a5c 256 DBG("reboot wifi is OK\r\n");
shennongmin 10:9d4ec0359a5c 257 break;
shennongmin 10:9d4ec0359a5c 258 }
shennongmin 10:9d4ec0359a5c 259 }
shennongmin 10:9d4ec0359a5c 260 }
shennongmin 10:9d4ec0359a5c 261
shennongmin 10:9d4ec0359a5c 262 /*********************************************
shennongmin 10:9d4ec0359a5c 263 *********************************************
shennongmin 10:9d4ec0359a5c 264 *********************************************
shennongmin 10:9d4ec0359a5c 265 ESP8266 Function Commands
shennongmin 10:9d4ec0359a5c 266 *********************************************
shennongmin 10:9d4ec0359a5c 267 *********************************************
shennongmin 10:9d4ec0359a5c 268 *********************************************
shennongmin 10:9d4ec0359a5c 269 */
shennongmin 10:9d4ec0359a5c 270
shennongmin 10:9d4ec0359a5c 271 /*************************************************************************
shennongmin 10:9d4ec0359a5c 272 //inquire the current mode of wifi module
shennongmin 10:9d4ec0359a5c 273
shennongmin 10:9d4ec0359a5c 274 return: string of current mode
shennongmin 10:9d4ec0359a5c 275 Station
shennongmin 10:9d4ec0359a5c 276 AP
shennongmin 10:9d4ec0359a5c 277 AP+Station
shennongmin 10:9d4ec0359a5c 278
shennongmin 10:9d4ec0359a5c 279 ***************************************************************************/
shennongmin 10:9d4ec0359a5c 280 String ESP8266::showMode()
shennongmin 10:9d4ec0359a5c 281 {
shennongmin 10:9d4ec0359a5c 282 String data;
shennongmin 10:9d4ec0359a5c 283 esp_uart.println("AT+CWMODE?");
shennongmin 10:9d4ec0359a5c 284 unsigned long start;
shennongmin 10:9d4ec0359a5c 285 start = millis();
shennongmin 10:9d4ec0359a5c 286 while (millis()-start<2000) {
shennongmin 10:9d4ec0359a5c 287 if(esp_uart.available()>0)
shennongmin 10:9d4ec0359a5c 288 {
shennongmin 10:9d4ec0359a5c 289 char a =esp_uart.read_char();
shennongmin 10:9d4ec0359a5c 290 data=data+a;
shennongmin 10:9d4ec0359a5c 291 }
shennongmin 10:9d4ec0359a5c 292 if (data.indexOf("OK")!=-1)
shennongmin 10:9d4ec0359a5c 293 {
shennongmin 10:9d4ec0359a5c 294 break;
shennongmin 10:9d4ec0359a5c 295 }
shennongmin 10:9d4ec0359a5c 296 }
shennongmin 10:9d4ec0359a5c 297 if(data.indexOf("1")!=-1)
shennongmin 10:9d4ec0359a5c 298 {
shennongmin 10:9d4ec0359a5c 299 return "Station";
shennongmin 10:9d4ec0359a5c 300 }else if(data.indexOf("2")!=-1)
shennongmin 10:9d4ec0359a5c 301 {
shennongmin 10:9d4ec0359a5c 302 return "AP";
shennongmin 10:9d4ec0359a5c 303 }else if(data.indexOf("3")!=-1)
shennongmin 10:9d4ec0359a5c 304 {
shennongmin 10:9d4ec0359a5c 305 return "AP+Station";
shennongmin 10:9d4ec0359a5c 306 }else{
shennongmin 10:9d4ec0359a5c 307 return "Invalid Mode!";
shennongmin 10:9d4ec0359a5c 308 }
shennongmin 10:9d4ec0359a5c 309 }
shennongmin 10:9d4ec0359a5c 310
shennongmin 10:9d4ec0359a5c 311
shennongmin 10:9d4ec0359a5c 312
shennongmin 10:9d4ec0359a5c 313 /*************************************************************************
shennongmin 10:9d4ec0359a5c 314 //configure the operation mode
shennongmin 10:9d4ec0359a5c 315
shennongmin 10:9d4ec0359a5c 316 a:
shennongmin 10:9d4ec0359a5c 317 1 - Station
shennongmin 10:9d4ec0359a5c 318 2 - AP
shennongmin 10:9d4ec0359a5c 319 3 - AP+Station
shennongmin 10:9d4ec0359a5c 320
shennongmin 10:9d4ec0359a5c 321 return:
shennongmin 10:9d4ec0359a5c 322 true - successfully
shennongmin 10:9d4ec0359a5c 323 false - unsuccessfully
shennongmin 10:9d4ec0359a5c 324
shennongmin 10:9d4ec0359a5c 325 ***************************************************************************/
shennongmin 10:9d4ec0359a5c 326
shennongmin 10:9d4ec0359a5c 327 bool ESP8266::confMode(uint8_t a)
shennongmin 10:9d4ec0359a5c 328 {
shennongmin 10:9d4ec0359a5c 329 String data;
shennongmin 10:9d4ec0359a5c 330 esp_uart.print("AT+CWMODE=");
shennongmin 10:9d4ec0359a5c 331 esp_uart.println(String(a));
shennongmin 10:9d4ec0359a5c 332 unsigned long start;
shennongmin 10:9d4ec0359a5c 333 start = millis();
shennongmin 10:9d4ec0359a5c 334 while (millis()-start<2000) {
shennongmin 10:9d4ec0359a5c 335 if(esp_uart.available()>0)
shennongmin 10:9d4ec0359a5c 336 {
shennongmin 10:9d4ec0359a5c 337 char a =esp_uart.read_char();
shennongmin 10:9d4ec0359a5c 338 data=data+a;
shennongmin 10:9d4ec0359a5c 339 }
shennongmin 10:9d4ec0359a5c 340 if (data.indexOf("OK")!=-1 || data.indexOf("no change")!=-1)
shennongmin 10:9d4ec0359a5c 341 {
shennongmin 10:9d4ec0359a5c 342 return true;
shennongmin 10:9d4ec0359a5c 343 }
shennongmin 10:9d4ec0359a5c 344 if (data.indexOf("ERROR")!=-1 || data.indexOf("busy")!=-1)
shennongmin 10:9d4ec0359a5c 345 {
shennongmin 10:9d4ec0359a5c 346 return false;
shennongmin 10:9d4ec0359a5c 347 }
shennongmin 10:9d4ec0359a5c 348
shennongmin 10:9d4ec0359a5c 349 }
shennongmin 10:9d4ec0359a5c 350 return false;
shennongmin 10:9d4ec0359a5c 351 }
shennongmin 10:9d4ec0359a5c 352
shennongmin 10:9d4ec0359a5c 353
shennongmin 10:9d4ec0359a5c 354 /*************************************************************************
shennongmin 10:9d4ec0359a5c 355 //show the list of wifi hotspot
shennongmin 10:9d4ec0359a5c 356
shennongmin 10:9d4ec0359a5c 357 return: string of wifi information
shennongmin 10:9d4ec0359a5c 358 encryption,SSID,RSSI
shennongmin 10:9d4ec0359a5c 359
shennongmin 10:9d4ec0359a5c 360
shennongmin 10:9d4ec0359a5c 361 ***************************************************************************/
shennongmin 10:9d4ec0359a5c 362
shennongmin 10:9d4ec0359a5c 363 String ESP8266::showAP(void)
shennongmin 10:9d4ec0359a5c 364 {
shennongmin 10:9d4ec0359a5c 365 String data;
shennongmin 10:9d4ec0359a5c 366 esp_uart.flush();
shennongmin 10:9d4ec0359a5c 367 esp_uart.print("AT+CWLAP\r\n");
shennongmin 10:9d4ec0359a5c 368 delay(5000);
shennongmin 10:9d4ec0359a5c 369
shennongmin 10:9d4ec0359a5c 370 unsigned long start;
shennongmin 10:9d4ec0359a5c 371 start = millis();
shennongmin 10:9d4ec0359a5c 372 while (millis()-start<8000) {
shennongmin 10:9d4ec0359a5c 373 if(esp_uart.available()>0)
shennongmin 10:9d4ec0359a5c 374 {
shennongmin 10:9d4ec0359a5c 375 char a =esp_uart.read_char();
shennongmin 10:9d4ec0359a5c 376 data=data+a;
shennongmin 10:9d4ec0359a5c 377 }
shennongmin 10:9d4ec0359a5c 378 if (data.indexOf("OK")!=-1 || data.indexOf("ERROR")!=-1 )
shennongmin 10:9d4ec0359a5c 379 {
shennongmin 10:9d4ec0359a5c 380 break;
shennongmin 10:9d4ec0359a5c 381 }
shennongmin 10:9d4ec0359a5c 382 }
shennongmin 10:9d4ec0359a5c 383 if(data.indexOf("ERROR")!=-1)
shennongmin 10:9d4ec0359a5c 384 {
shennongmin 10:9d4ec0359a5c 385 return "ERROR";
shennongmin 10:9d4ec0359a5c 386 }
shennongmin 10:9d4ec0359a5c 387 else{
shennongmin 10:9d4ec0359a5c 388 char head[4] = {0x0D,0x0A};
shennongmin 10:9d4ec0359a5c 389 char tail[7] = {0x0D,0x0A,0x0D,0x0A};
shennongmin 10:9d4ec0359a5c 390 data.replace("AT+CWLAP","");
shennongmin 10:9d4ec0359a5c 391 data.replace("OK","");
shennongmin 10:9d4ec0359a5c 392 data.replace("+CWLAP","ESP8266");
shennongmin 10:9d4ec0359a5c 393 data.replace(tail,"");
shennongmin 10:9d4ec0359a5c 394 data.replace(head,"");
shennongmin 10:9d4ec0359a5c 395
shennongmin 10:9d4ec0359a5c 396 return data;
shennongmin 10:9d4ec0359a5c 397 }
shennongmin 10:9d4ec0359a5c 398 }
shennongmin 10:9d4ec0359a5c 399
shennongmin 10:9d4ec0359a5c 400
shennongmin 10:9d4ec0359a5c 401 /*************************************************************************
shennongmin 10:9d4ec0359a5c 402 //show the name of current wifi access port
shennongmin 10:9d4ec0359a5c 403
shennongmin 10:9d4ec0359a5c 404 return: string of access port name
shennongmin 10:9d4ec0359a5c 405 AP:<SSID>
shennongmin 10:9d4ec0359a5c 406
shennongmin 10:9d4ec0359a5c 407
shennongmin 10:9d4ec0359a5c 408 ***************************************************************************/
shennongmin 10:9d4ec0359a5c 409 String ESP8266::showJAP(void)
shennongmin 10:9d4ec0359a5c 410 {
shennongmin 10:9d4ec0359a5c 411 esp_uart.flush();
shennongmin 10:9d4ec0359a5c 412 esp_uart.println("AT+CWJAP?");
shennongmin 10:9d4ec0359a5c 413 String data;
shennongmin 10:9d4ec0359a5c 414 unsigned long start;
shennongmin 10:9d4ec0359a5c 415 start = millis();
shennongmin 10:9d4ec0359a5c 416 while (millis()-start<3000) {
shennongmin 10:9d4ec0359a5c 417 if(esp_uart.available()>0)
shennongmin 10:9d4ec0359a5c 418 {
shennongmin 10:9d4ec0359a5c 419 char a =esp_uart.read_char();
shennongmin 10:9d4ec0359a5c 420 data=data+a;
shennongmin 10:9d4ec0359a5c 421 }
shennongmin 10:9d4ec0359a5c 422 if (data.indexOf("OK")!=-1 || data.indexOf("ERROR")!=-1 )
shennongmin 10:9d4ec0359a5c 423 {
shennongmin 10:9d4ec0359a5c 424 break;
shennongmin 10:9d4ec0359a5c 425 }
shennongmin 10:9d4ec0359a5c 426 }
shennongmin 10:9d4ec0359a5c 427 //DBG(("data = [%s]\r\n", data.c_str()));
shennongmin 10:9d4ec0359a5c 428 char head[4] = {0x0D,0x0A};
shennongmin 10:9d4ec0359a5c 429 char tail[7] = {0x0D,0x0A,0x0D,0x0A};
shennongmin 10:9d4ec0359a5c 430 data.replace("AT+CWJAP?","");
shennongmin 10:9d4ec0359a5c 431 data.replace("+CWJAP","AP");
shennongmin 10:9d4ec0359a5c 432 data.replace("OK","");
shennongmin 10:9d4ec0359a5c 433 data.replace(tail,"");
shennongmin 10:9d4ec0359a5c 434 data.replace(head,"");
shennongmin 10:9d4ec0359a5c 435
shennongmin 10:9d4ec0359a5c 436 return data;
shennongmin 10:9d4ec0359a5c 437 }
shennongmin 10:9d4ec0359a5c 438
shennongmin 10:9d4ec0359a5c 439
shennongmin 10:9d4ec0359a5c 440 /*************************************************************************
shennongmin 10:9d4ec0359a5c 441 //configure the SSID and password of the access port
shennongmin 10:9d4ec0359a5c 442
shennongmin 10:9d4ec0359a5c 443 return:
shennongmin 10:9d4ec0359a5c 444 true - successfully
shennongmin 10:9d4ec0359a5c 445 false - unsuccessfully
shennongmin 10:9d4ec0359a5c 446
shennongmin 10:9d4ec0359a5c 447
shennongmin 10:9d4ec0359a5c 448 ***************************************************************************/
shennongmin 10:9d4ec0359a5c 449 bool ESP8266::confJAP(String ssid , String pwd)
shennongmin 10:9d4ec0359a5c 450 {
shennongmin 10:9d4ec0359a5c 451
shennongmin 10:9d4ec0359a5c 452 esp_uart.print("AT+CWJAP=");
shennongmin 10:9d4ec0359a5c 453 esp_uart.print("\""); //"ssid"
shennongmin 10:9d4ec0359a5c 454 esp_uart.print(ssid);
shennongmin 10:9d4ec0359a5c 455 esp_uart.print("\"");
shennongmin 10:9d4ec0359a5c 456
shennongmin 10:9d4ec0359a5c 457 esp_uart.print(",");
shennongmin 10:9d4ec0359a5c 458
shennongmin 10:9d4ec0359a5c 459 esp_uart.print("\""); //"pwd"
shennongmin 10:9d4ec0359a5c 460 esp_uart.print(pwd);
shennongmin 10:9d4ec0359a5c 461 esp_uart.println("\"");
shennongmin 10:9d4ec0359a5c 462
shennongmin 10:9d4ec0359a5c 463
shennongmin 10:9d4ec0359a5c 464 unsigned long start;
shennongmin 10:9d4ec0359a5c 465 start = millis();
shennongmin 10:9d4ec0359a5c 466 while (millis()-start<3000) {
shennongmin 10:9d4ec0359a5c 467 if(esp_uart.find("OK")==true)
shennongmin 10:9d4ec0359a5c 468 {
shennongmin 10:9d4ec0359a5c 469 return true;
shennongmin 10:9d4ec0359a5c 470
shennongmin 10:9d4ec0359a5c 471 }
shennongmin 10:9d4ec0359a5c 472 }
shennongmin 10:9d4ec0359a5c 473 return false;
shennongmin 10:9d4ec0359a5c 474 }
shennongmin 10:9d4ec0359a5c 475 /*************************************************************************
shennongmin 10:9d4ec0359a5c 476 //quite the access port
shennongmin 10:9d4ec0359a5c 477
shennongmin 10:9d4ec0359a5c 478 return:
shennongmin 10:9d4ec0359a5c 479 true - successfully
shennongmin 10:9d4ec0359a5c 480 false - unsuccessfully
shennongmin 10:9d4ec0359a5c 481
shennongmin 10:9d4ec0359a5c 482
shennongmin 10:9d4ec0359a5c 483 ***************************************************************************/
shennongmin 10:9d4ec0359a5c 484
shennongmin 10:9d4ec0359a5c 485 bool ESP8266::quitAP(void)
shennongmin 10:9d4ec0359a5c 486 {
shennongmin 10:9d4ec0359a5c 487 esp_uart.println("AT+CWQAP");
shennongmin 10:9d4ec0359a5c 488 unsigned long start;
shennongmin 10:9d4ec0359a5c 489 start = millis();
shennongmin 10:9d4ec0359a5c 490 while (millis()-start<3000) {
shennongmin 10:9d4ec0359a5c 491 if(esp_uart.find("OK")==true)
shennongmin 10:9d4ec0359a5c 492 {
shennongmin 10:9d4ec0359a5c 493 return true;
shennongmin 10:9d4ec0359a5c 494
shennongmin 10:9d4ec0359a5c 495 }
shennongmin 10:9d4ec0359a5c 496 }
shennongmin 10:9d4ec0359a5c 497 return false;
shennongmin 10:9d4ec0359a5c 498
shennongmin 10:9d4ec0359a5c 499 }
shennongmin 10:9d4ec0359a5c 500
shennongmin 10:9d4ec0359a5c 501 /*************************************************************************
shennongmin 10:9d4ec0359a5c 502 //show the parameter of ssid, password, channel, encryption in AP mode
shennongmin 10:9d4ec0359a5c 503
shennongmin 10:9d4ec0359a5c 504 return:
shennongmin 10:9d4ec0359a5c 505 mySAP:<SSID>,<password>,<channel>,<encryption>
shennongmin 10:9d4ec0359a5c 506
shennongmin 10:9d4ec0359a5c 507 ***************************************************************************/
shennongmin 10:9d4ec0359a5c 508 String ESP8266::showSAP()
shennongmin 10:9d4ec0359a5c 509 {
shennongmin 10:9d4ec0359a5c 510 esp_uart.println("AT+CWSAP?");
shennongmin 10:9d4ec0359a5c 511 String data;
shennongmin 10:9d4ec0359a5c 512 unsigned long start;
shennongmin 10:9d4ec0359a5c 513 start = millis();
shennongmin 10:9d4ec0359a5c 514 while (millis()-start<3000) {
shennongmin 10:9d4ec0359a5c 515 if(esp_uart.available()>0)
shennongmin 10:9d4ec0359a5c 516 {
shennongmin 10:9d4ec0359a5c 517 char a =esp_uart.read_char();
shennongmin 10:9d4ec0359a5c 518 data=data+a;
shennongmin 10:9d4ec0359a5c 519 }
shennongmin 10:9d4ec0359a5c 520 if (data.indexOf("OK")!=-1 || data.indexOf("ERROR")!=-1 )
shennongmin 10:9d4ec0359a5c 521 {
shennongmin 10:9d4ec0359a5c 522 break;
shennongmin 10:9d4ec0359a5c 523 }
shennongmin 10:9d4ec0359a5c 524 }
shennongmin 10:9d4ec0359a5c 525 char head[4] = {0x0D,0x0A};
shennongmin 10:9d4ec0359a5c 526 char tail[7] = {0x0D,0x0A,0x0D,0x0A};
shennongmin 10:9d4ec0359a5c 527 data.replace("AT+CWSAP?","");
shennongmin 10:9d4ec0359a5c 528 data.replace("+CWSAP","mySAP");
shennongmin 10:9d4ec0359a5c 529 data.replace("OK","");
shennongmin 10:9d4ec0359a5c 530 data.replace(tail,"");
shennongmin 10:9d4ec0359a5c 531 data.replace(head,"");
shennongmin 10:9d4ec0359a5c 532
shennongmin 10:9d4ec0359a5c 533 return data;
shennongmin 10:9d4ec0359a5c 534 }
shennongmin 10:9d4ec0359a5c 535
shennongmin 10:9d4ec0359a5c 536 /*************************************************************************
shennongmin 10:9d4ec0359a5c 537 //configure the parameter of ssid, password, channel, encryption in AP mode
shennongmin 10:9d4ec0359a5c 538
shennongmin 10:9d4ec0359a5c 539 return:
shennongmin 10:9d4ec0359a5c 540 true - successfully
shennongmin 10:9d4ec0359a5c 541 false - unsuccessfully
shennongmin 10:9d4ec0359a5c 542
shennongmin 10:9d4ec0359a5c 543 ***************************************************************************/
shennongmin 10:9d4ec0359a5c 544
shennongmin 10:9d4ec0359a5c 545 bool ESP8266::confSAP(String ssid , String pwd , uint8_t chl , uint8_t ecn)
shennongmin 10:9d4ec0359a5c 546 {
shennongmin 10:9d4ec0359a5c 547 esp_uart.print("AT+CWSAP=");
shennongmin 10:9d4ec0359a5c 548 esp_uart.print("\""); //"ssid"
shennongmin 10:9d4ec0359a5c 549 esp_uart.print(ssid);
shennongmin 10:9d4ec0359a5c 550 esp_uart.print("\"");
shennongmin 10:9d4ec0359a5c 551
shennongmin 10:9d4ec0359a5c 552 esp_uart.print(",");
shennongmin 10:9d4ec0359a5c 553
shennongmin 10:9d4ec0359a5c 554 esp_uart.print("\""); //"pwd"
shennongmin 10:9d4ec0359a5c 555 esp_uart.print(pwd);
shennongmin 10:9d4ec0359a5c 556 esp_uart.print("\"");
shennongmin 10:9d4ec0359a5c 557
shennongmin 10:9d4ec0359a5c 558 esp_uart.print(",");
shennongmin 10:9d4ec0359a5c 559 esp_uart.print(String(chl));
shennongmin 10:9d4ec0359a5c 560
shennongmin 10:9d4ec0359a5c 561 esp_uart.print(",");
shennongmin 10:9d4ec0359a5c 562 esp_uart.println(String(ecn));
shennongmin 10:9d4ec0359a5c 563 unsigned long start;
shennongmin 10:9d4ec0359a5c 564 start = millis();
shennongmin 10:9d4ec0359a5c 565 while (millis()-start<3000) {
shennongmin 10:9d4ec0359a5c 566 if(esp_uart.find("OK")==true )
shennongmin 10:9d4ec0359a5c 567 {
shennongmin 10:9d4ec0359a5c 568 return true;
shennongmin 10:9d4ec0359a5c 569 }
shennongmin 10:9d4ec0359a5c 570 }
shennongmin 10:9d4ec0359a5c 571
shennongmin 10:9d4ec0359a5c 572 return false;
shennongmin 10:9d4ec0359a5c 573
shennongmin 10:9d4ec0359a5c 574 }
shennongmin 10:9d4ec0359a5c 575
shennongmin 10:9d4ec0359a5c 576
shennongmin 10:9d4ec0359a5c 577 /*********************************************
shennongmin 10:9d4ec0359a5c 578 *********************************************
shennongmin 10:9d4ec0359a5c 579 *********************************************
shennongmin 10:9d4ec0359a5c 580 TPC/IP Function Command
shennongmin 10:9d4ec0359a5c 581 *********************************************
shennongmin 10:9d4ec0359a5c 582 *********************************************
shennongmin 10:9d4ec0359a5c 583 *********************************************
shennongmin 10:9d4ec0359a5c 584 */
shennongmin 10:9d4ec0359a5c 585
shennongmin 10:9d4ec0359a5c 586 /*************************************************************************
shennongmin 10:9d4ec0359a5c 587 //inquire the connection status
shennongmin 10:9d4ec0359a5c 588
shennongmin 10:9d4ec0359a5c 589 return: string of connection status
shennongmin 10:9d4ec0359a5c 590 <ID> 0-4
shennongmin 10:9d4ec0359a5c 591 <type> tcp or udp
shennongmin 10:9d4ec0359a5c 592 <addr> ip
shennongmin 10:9d4ec0359a5c 593 <port> port number
shennongmin 10:9d4ec0359a5c 594
shennongmin 10:9d4ec0359a5c 595 ***************************************************************************/
shennongmin 10:9d4ec0359a5c 596
shennongmin 10:9d4ec0359a5c 597 String ESP8266::showStatus(void)
shennongmin 10:9d4ec0359a5c 598 {
shennongmin 10:9d4ec0359a5c 599 esp_uart.println("AT+CIPSTATUS");
shennongmin 10:9d4ec0359a5c 600 String data;
shennongmin 10:9d4ec0359a5c 601 unsigned long start;
shennongmin 10:9d4ec0359a5c 602 start = millis();
shennongmin 10:9d4ec0359a5c 603 while (millis()-start<3000) {
shennongmin 10:9d4ec0359a5c 604 if(esp_uart.available()>0)
shennongmin 10:9d4ec0359a5c 605 {
shennongmin 10:9d4ec0359a5c 606 char a =esp_uart.read_char();
shennongmin 10:9d4ec0359a5c 607 data=data+a;
shennongmin 10:9d4ec0359a5c 608 }
shennongmin 10:9d4ec0359a5c 609 if (data.indexOf("OK")!=-1)
shennongmin 10:9d4ec0359a5c 610 {
shennongmin 10:9d4ec0359a5c 611 break;
shennongmin 10:9d4ec0359a5c 612 }
shennongmin 10:9d4ec0359a5c 613 }
shennongmin 10:9d4ec0359a5c 614
shennongmin 10:9d4ec0359a5c 615 char head[4] = {0x0D,0x0A};
shennongmin 10:9d4ec0359a5c 616 char tail[7] = {0x0D,0x0A,0x0D,0x0A};
shennongmin 10:9d4ec0359a5c 617 data.replace("AT+CIPSTATUS","");
shennongmin 10:9d4ec0359a5c 618 data.replace("OK","");
shennongmin 10:9d4ec0359a5c 619 data.replace(tail,"");
shennongmin 10:9d4ec0359a5c 620 data.replace(head,"");
shennongmin 10:9d4ec0359a5c 621
shennongmin 10:9d4ec0359a5c 622 return data;
shennongmin 10:9d4ec0359a5c 623 }
shennongmin 10:9d4ec0359a5c 624
shennongmin 10:9d4ec0359a5c 625 /*************************************************************************
shennongmin 10:9d4ec0359a5c 626 //show the current connection mode(sigle or multiple)
shennongmin 10:9d4ec0359a5c 627
shennongmin 10:9d4ec0359a5c 628 return: string of connection mode
shennongmin 10:9d4ec0359a5c 629 0 - sigle
shennongmin 10:9d4ec0359a5c 630 1 - multiple
shennongmin 10:9d4ec0359a5c 631
shennongmin 10:9d4ec0359a5c 632 ***************************************************************************/
shennongmin 10:9d4ec0359a5c 633 String ESP8266::showMux(void)
shennongmin 10:9d4ec0359a5c 634 {
shennongmin 10:9d4ec0359a5c 635 String data;
shennongmin 10:9d4ec0359a5c 636 esp_uart.println("AT+CIPMUX?");
shennongmin 10:9d4ec0359a5c 637
shennongmin 10:9d4ec0359a5c 638 unsigned long start;
shennongmin 10:9d4ec0359a5c 639 start = millis();
shennongmin 10:9d4ec0359a5c 640 while (millis()-start<3000) {
shennongmin 10:9d4ec0359a5c 641 if(esp_uart.available()>0)
shennongmin 10:9d4ec0359a5c 642 {
shennongmin 10:9d4ec0359a5c 643 char a =esp_uart.read_char();
shennongmin 10:9d4ec0359a5c 644 data=data+a;
shennongmin 10:9d4ec0359a5c 645 }
shennongmin 10:9d4ec0359a5c 646 if (data.indexOf("OK")!=-1)
shennongmin 10:9d4ec0359a5c 647 {
shennongmin 10:9d4ec0359a5c 648 break;
shennongmin 10:9d4ec0359a5c 649 }
shennongmin 10:9d4ec0359a5c 650 }
shennongmin 10:9d4ec0359a5c 651 char head[4] = {0x0D,0x0A};
shennongmin 10:9d4ec0359a5c 652 char tail[7] = {0x0D,0x0A,0x0D,0x0A};
shennongmin 10:9d4ec0359a5c 653 data.replace("AT+CIPMUX?","");
shennongmin 10:9d4ec0359a5c 654 data.replace("+CIPMUX","showMux");
shennongmin 10:9d4ec0359a5c 655 data.replace("OK","");
shennongmin 10:9d4ec0359a5c 656 data.replace(tail,"");
shennongmin 10:9d4ec0359a5c 657 data.replace(head,"");
shennongmin 10:9d4ec0359a5c 658
shennongmin 10:9d4ec0359a5c 659 return data;
shennongmin 10:9d4ec0359a5c 660 }
shennongmin 10:9d4ec0359a5c 661
shennongmin 10:9d4ec0359a5c 662 /*************************************************************************
shennongmin 10:9d4ec0359a5c 663 //configure the current connection mode(sigle or multiple)
shennongmin 10:9d4ec0359a5c 664
shennongmin 10:9d4ec0359a5c 665 a: connection mode
shennongmin 10:9d4ec0359a5c 666 0 - sigle
shennongmin 10:9d4ec0359a5c 667 1 - multiple
shennongmin 10:9d4ec0359a5c 668
shennongmin 10:9d4ec0359a5c 669 return:
shennongmin 10:9d4ec0359a5c 670 true - successfully
shennongmin 10:9d4ec0359a5c 671 false - unsuccessfully
shennongmin 10:9d4ec0359a5c 672 ***************************************************************************/
shennongmin 10:9d4ec0359a5c 673 bool ESP8266::confMux(int a)
shennongmin 10:9d4ec0359a5c 674 {
shennongmin 10:9d4ec0359a5c 675 esp_uart.print("AT+CIPMUX=");
shennongmin 10:9d4ec0359a5c 676 esp_uart.println(a);
shennongmin 10:9d4ec0359a5c 677 unsigned long start;
shennongmin 10:9d4ec0359a5c 678 start = millis();
shennongmin 10:9d4ec0359a5c 679 while (millis()-start<3000) {
shennongmin 10:9d4ec0359a5c 680 if(esp_uart.find("OK")==true )
shennongmin 10:9d4ec0359a5c 681 {
shennongmin 10:9d4ec0359a5c 682 return true;
shennongmin 10:9d4ec0359a5c 683 }
shennongmin 10:9d4ec0359a5c 684 }
shennongmin 10:9d4ec0359a5c 685
shennongmin 10:9d4ec0359a5c 686 return false;
shennongmin 10:9d4ec0359a5c 687 }
shennongmin 10:9d4ec0359a5c 688
shennongmin 10:9d4ec0359a5c 689
shennongmin 10:9d4ec0359a5c 690 /*************************************************************************
shennongmin 10:9d4ec0359a5c 691 //Set up tcp or udp connection (signle connection mode)
shennongmin 10:9d4ec0359a5c 692
shennongmin 10:9d4ec0359a5c 693 type: tcp or udp
shennongmin 10:9d4ec0359a5c 694
shennongmin 10:9d4ec0359a5c 695 addr: ip address
shennongmin 10:9d4ec0359a5c 696
shennongmin 10:9d4ec0359a5c 697 port: port number
shennongmin 10:9d4ec0359a5c 698
shennongmin 10:9d4ec0359a5c 699
shennongmin 10:9d4ec0359a5c 700 return:
shennongmin 10:9d4ec0359a5c 701 true - successfully
shennongmin 10:9d4ec0359a5c 702 false - unsuccessfully
shennongmin 10:9d4ec0359a5c 703
shennongmin 10:9d4ec0359a5c 704 ***************************************************************************/
shennongmin 10:9d4ec0359a5c 705 bool ESP8266::newMux(uint8_t type, String addr, int port)
shennongmin 10:9d4ec0359a5c 706
shennongmin 10:9d4ec0359a5c 707 {
shennongmin 10:9d4ec0359a5c 708 String data;
shennongmin 10:9d4ec0359a5c 709 esp_uart.flush();
shennongmin 10:9d4ec0359a5c 710 esp_uart.print("AT+CIPSTART=");
shennongmin 10:9d4ec0359a5c 711 if(type>0)
shennongmin 10:9d4ec0359a5c 712 {
shennongmin 10:9d4ec0359a5c 713 esp_uart.print("\"TCP\"");
shennongmin 10:9d4ec0359a5c 714 }else
shennongmin 10:9d4ec0359a5c 715 {
shennongmin 10:9d4ec0359a5c 716 esp_uart.print("\"UDP\"");
shennongmin 10:9d4ec0359a5c 717 }
shennongmin 10:9d4ec0359a5c 718 esp_uart.print(",");
shennongmin 10:9d4ec0359a5c 719 esp_uart.print("\"");
shennongmin 10:9d4ec0359a5c 720 esp_uart.print(addr);
shennongmin 10:9d4ec0359a5c 721 esp_uart.print("\"");
shennongmin 10:9d4ec0359a5c 722 esp_uart.print(",");
shennongmin 10:9d4ec0359a5c 723 // esp_uart.print("\"");
shennongmin 10:9d4ec0359a5c 724 esp_uart.println(String(port));
shennongmin 10:9d4ec0359a5c 725 // esp_uart.println("\"");
shennongmin 10:9d4ec0359a5c 726 unsigned long start;
shennongmin 10:9d4ec0359a5c 727 start = millis();
shennongmin 10:9d4ec0359a5c 728 while (millis()-start<10000) {
shennongmin 10:9d4ec0359a5c 729 if(esp_uart.available()>0)
shennongmin 10:9d4ec0359a5c 730 {
shennongmin 10:9d4ec0359a5c 731 char a =esp_uart.read_char();
shennongmin 10:9d4ec0359a5c 732 data=data+a;
shennongmin 10:9d4ec0359a5c 733 }
shennongmin 10:9d4ec0359a5c 734 if (data.indexOf("OK")!=-1 || data.indexOf("ALREAY CONNECT")!=-1 || data.indexOf("ERROR")!=-1)
shennongmin 10:9d4ec0359a5c 735 {
shennongmin 10:9d4ec0359a5c 736 return true;
shennongmin 10:9d4ec0359a5c 737 }
shennongmin 10:9d4ec0359a5c 738 }
shennongmin 10:9d4ec0359a5c 739 return false;
shennongmin 10:9d4ec0359a5c 740 }
shennongmin 10:9d4ec0359a5c 741 /*************************************************************************
shennongmin 10:9d4ec0359a5c 742 //Set up tcp or udp connection (multiple connection mode)
shennongmin 10:9d4ec0359a5c 743
shennongmin 10:9d4ec0359a5c 744 type: tcp or udp
shennongmin 10:9d4ec0359a5c 745
shennongmin 10:9d4ec0359a5c 746 addr: ip address
shennongmin 10:9d4ec0359a5c 747
shennongmin 10:9d4ec0359a5c 748 port: port number
shennongmin 10:9d4ec0359a5c 749
shennongmin 10:9d4ec0359a5c 750 id: id number(0-4)
shennongmin 10:9d4ec0359a5c 751
shennongmin 10:9d4ec0359a5c 752 return:
shennongmin 10:9d4ec0359a5c 753 true - successfully
shennongmin 10:9d4ec0359a5c 754 false - unsuccessfully
shennongmin 10:9d4ec0359a5c 755
shennongmin 10:9d4ec0359a5c 756 ***************************************************************************/
shennongmin 10:9d4ec0359a5c 757 bool ESP8266::newMux( uint8_t id, uint8_t type, String addr, int port)
shennongmin 10:9d4ec0359a5c 758
shennongmin 10:9d4ec0359a5c 759 {
shennongmin 10:9d4ec0359a5c 760
shennongmin 10:9d4ec0359a5c 761 esp_uart.print("AT+CIPSTART=");
shennongmin 10:9d4ec0359a5c 762 esp_uart.print("\"");
shennongmin 10:9d4ec0359a5c 763 esp_uart.print(String(id));
shennongmin 10:9d4ec0359a5c 764 esp_uart.print("\"");
shennongmin 10:9d4ec0359a5c 765 if(type>0)
shennongmin 10:9d4ec0359a5c 766 {
shennongmin 10:9d4ec0359a5c 767 esp_uart.print("\"TCP\"");
shennongmin 10:9d4ec0359a5c 768 }
shennongmin 10:9d4ec0359a5c 769 else
shennongmin 10:9d4ec0359a5c 770 {
shennongmin 10:9d4ec0359a5c 771 esp_uart.print("\"UDP\"");
shennongmin 10:9d4ec0359a5c 772 }
shennongmin 10:9d4ec0359a5c 773 esp_uart.print(",");
shennongmin 10:9d4ec0359a5c 774 esp_uart.print("\"");
shennongmin 10:9d4ec0359a5c 775 esp_uart.print(addr);
shennongmin 10:9d4ec0359a5c 776 esp_uart.print("\"");
shennongmin 10:9d4ec0359a5c 777 esp_uart.print(",");
shennongmin 10:9d4ec0359a5c 778 // esp_uart.print("\"");
shennongmin 10:9d4ec0359a5c 779 esp_uart.println(String(port));
shennongmin 10:9d4ec0359a5c 780 // esp_uart.println("\"");
shennongmin 10:9d4ec0359a5c 781 String data;
shennongmin 10:9d4ec0359a5c 782 unsigned long start;
shennongmin 10:9d4ec0359a5c 783 start = millis();
shennongmin 10:9d4ec0359a5c 784 while (millis()-start<3000) {
shennongmin 10:9d4ec0359a5c 785 if(esp_uart.available()>0)
shennongmin 10:9d4ec0359a5c 786 {
shennongmin 10:9d4ec0359a5c 787 char a =esp_uart.read_char();
shennongmin 10:9d4ec0359a5c 788 data=data+a;
shennongmin 10:9d4ec0359a5c 789 }
shennongmin 10:9d4ec0359a5c 790 if (data.indexOf("OK")!=-1 || data.indexOf("ALREAY CONNECT")!=-1 )
shennongmin 10:9d4ec0359a5c 791 {
shennongmin 10:9d4ec0359a5c 792 return true;
shennongmin 10:9d4ec0359a5c 793 }
shennongmin 10:9d4ec0359a5c 794 }
shennongmin 10:9d4ec0359a5c 795 return false;
shennongmin 10:9d4ec0359a5c 796
shennongmin 10:9d4ec0359a5c 797
shennongmin 10:9d4ec0359a5c 798 }
shennongmin 10:9d4ec0359a5c 799 /*************************************************************************
shennongmin 10:9d4ec0359a5c 800 //send data in sigle connection mode
shennongmin 10:9d4ec0359a5c 801
shennongmin 10:9d4ec0359a5c 802 str: string of message
shennongmin 10:9d4ec0359a5c 803
shennongmin 10:9d4ec0359a5c 804 return:
shennongmin 10:9d4ec0359a5c 805 true - successfully
shennongmin 10:9d4ec0359a5c 806 false - unsuccessfully
shennongmin 10:9d4ec0359a5c 807
shennongmin 10:9d4ec0359a5c 808 ***************************************************************************/
shennongmin 10:9d4ec0359a5c 809 bool ESP8266::Send(String str)
shennongmin 10:9d4ec0359a5c 810 {
shennongmin 10:9d4ec0359a5c 811 esp_uart.flush();
shennongmin 10:9d4ec0359a5c 812 esp_uart.print("AT+CIPSEND=");
shennongmin 10:9d4ec0359a5c 813 // esp_uart.print("\"");
shennongmin 10:9d4ec0359a5c 814 esp_uart.println(str.length());
shennongmin 10:9d4ec0359a5c 815 // esp_uart.println("\"");
shennongmin 10:9d4ec0359a5c 816 unsigned long start;
shennongmin 10:9d4ec0359a5c 817 start = millis();
shennongmin 10:9d4ec0359a5c 818 bool found = false;
shennongmin 10:9d4ec0359a5c 819 while (millis()-start<5000) {
shennongmin 10:9d4ec0359a5c 820 if(esp_uart.find(">")==true )
shennongmin 10:9d4ec0359a5c 821 {
shennongmin 10:9d4ec0359a5c 822 found = true;
shennongmin 10:9d4ec0359a5c 823 break;
shennongmin 10:9d4ec0359a5c 824 }
shennongmin 10:9d4ec0359a5c 825 }
shennongmin 10:9d4ec0359a5c 826 if(found)
shennongmin 10:9d4ec0359a5c 827 esp_uart.print(str);
shennongmin 10:9d4ec0359a5c 828 else
shennongmin 10:9d4ec0359a5c 829 {
shennongmin 10:9d4ec0359a5c 830 closeMux();
shennongmin 10:9d4ec0359a5c 831 return false;
shennongmin 10:9d4ec0359a5c 832 }
shennongmin 10:9d4ec0359a5c 833
shennongmin 10:9d4ec0359a5c 834
shennongmin 10:9d4ec0359a5c 835 String data;
shennongmin 10:9d4ec0359a5c 836 start = millis();
shennongmin 10:9d4ec0359a5c 837 while (millis()-start<5000) {
shennongmin 10:9d4ec0359a5c 838 if(esp_uart.available()>0)
shennongmin 10:9d4ec0359a5c 839 {
shennongmin 10:9d4ec0359a5c 840 char a =esp_uart.read_char();
shennongmin 10:9d4ec0359a5c 841 data=data+a;
shennongmin 10:9d4ec0359a5c 842 }
shennongmin 10:9d4ec0359a5c 843 if (data.indexOf("SEND OK")!=-1)
shennongmin 10:9d4ec0359a5c 844 {
shennongmin 10:9d4ec0359a5c 845 return true;
shennongmin 10:9d4ec0359a5c 846 }
shennongmin 10:9d4ec0359a5c 847 }
shennongmin 10:9d4ec0359a5c 848 return false;
shennongmin 10:9d4ec0359a5c 849 }
shennongmin 10:9d4ec0359a5c 850
shennongmin 10:9d4ec0359a5c 851 /*************************************************************************
shennongmin 10:9d4ec0359a5c 852 //send data in multiple connection mode
shennongmin 10:9d4ec0359a5c 853
shennongmin 10:9d4ec0359a5c 854 id: <id>(0-4)
shennongmin 10:9d4ec0359a5c 855
shennongmin 10:9d4ec0359a5c 856 str: string of message
shennongmin 10:9d4ec0359a5c 857
shennongmin 10:9d4ec0359a5c 858 return:
shennongmin 10:9d4ec0359a5c 859 true - successfully
shennongmin 10:9d4ec0359a5c 860 false - unsuccessfully
shennongmin 10:9d4ec0359a5c 861
shennongmin 10:9d4ec0359a5c 862 ***************************************************************************/
shennongmin 10:9d4ec0359a5c 863 bool ESP8266::Send(uint8_t id, String str)
shennongmin 10:9d4ec0359a5c 864 {
shennongmin 10:9d4ec0359a5c 865 esp_uart.print("AT+CIPSEND=");
shennongmin 10:9d4ec0359a5c 866
shennongmin 10:9d4ec0359a5c 867 esp_uart.print(String(id));
shennongmin 10:9d4ec0359a5c 868 esp_uart.print(",");
shennongmin 10:9d4ec0359a5c 869 esp_uart.println(str.length());
shennongmin 10:9d4ec0359a5c 870 unsigned long start;
shennongmin 10:9d4ec0359a5c 871 start = millis();
shennongmin 10:9d4ec0359a5c 872 bool found = false;
shennongmin 10:9d4ec0359a5c 873 while (millis()-start<5000) {
shennongmin 10:9d4ec0359a5c 874 if(esp_uart.find(">")==true )
shennongmin 10:9d4ec0359a5c 875 {
shennongmin 10:9d4ec0359a5c 876 found = true;
shennongmin 10:9d4ec0359a5c 877 break;
shennongmin 10:9d4ec0359a5c 878 }
shennongmin 10:9d4ec0359a5c 879 }
shennongmin 10:9d4ec0359a5c 880 if(found)
shennongmin 10:9d4ec0359a5c 881 esp_uart.print(str);
shennongmin 10:9d4ec0359a5c 882 else
shennongmin 10:9d4ec0359a5c 883 {
shennongmin 10:9d4ec0359a5c 884 closeMux(id);
shennongmin 10:9d4ec0359a5c 885 return false;
shennongmin 10:9d4ec0359a5c 886 }
shennongmin 10:9d4ec0359a5c 887
shennongmin 10:9d4ec0359a5c 888
shennongmin 10:9d4ec0359a5c 889 String data;
shennongmin 10:9d4ec0359a5c 890 start = millis();
shennongmin 10:9d4ec0359a5c 891 while (millis()-start<5000) {
shennongmin 10:9d4ec0359a5c 892 if(esp_uart.available()>0)
shennongmin 10:9d4ec0359a5c 893 {
shennongmin 10:9d4ec0359a5c 894 char a =esp_uart.read_char();
shennongmin 10:9d4ec0359a5c 895 data=data+a;
shennongmin 10:9d4ec0359a5c 896 }
shennongmin 10:9d4ec0359a5c 897 if (data.indexOf("SEND OK")!=-1)
shennongmin 10:9d4ec0359a5c 898 {
shennongmin 10:9d4ec0359a5c 899 return true;
shennongmin 10:9d4ec0359a5c 900 }
shennongmin 10:9d4ec0359a5c 901 }
shennongmin 10:9d4ec0359a5c 902 return false;
shennongmin 10:9d4ec0359a5c 903 }
shennongmin 10:9d4ec0359a5c 904
shennongmin 10:9d4ec0359a5c 905 /*************************************************************************
shennongmin 10:9d4ec0359a5c 906 //Close up tcp or udp connection (sigle connection mode)
shennongmin 10:9d4ec0359a5c 907
shennongmin 10:9d4ec0359a5c 908
shennongmin 10:9d4ec0359a5c 909 ***************************************************************************/
shennongmin 10:9d4ec0359a5c 910 void ESP8266::closeMux(void)
shennongmin 10:9d4ec0359a5c 911 {
shennongmin 10:9d4ec0359a5c 912 esp_uart.println("AT+CIPCLOSE");
shennongmin 10:9d4ec0359a5c 913
shennongmin 10:9d4ec0359a5c 914 String data;
shennongmin 10:9d4ec0359a5c 915 unsigned long start;
shennongmin 10:9d4ec0359a5c 916 start = millis();
shennongmin 10:9d4ec0359a5c 917 while (millis()-start<3000) {
shennongmin 10:9d4ec0359a5c 918 if(esp_uart.available()>0)
shennongmin 10:9d4ec0359a5c 919 {
shennongmin 10:9d4ec0359a5c 920 char a =esp_uart.read_char();
shennongmin 10:9d4ec0359a5c 921 data=data+a;
shennongmin 10:9d4ec0359a5c 922 }
shennongmin 10:9d4ec0359a5c 923 if (data.indexOf("Linked")!=-1 || data.indexOf("ERROR")!=-1 || data.indexOf("we must restart")!=-1)
shennongmin 10:9d4ec0359a5c 924 {
shennongmin 10:9d4ec0359a5c 925 break;
shennongmin 10:9d4ec0359a5c 926 }
shennongmin 10:9d4ec0359a5c 927 }
shennongmin 10:9d4ec0359a5c 928 }
shennongmin 10:9d4ec0359a5c 929
shennongmin 10:9d4ec0359a5c 930
shennongmin 10:9d4ec0359a5c 931 /*************************************************************************
shennongmin 10:9d4ec0359a5c 932 //Set up tcp or udp connection (multiple connection mode)
shennongmin 10:9d4ec0359a5c 933
shennongmin 10:9d4ec0359a5c 934 id: id number(0-4)
shennongmin 10:9d4ec0359a5c 935
shennongmin 10:9d4ec0359a5c 936 ***************************************************************************/
shennongmin 10:9d4ec0359a5c 937 void ESP8266::closeMux(uint8_t id)
shennongmin 10:9d4ec0359a5c 938 {
shennongmin 10:9d4ec0359a5c 939 esp_uart.print("AT+CIPCLOSE=");
shennongmin 10:9d4ec0359a5c 940 esp_uart.println(String(id));
shennongmin 10:9d4ec0359a5c 941 String data;
shennongmin 10:9d4ec0359a5c 942 unsigned long start;
shennongmin 10:9d4ec0359a5c 943 start = millis();
shennongmin 10:9d4ec0359a5c 944 while (millis()-start<3000) {
shennongmin 10:9d4ec0359a5c 945 if(esp_uart.available()>0)
shennongmin 10:9d4ec0359a5c 946 {
shennongmin 10:9d4ec0359a5c 947 char a =esp_uart.read_char();
shennongmin 10:9d4ec0359a5c 948 data=data+a;
shennongmin 10:9d4ec0359a5c 949 }
shennongmin 10:9d4ec0359a5c 950 if (data.indexOf("OK")!=-1 || data.indexOf("Link is not")!=-1 || data.indexOf("Cant close")!=-1)
shennongmin 10:9d4ec0359a5c 951 {
shennongmin 10:9d4ec0359a5c 952 break;
shennongmin 10:9d4ec0359a5c 953 }
shennongmin 10:9d4ec0359a5c 954 }
shennongmin 10:9d4ec0359a5c 955
shennongmin 10:9d4ec0359a5c 956 }
shennongmin 10:9d4ec0359a5c 957
shennongmin 10:9d4ec0359a5c 958 /*************************************************************************
shennongmin 10:9d4ec0359a5c 959 //show the current ip address
shennongmin 10:9d4ec0359a5c 960
shennongmin 10:9d4ec0359a5c 961 return: string of ip address
shennongmin 10:9d4ec0359a5c 962
shennongmin 10:9d4ec0359a5c 963 ***************************************************************************/
shennongmin 10:9d4ec0359a5c 964 String ESP8266::showIP(void)
shennongmin 10:9d4ec0359a5c 965 {
shennongmin 10:9d4ec0359a5c 966 String data;
shennongmin 10:9d4ec0359a5c 967 unsigned long start;
shennongmin 10:9d4ec0359a5c 968 //DBG("AT+CIFSR\r\n");
shennongmin 10:9d4ec0359a5c 969 for(int a=0; a<3;a++)
shennongmin 10:9d4ec0359a5c 970 {
shennongmin 10:9d4ec0359a5c 971 esp_uart.println("AT+CIFSR");
shennongmin 10:9d4ec0359a5c 972 start = millis();
shennongmin 10:9d4ec0359a5c 973 while (millis()-start<3000) {
shennongmin 10:9d4ec0359a5c 974 while(esp_uart.available()>0)
shennongmin 10:9d4ec0359a5c 975 {
shennongmin 10:9d4ec0359a5c 976 char a =esp_uart.read_char();
shennongmin 10:9d4ec0359a5c 977 data=data+a;
shennongmin 10:9d4ec0359a5c 978 }
shennongmin 10:9d4ec0359a5c 979 if (data.indexOf("AT+CIFSR")!=-1)
shennongmin 10:9d4ec0359a5c 980 {
shennongmin 10:9d4ec0359a5c 981 break;
shennongmin 10:9d4ec0359a5c 982 }
shennongmin 10:9d4ec0359a5c 983 }
shennongmin 10:9d4ec0359a5c 984 if(data.indexOf(".") != -1)
shennongmin 10:9d4ec0359a5c 985 {
shennongmin 10:9d4ec0359a5c 986 break;
shennongmin 10:9d4ec0359a5c 987 }
shennongmin 10:9d4ec0359a5c 988 data = "";
shennongmin 10:9d4ec0359a5c 989 }
shennongmin 10:9d4ec0359a5c 990 //DBG(data);
shennongmin 10:9d4ec0359a5c 991 //DBG("\r\n");
shennongmin 10:9d4ec0359a5c 992 char head[4] = {0x0D,0x0A};
shennongmin 10:9d4ec0359a5c 993 char tail[7] = {0x0D,0x0D,0x0A};
shennongmin 10:9d4ec0359a5c 994 data.replace("AT+CIFSR","");
shennongmin 10:9d4ec0359a5c 995 data.replace(tail,"");
shennongmin 10:9d4ec0359a5c 996 data.replace(head,"");
shennongmin 10:9d4ec0359a5c 997
shennongmin 10:9d4ec0359a5c 998 return data;
shennongmin 10:9d4ec0359a5c 999 }
shennongmin 10:9d4ec0359a5c 1000
shennongmin 10:9d4ec0359a5c 1001 /*************************************************************************
shennongmin 10:9d4ec0359a5c 1002 ////set the parameter of server
shennongmin 10:9d4ec0359a5c 1003
shennongmin 10:9d4ec0359a5c 1004 mode:
shennongmin 10:9d4ec0359a5c 1005 0 - close server mode
shennongmin 10:9d4ec0359a5c 1006 1 - open server mode
shennongmin 10:9d4ec0359a5c 1007
shennongmin 10:9d4ec0359a5c 1008 port: <port>
shennongmin 10:9d4ec0359a5c 1009
shennongmin 10:9d4ec0359a5c 1010 return:
shennongmin 10:9d4ec0359a5c 1011 true - successfully
shennongmin 10:9d4ec0359a5c 1012 false - unsuccessfully
shennongmin 10:9d4ec0359a5c 1013
shennongmin 10:9d4ec0359a5c 1014 ***************************************************************************/
shennongmin 10:9d4ec0359a5c 1015
shennongmin 10:9d4ec0359a5c 1016 bool ESP8266::confServer(uint8_t mode, int port)
shennongmin 10:9d4ec0359a5c 1017 {
shennongmin 10:9d4ec0359a5c 1018 esp_uart.print("AT+CIPSERVER=");
shennongmin 10:9d4ec0359a5c 1019 esp_uart.print(String(mode));
shennongmin 10:9d4ec0359a5c 1020 esp_uart.print(",");
shennongmin 10:9d4ec0359a5c 1021 esp_uart.println(String(port));
shennongmin 10:9d4ec0359a5c 1022
shennongmin 10:9d4ec0359a5c 1023 String data;
shennongmin 10:9d4ec0359a5c 1024 unsigned long start;
shennongmin 10:9d4ec0359a5c 1025 start = millis();
shennongmin 10:9d4ec0359a5c 1026 bool found = false;
shennongmin 10:9d4ec0359a5c 1027 while (millis()-start<3000) {
shennongmin 10:9d4ec0359a5c 1028 if(esp_uart.available()>0)
shennongmin 10:9d4ec0359a5c 1029 {
shennongmin 10:9d4ec0359a5c 1030 char a =esp_uart.read_char();
shennongmin 10:9d4ec0359a5c 1031 data=data+a;
shennongmin 10:9d4ec0359a5c 1032 }
shennongmin 10:9d4ec0359a5c 1033 if (data.indexOf("OK")!=-1 || data.indexOf("no charge")!=-1)
shennongmin 10:9d4ec0359a5c 1034 {
shennongmin 10:9d4ec0359a5c 1035 found = true;
shennongmin 10:9d4ec0359a5c 1036 break;
shennongmin 10:9d4ec0359a5c 1037 }
shennongmin 10:9d4ec0359a5c 1038 }
shennongmin 10:9d4ec0359a5c 1039 esp_uart.flush();
shennongmin 10:9d4ec0359a5c 1040 return found;
shennongmin 10:9d4ec0359a5c 1041 }