1
1
/* *
2
2
* @file ESP8266.cpp
3
- * @brief The implementation of class ESP8266.
4
- * @author Wu Pengfei<[email protected] >
3
+ * @brief The implementation of class ESP8266.
4
+ * @author Wu Pengfei<[email protected] >
5
5
* @date 2015.02
6
- *
6
+ *
7
7
* @par Copyright:
8
8
* Copyright (c) 2015 ITEAD Intelligent Systems Co., Ltd. \n\n
9
9
* This program is free software; you can redistribute it and/or
@@ -147,6 +147,10 @@ bool ESP8266::joinAP(String ssid, String pwd)
147
147
return sATCWJAP (ssid, pwd);
148
148
}
149
149
150
+ bool ESP8266::setStaticIp (String ip, String gateway, String mask){
151
+ return sATCIPSTACUR (ip, gateway, mask);
152
+ }
153
+
150
154
bool ESP8266::enableClientDHCP (uint8_t mode, boolean enabled)
151
155
{
152
156
return sATCWDHCP (mode, enabled);
@@ -267,7 +271,7 @@ bool ESP8266::enableMDNS(String hostname, String servername, uint32_t port)
267
271
{
268
272
return sATCMDNS (true , hostname, servername, port);
269
273
}
270
-
274
+
271
275
bool ESP8266::disableMDNS (void )
272
276
{
273
277
return sATCMDNS (false , " " , " " , 0 );
@@ -321,25 +325,25 @@ uint32_t ESP8266::recvPkg(uint8_t *buffer, uint32_t buffer_size, uint32_t *data_
321
325
uint32_t ret;
322
326
unsigned long start;
323
327
uint32_t i;
324
-
328
+
325
329
if (buffer == NULL ) {
326
330
return 0 ;
327
331
}
328
-
332
+
329
333
start = millis ();
330
334
while (millis () - start < timeout) {
331
335
if (m_puart->available () > 0 ) {
332
336
a = m_puart->read ();
333
337
data += a;
334
338
}
335
-
339
+
336
340
index_PIPDcomma = data.indexOf (" +IPD," );
337
341
if (index_PIPDcomma != -1 ) {
338
342
index_colon = data.indexOf (' :' , index_PIPDcomma + 5 );
339
343
if (index_colon != -1 ) {
340
344
index_comma = data.indexOf (' ,' , index_PIPDcomma + 5 );
341
345
/* +IPD,id,len:data */
342
- if (index_comma != -1 && index_comma < index_colon) {
346
+ if (index_comma != -1 && index_comma < index_colon) {
343
347
id = data.substring (index_PIPDcomma + 5 , index_comma).toInt ();
344
348
if (id < 0 || id > 4 ) {
345
349
return 0 ;
@@ -359,7 +363,7 @@ uint32_t ESP8266::recvPkg(uint8_t *buffer, uint32_t buffer_size, uint32_t *data_
359
363
}
360
364
}
361
365
}
362
-
366
+
363
367
if (has_data) {
364
368
i = 0 ;
365
369
ret = len > buffer_size ? buffer_size : len;
@@ -372,7 +376,7 @@ uint32_t ESP8266::recvPkg(uint8_t *buffer, uint32_t buffer_size, uint32_t *data_
372
376
if (i == ret) {
373
377
rx_empty ();
374
378
if (data_len) {
375
- *data_len = len;
379
+ *data_len = len;
376
380
}
377
381
if (index_comma != -1 && coming_mux_id) {
378
382
*coming_mux_id = id;
@@ -384,7 +388,7 @@ uint32_t ESP8266::recvPkg(uint8_t *buffer, uint32_t buffer_size, uint32_t *data_
384
388
return 0 ;
385
389
}
386
390
387
- void ESP8266::rx_empty (void )
391
+ void ESP8266::rx_empty (void )
388
392
{
389
393
while (m_puart->available () > 0 ) {
390
394
m_puart->read ();
@@ -404,7 +408,7 @@ String ESP8266::recvString(String target, uint32_t timeout)
404
408
}
405
409
if (data.indexOf (target) != -1 ) {
406
410
break ;
407
- }
411
+ }
408
412
}
409
413
return data;
410
414
}
@@ -485,7 +489,7 @@ bool ESP8266::eAT(void)
485
489
return recvFind (" OK" );
486
490
}
487
491
488
- bool ESP8266::eATRST (void )
492
+ bool ESP8266::eATRST (void )
489
493
{
490
494
rx_empty ();
491
495
m_puart->println (" AT+RST" );
@@ -496,10 +500,10 @@ bool ESP8266::eATGMR(String &version)
496
500
{
497
501
rx_empty ();
498
502
m_puart->println (" AT+GMR" );
499
- return recvFindAndFilter (" OK" , " \r\r\n " , " \r\n\r\n OK" , version);
503
+ return recvFindAndFilter (" OK" , " \r\r\n " , " \r\n\r\n OK" , version);
500
504
}
501
505
502
- bool ESP8266::qATCWMODE (uint8_t *mode)
506
+ bool ESP8266::qATCWMODE (uint8_t *mode)
503
507
{
504
508
String str_mode;
505
509
bool ret;
@@ -508,7 +512,7 @@ bool ESP8266::qATCWMODE(uint8_t *mode)
508
512
}
509
513
rx_empty ();
510
514
m_puart->println (" AT+CWMODE?" );
511
- ret = recvFindAndFilter (" OK" , " +CWMODE:" , " \r\n\r\n OK" , str_mode);
515
+ ret = recvFindAndFilter (" OK" , " +CWMODE:" , " \r\n\r\n OK" , str_mode);
512
516
if (ret) {
513
517
*mode = (uint8_t )str_mode.toInt ();
514
518
return true ;
@@ -523,7 +527,7 @@ bool ESP8266::sATCWMODE(uint8_t mode)
523
527
rx_empty ();
524
528
m_puart->print (" AT+CWMODE=" );
525
529
m_puart->println (mode);
526
-
530
+
527
531
data = recvString (" OK" , " no change" );
528
532
if (data.indexOf (" OK" ) != -1 || data.indexOf (" no change" ) != -1 ) {
529
533
return true ;
@@ -540,7 +544,25 @@ bool ESP8266::sATCWJAP(String ssid, String pwd)
540
544
m_puart->print (" \" ,\" " );
541
545
m_puart->print (pwd);
542
546
m_puart->println (" \" " );
543
-
547
+
548
+ data = recvString (" OK" , " FAIL" , 10000 );
549
+ if (data.indexOf (" OK" ) != -1 ) {
550
+ return true ;
551
+ }
552
+ return false ;
553
+ }
554
+
555
+ bool ESP8266::sATCIPSTACUR (String ip, String gateway, String mask)
556
+ {
557
+ String data;
558
+ rx_empty ();
559
+ m_puart->print (" AT+CIPSTA_CUR=\" " );
560
+ m_puart->print (ip);
561
+ m_puart->print (" \" ,\" " );
562
+ m_puart->print (gateway);
563
+ m_puart->print (" \" ,\" " );
564
+ m_puart->print (mask);
565
+ m_puart->println (" \" " );
544
566
data = recvString (" OK" , " FAIL" , 10000 );
545
567
if (data.indexOf (" OK" ) != -1 ) {
546
568
return true ;
@@ -554,15 +576,15 @@ bool ESP8266::sATCWDHCP(uint8_t mode, boolean enabled)
554
576
if (enabled) {
555
577
strEn = " 1" ;
556
578
}
557
-
558
-
579
+
580
+
559
581
String data;
560
582
rx_empty ();
561
583
m_puart->print (" AT+CWDHCP=" );
562
584
m_puart->print (strEn);
563
585
m_puart->print (" ," );
564
586
m_puart->println (mode);
565
-
587
+
566
588
data = recvString (" OK" , " FAIL" , 10000 );
567
589
if (data.indexOf (" OK" ) != -1 ) {
568
590
return true ;
@@ -598,7 +620,7 @@ bool ESP8266::sATCWSAP(String ssid, String pwd, uint8_t chl, uint8_t ecn)
598
620
m_puart->print (chl);
599
621
m_puart->print (" ," );
600
622
m_puart->println (ecn);
601
-
623
+
602
624
data = recvString (" OK" , " ERROR" , 5000 );
603
625
if (data.indexOf (" OK" ) != -1 ) {
604
626
return true ;
@@ -631,7 +653,7 @@ bool ESP8266::sATCIPSTARTSingle(String type, String addr, uint32_t port)
631
653
m_puart->print (addr);
632
654
m_puart->print (" \" ," );
633
655
m_puart->println (port);
634
-
656
+
635
657
data = recvString (" OK" , " ERROR" , " ALREADY CONNECT" , 10000 );
636
658
if (data.indexOf (" OK" ) != -1 || data.indexOf (" ALREADY CONNECT" ) != -1 ) {
637
659
return true ;
@@ -650,7 +672,7 @@ bool ESP8266::sATCIPSTARTMultiple(uint8_t mux_id, String type, String addr, uint
650
672
m_puart->print (addr);
651
673
m_puart->print (" \" ," );
652
674
m_puart->println (port);
653
-
675
+
654
676
data = recvString (" OK" , " ERROR" , " ALREADY CONNECT" , 10000 );
655
677
if (data.indexOf (" OK" ) != -1 || data.indexOf (" ALREADY CONNECT" ) != -1 ) {
656
678
return true ;
@@ -693,7 +715,7 @@ bool ESP8266::sATCIPCLOSEMulitple(uint8_t mux_id)
693
715
rx_empty ();
694
716
m_puart->print (" AT+CIPCLOSE=" );
695
717
m_puart->println (mux_id);
696
-
718
+
697
719
data = recvString (" OK" , " link is not" , 5000 );
698
720
if (data.indexOf (" OK" ) != -1 || data.indexOf (" link is not" ) != -1 ) {
699
721
return true ;
@@ -718,7 +740,7 @@ bool ESP8266::sATCIPMUX(uint8_t mode)
718
740
rx_empty ();
719
741
m_puart->print (" AT+CIPMUX=" );
720
742
m_puart->println (mode);
721
-
743
+
722
744
data = recvString (" OK" , " Link is builded" );
723
745
if (data.indexOf (" OK" ) != -1 ) {
724
746
return true ;
@@ -732,7 +754,7 @@ bool ESP8266::sATCIPSERVER(uint8_t mode, uint32_t port)
732
754
rx_empty ();
733
755
m_puart->print (" AT+CIPSERVER=1," );
734
756
m_puart->println (port);
735
-
757
+
736
758
data = recvString (" OK" , " no change" );
737
759
if (data.indexOf (" OK" ) != -1 || data.indexOf (" no change" ) != -1 ) {
738
760
return true ;
@@ -772,4 +794,3 @@ bool ESP8266::sATCMDNS(bool enable, String hostname, String servername, uint32_t
772
794
}
773
795
return false ;
774
796
}
775
-
0 commit comments