Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed ds3231 SX1276Lib_LoRa_Access_Point
ESP8266.cpp
- Committer:
- lukas_formanek
- Date:
- 2018-04-30
- Revision:
- 4:e20eb5efd859
- Parent:
- 2:0499e1d037a5
- Child:
- 5:19b34c4d27a1
File content as of revision 4:e20eb5efd859:
#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); // 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(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 )
receiveResponse = true;
if( strncmp( ( const char* )buffer, "~~~", 3 ) == 0 )
wifiUart.printf("%s", WIFI_ALIVE_RESPONSE);
if (strstr(buffer, "0|") != NULL) {
rfm.SendMessage(buffer);
pc.printf("%s", 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.GetSerial().printf("Receive : %s \r\n", answer); //// ??????????????????????????????????????????????????????
// bt.printf("Receive : %s \r\n", answer);
bt.Send(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");
}