![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
Kuo Yiching
Fork of iot_example by
Diff: esp8266.cpp
- Revision:
- 1:3b487c4813a2
- Parent:
- 0:63af4719467f
- Child:
- 2:b10925c474fc
--- 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) {