init

Dependencies:   mbed

Fork of iot_example by YX ZHANG

Revision:
1:3b487c4813a2
Parent:
0:63af4719467f
Child:
2:b10925c474fc
diff -r 63af4719467f -r 3b487c4813a2 esp8266.cpp
--- a/esp8266.cpp	Wed Oct 11 08:40:04 2017 +0000
+++ b/esp8266.cpp	Tue Nov 07 03:15:44 2017 +0000
@@ -1,22 +1,24 @@
+/***************************************************************
+功能 : ESP8266物联车接口函数
+作者 : 马晓健
+邮箱 : jeasinema[at]gmail[dot]com
+声明 : 
+本程序仅供学习与交流使用,如需他用,须联系作者
+本程序可以随意更改,但须保留本信息页
+All rights reserved
+2017.6.16
+***************************************************************/
+
 #include "esp8266.h"
 
 #include <cstdarg>
 #include <cstring>
 #include "mbed.h"
 
-// 连接模式
-// 修改为需要连接的 wifi 的 ssid
-const char wifi_ssid[] = "iotcar";
-// 修改为需要连接 wifi 的密码
-const char wifi_passwd[] = "iotcariotcar";
-
-// 选定与 esp8266 相连接的串口
-// 参数分别为 TX pin / RX pin
-Serial ser2esp8266(PC_10, PC_11);
 
 //#define DEBUG
 
-int ser_baud = 9600;
+static int ser_baud = 9600;
 
 //定义了一个调试的宏,C语言语法
 #define ESP_CMD(format, ...) do{\
@@ -28,30 +30,19 @@
 
 #ifdef DEBUG
 void cb1() {                                                                    //将USB串口上得到的消息通过WIFI模块发出去
-    //ser2esp8266.putc(ser2usb.getc());
+    //ser2esp8266.putc(getchar());
 }
 #endif
 
 void simple_callback() {                                                        //将WIFI模块得到的消息通过USB串口打印到电脑上
-    //ser2usb.putc(ser2esp8266.getc());
+//    putchar(ser2esp8266.getc());
 }
 //#endif
 
-// 热点模式
-// 修改为需要建立的热点 ssid
-const char adhoc_ssid[] = "iotcar";
-
-// 此校园网登录账号无需修改
-const char net_id[] = "yangc12";
-const char net_passwd[] = "58a702fbc91f3e601de5188c6fb274ef";
-
 
 // 接收 esp8266 侧数据的回调函数, 每次仅接收一个8位字符
-static char esp_token[1024], esp_param[2048];
-static char esp_tokenBuf[1024], esp_paramBuf[2048];   // recv from esp8266
-static bool esp_buf_ready = false;
 // 数据格式约定: #token+data
-static void esp8266_rxCallback() {
+void Esp8266::esp8266_rxCallback() {
     char in = ser2esp8266.getc();
     enum{STATE_WAIT, STATE_TOKEN, STATE_PARAM};
     static uint8_t state = STATE_WAIT;
@@ -61,17 +52,14 @@
         if(in == '#'){
             tokenLen = 0;
             state = STATE_TOKEN;
-            //ser2usb.putc('w');
         }
         break;
     case STATE_TOKEN:
-        //ser2usb.putc('t');
         if(in == '+' || in == '\r' || in == '\n'){
             esp_tokenBuf[tokenLen] = '\0';
             if(in == '+'){
                 paramLen = 0;
                 state = STATE_PARAM;
-                //ser2usb.putc('!');
             }else{
                 //gotResponse(tokenBuf, NULL);
                 //memcpy(esp_token, esp_tokenBuf, tokenLen);
@@ -84,7 +72,6 @@
         }
         break;
     case STATE_PARAM:
-        //ser2usb.putc('p');
         if(in == '\r' || in == '\n'){
             esp_paramBuf[paramLen] = '\0';
             //gotResponse(tokenBuf, paramBuf);
@@ -104,21 +91,21 @@
 }
 
 
-Esp8266::Esp8266(int mode)                                                      //定义类的函数
-    : network_start(false), mqtt_start(false) 
+Esp8266::Esp8266(PinName TX, PinName RX, const char *wifi_ssid, const char *wifi_passwd)       //定义类的函数
+    : network_start(false), mqtt_start(false), esp_buf_ready(false), ser2esp8266(TX, RX)
 {
     // serial to esp8266 init
     ser2esp8266.baud(ser_baud);
 #ifndef DEBUG
     //ser2esp8266.attach(esp8266_rxCallback, Serial::RxIrq);    
 #endif
-    if (mode == 0) {                                                            // client mode 
+    //if (mode == 0) {                                                            // client mode 
         this->reset();
-        this->connect_wifi();
+        this->connect_wifi(wifi_ssid, wifi_passwd);
         this->weblogin();
-    } else {
-    
-    }
+    //} else {
+    //    
+    //}
 }
 
 bool Esp8266::reset() {                                                         //定义类的函数
@@ -127,7 +114,7 @@
     return true;
 }   
 
-bool Esp8266::connect_wifi() {                                                  //定义类的函数
+bool Esp8266::connect_wifi(const char *wifi_ssid, const char *wifi_passwd) {                                                  //定义类的函数
     ESP_CMD("wifi.setmode(wifi.STATION)");
     ESP_CMD("wifi.sta.config([[%s]],[[%s]])", wifi_ssid, wifi_passwd);
     wait(2);
@@ -178,7 +165,6 @@
         while(!esp_buf_ready);
         esp_buf_ready = false; 
         
-        //ser2usb.putc('x');
         if (strcmp(topic, esp_tokenBuf) == 0) {
     
             if (size == -1) {