LoRa Access Point 1.5.2018
Dependencies: mbed ds3231 SX1276Lib_LoRa_Access_Point
Diff: ESP8266.cpp
- Revision:
- 0:ea088908ad26
- Child:
- 1:7543af31b91f
diff -r 000000000000 -r ea088908ad26 ESP8266.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ESP8266.cpp Wed Apr 18 20:33:15 2018 +0000 @@ -0,0 +1,198 @@ +#include "ESP8266.h" + +const char* SSID = "doma2"; +const char* PSWD = "0917957359"; +const char* OK_MESSAGE = "OK\r\n"; +const char* ERROR_MESSAGE = "ERROR\r\n"; +const char* GOT_IP_MESSAGE = "WIFI GOT IP\r\n"; +const char* CAN_SEND_MESSAGE = ">"; +const char* SEND_OK_MESSAGE = "SEND OK\r\n"; +const char* WIFI_ALIVE_RESPONSE = "~~LoRa Gateway~~\r\n"; +const char* DELIMITER=":"; + + +ESP8266 wifi(PA_2, PA_3, PA_1); // Globalna instancia + +ESP8266::ESP8266(PinName tx, PinName rx, PinName reset) + : wifiUart(tx,rx,BAUDRATE), + wifiReset(reset) +{ + ClearBuffer(); + okResponse = false; + receiveResponse = false; + setServerIp = false; + setWifiSettings = false; +}; + +ESP8266::ESP8266(void) + : wifiUart(D8,D2,BAUDRATE), + wifiReset(D7) +{ + ClearBuffer(); + okResponse = false; + receiveResponse = false; + setServerIp = false; + setWifiSettings = false; +}; + +void ESP8266::Init() +{ + wifiReset = 0; + wait(0.1); + wifiReset = 1; +// wait(0.3); + + wifiUart.attach(callback(this,&ESP8266::RxWifiInterrupt), Serial::RxIrq); + + +// ClearBuff(); +}; + +void ESP8266::RxWifiInterrupt() +{ + while (wifiUart.readable()) + { + char c = wifiUart.getc(); +// bt.putc(c); + buffer[pt++] = c; + if(pt >= BUFFER_SIZE - 1) + ClearBuffer(); + + if(c =='\n') + { + if( strncmp( ( const char* )buffer, response, strlen(response) ) == 0 ) + receiveResponse = true; + + if( strncmp( ( const char* )buffer, "~~~", 3 ) == 0 ) + wifiUart.printf("%s", WIFI_ALIVE_RESPONSE); + /* + if( strncmp( ( const char* )_responseBuf, "+IPD,", 5 ) == 0 ) + { + char * pch; + pch = strtok (_responseBuf,DELIMITER); + uint8_t i = 0 ; + while (pch != NULL) { + if(i == 1) + bt.printf("%s",pch); + pch = strtok (NULL, DELIMITER); + i++; + } + } +*/ +/* + if( strncmp( ( const char* )_responseBuf, response, 4 ) == 0 ) + { + OkResponse = true; +// bt.printf("OK received !\r\n"); + } +*/ +/* + if( strncmp( ( const char* )_responseBuf, ERROR_MESSAGE, 7 ) == 0 ) + { +// bt.printf("ERROR received !\r\n"); + } +*/ + ClearBuffer(); + } + } +}; + +void ESP8266::SendCommand(char* command, char* answer ,int timeoutMs) +{ + receiveResponse = false; + response = answer; + okResponse = false; + responseTimer.reset(); + wifiUart.printf("%s",command); + responseTimer.start(); + while(responseTimer.read_ms() < timeoutMs) + { + if(receiveResponse) + { +// bt.GetSerial().printf("Receive : %s \r\n", answer); //// ?????????????????????????????????????????????????????? +// bt.printf("Receive : %s \r\n", answer); + bt.Print(response); + responseTimer.stop(); + return; + } + } + responseTimer.stop(); +// bt.printf("TIMEOUT !\r\n"); +} + +void ESP8266::SetIpOfServer(char* command) +{ + memcpy(serverIpAddress, command, sizeof(serverIpAddress)); + setServerIp = true; +}; + +void ESP8266::SetWiFiConnection(char* command) +{ + memcpy(wifiSettings, command, sizeof(wifiSettings)); + setWifiSettings = true; +}; + +void ESP8266::SendMessage(char message[]) +{ + pc.printf("%s",message); + wifiUart.printf("%s",message); +// wifiUart.printf("-68|25|140|23.81\r\n"); +// wifiUart.printf("fdsfsd\r\n"); +} + +void ESP8266::CheckSettings() +{ + if(setServerIp && setWifiSettings) + { + SendCommand("+++",(char*)OK_MESSAGE,700); + SendCommand("AT\r\n",(char*)OK_MESSAGE,200); + SendCommand("AT+CIPCLOSE\r\n",(char*)OK_MESSAGE,200); + SendCommand(serverIpAddress,(char*)OK_MESSAGE,200); + SendCommand(wifiSettings,(char*)OK_MESSAGE,1500); + SendCommand("AT+RST\r\n","ready",1000); + setServerIp = false; + setWifiSettings = false; + } + if(setServerIp) + { + SendCommand("+++",(char*)OK_MESSAGE,700); + SendCommand("AT\r\n",(char*)OK_MESSAGE,300); + SendCommand("AT+CIPCLOSE\r\n",(char*)OK_MESSAGE,200); +// SendCommand("AT+RST\r\n",(char*)OK_MESSAGE,2000); + SendCommand(serverIpAddress,(char*)OK_MESSAGE,200); + SendCommand("AT+RST\r\n","ready",1000); + setServerIp = false; + } + if(setWifiSettings) + { +// pc.printf("%s",wifiSettings); + SendCommand("+++",(char*)OK_MESSAGE,700); + SendCommand("AT\r\n",(char*)OK_MESSAGE,200); + SendCommand("AT+CIPCLOSE\r\n",(char*)OK_MESSAGE,200); + SendCommand(wifiSettings,(char*)OK_MESSAGE,1500); + SendCommand("AT+RST\r\n","ready",1000); + setWifiSettings = false; + } +} + +void ESP8266::ClearBuffer() +{ + memset(buffer, '\0', sizeof(buffer)); + pt = 0; +} + +void ESP8266::Test() +{ + wifiUart.printf("+++\r\n"); + wait(0.1); + wifiUart.printf("+++\r\n"); + wait(0.1); + wifiUart.printf("AT\r\n"); + wait(0.2); + wifiUart.printf("AT\r\n"); + wait(0.2); + wifiUart.printf("AT\r\n"); + printf("ATTTTTTTTTTT"); + wait(0.2); +// wifiUart.printf("AT+RST\r\n"); +}