LoRa Access Point 1.5.2018

Dependencies:   mbed ds3231 SX1276Lib_LoRa_Access_Point

Revision:
0:ea088908ad26
Child:
1:7543af31b91f
--- /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");
+}