LoRa Access Point 1.5.2018
Dependencies: mbed ds3231 SX1276Lib_LoRa_Access_Point
ESP8266.cpp
- Committer:
- lukas_formanek
- Date:
- 2019-02-13
- Revision:
- 8:5d99fbf255d6
- Parent:
- 5:19b34c4d27a1
- Child:
- 10:e62222c46ee9
File content as of revision 8:5d99fbf255d6:
#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(WIFI_TX, WIFI_RX, WIFI_RST); 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(WIFI_TX,WIFI_RX,BAUDRATE), wifiReset(D7) { ClearBuffer(); okResponse = false; receiveResponse = false; setServerIp = false; setWifiSettings = false; }; void ESP8266::Init() { wifiReset = 0; wait(0.1); wifiReset = 1; wait(0.1); wifiUart.attach(callback(this,&ESP8266::RxWifiInterrupt), Serial::RxIrq); ClearBuffer(); }; 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 ) if (strstr(buffer, response) != NULL) receiveResponse = true; // if( strncmp( ( const char* )buffer, "~~~", 3 ) == 0 ) if (strstr(buffer, "~~~") != NULL) wifiUart.printf("%s", WIFI_ALIVE_RESPONSE); if (strstr(buffer, "0|") != NULL) rfm.SendMessage(buffer); /* 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.Send(response); responseTimer.stop(); return; } } responseTimer.stop(); } 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); }; 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(serverIpAddress,(char*)OK_MESSAGE,200); SendCommand("AT+RST\r\n","ready",1000); setServerIp = false; } if(setWifiSettings) { 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::ConfirmReceivedAck(uint8_t from) { wifiUart.printf("ACK|%c\r\n",from); }; void ESP8266::Test() { 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); };