LoRa Access Point 1.5.2018

Dependencies:   mbed ds3231 SX1276Lib_LoRa_Access_Point

Committer:
lukas_formanek
Date:
Wed Apr 18 20:33:15 2018 +0000
Revision:
0:ea088908ad26
Child:
1:7543af31b91f
18.4.2018

Who changed what in which revision?

UserRevisionLine numberNew contents of line
lukas_formanek 0:ea088908ad26 1 #include "ESP8266.h"
lukas_formanek 0:ea088908ad26 2
lukas_formanek 0:ea088908ad26 3 const char* SSID = "doma2";
lukas_formanek 0:ea088908ad26 4 const char* PSWD = "0917957359";
lukas_formanek 0:ea088908ad26 5 const char* OK_MESSAGE = "OK\r\n";
lukas_formanek 0:ea088908ad26 6 const char* ERROR_MESSAGE = "ERROR\r\n";
lukas_formanek 0:ea088908ad26 7 const char* GOT_IP_MESSAGE = "WIFI GOT IP\r\n";
lukas_formanek 0:ea088908ad26 8 const char* CAN_SEND_MESSAGE = ">";
lukas_formanek 0:ea088908ad26 9 const char* SEND_OK_MESSAGE = "SEND OK\r\n";
lukas_formanek 0:ea088908ad26 10 const char* WIFI_ALIVE_RESPONSE = "~~LoRa Gateway~~\r\n";
lukas_formanek 0:ea088908ad26 11 const char* DELIMITER=":";
lukas_formanek 0:ea088908ad26 12
lukas_formanek 0:ea088908ad26 13
lukas_formanek 0:ea088908ad26 14 ESP8266 wifi(PA_2, PA_3, PA_1); // Globalna instancia
lukas_formanek 0:ea088908ad26 15
lukas_formanek 0:ea088908ad26 16 ESP8266::ESP8266(PinName tx, PinName rx, PinName reset)
lukas_formanek 0:ea088908ad26 17 : wifiUart(tx,rx,BAUDRATE),
lukas_formanek 0:ea088908ad26 18 wifiReset(reset)
lukas_formanek 0:ea088908ad26 19 {
lukas_formanek 0:ea088908ad26 20 ClearBuffer();
lukas_formanek 0:ea088908ad26 21 okResponse = false;
lukas_formanek 0:ea088908ad26 22 receiveResponse = false;
lukas_formanek 0:ea088908ad26 23 setServerIp = false;
lukas_formanek 0:ea088908ad26 24 setWifiSettings = false;
lukas_formanek 0:ea088908ad26 25 };
lukas_formanek 0:ea088908ad26 26
lukas_formanek 0:ea088908ad26 27 ESP8266::ESP8266(void)
lukas_formanek 0:ea088908ad26 28 : wifiUart(D8,D2,BAUDRATE),
lukas_formanek 0:ea088908ad26 29 wifiReset(D7)
lukas_formanek 0:ea088908ad26 30 {
lukas_formanek 0:ea088908ad26 31 ClearBuffer();
lukas_formanek 0:ea088908ad26 32 okResponse = false;
lukas_formanek 0:ea088908ad26 33 receiveResponse = false;
lukas_formanek 0:ea088908ad26 34 setServerIp = false;
lukas_formanek 0:ea088908ad26 35 setWifiSettings = false;
lukas_formanek 0:ea088908ad26 36 };
lukas_formanek 0:ea088908ad26 37
lukas_formanek 0:ea088908ad26 38 void ESP8266::Init()
lukas_formanek 0:ea088908ad26 39 {
lukas_formanek 0:ea088908ad26 40 wifiReset = 0;
lukas_formanek 0:ea088908ad26 41 wait(0.1);
lukas_formanek 0:ea088908ad26 42 wifiReset = 1;
lukas_formanek 0:ea088908ad26 43 // wait(0.3);
lukas_formanek 0:ea088908ad26 44
lukas_formanek 0:ea088908ad26 45 wifiUart.attach(callback(this,&ESP8266::RxWifiInterrupt), Serial::RxIrq);
lukas_formanek 0:ea088908ad26 46
lukas_formanek 0:ea088908ad26 47
lukas_formanek 0:ea088908ad26 48 // ClearBuff();
lukas_formanek 0:ea088908ad26 49 };
lukas_formanek 0:ea088908ad26 50
lukas_formanek 0:ea088908ad26 51 void ESP8266::RxWifiInterrupt()
lukas_formanek 0:ea088908ad26 52 {
lukas_formanek 0:ea088908ad26 53 while (wifiUart.readable())
lukas_formanek 0:ea088908ad26 54 {
lukas_formanek 0:ea088908ad26 55 char c = wifiUart.getc();
lukas_formanek 0:ea088908ad26 56 // bt.putc(c);
lukas_formanek 0:ea088908ad26 57 buffer[pt++] = c;
lukas_formanek 0:ea088908ad26 58 if(pt >= BUFFER_SIZE - 1)
lukas_formanek 0:ea088908ad26 59 ClearBuffer();
lukas_formanek 0:ea088908ad26 60
lukas_formanek 0:ea088908ad26 61 if(c =='\n')
lukas_formanek 0:ea088908ad26 62 {
lukas_formanek 0:ea088908ad26 63 if( strncmp( ( const char* )buffer, response, strlen(response) ) == 0 )
lukas_formanek 0:ea088908ad26 64 receiveResponse = true;
lukas_formanek 0:ea088908ad26 65
lukas_formanek 0:ea088908ad26 66 if( strncmp( ( const char* )buffer, "~~~", 3 ) == 0 )
lukas_formanek 0:ea088908ad26 67 wifiUart.printf("%s", WIFI_ALIVE_RESPONSE);
lukas_formanek 0:ea088908ad26 68 /*
lukas_formanek 0:ea088908ad26 69 if( strncmp( ( const char* )_responseBuf, "+IPD,", 5 ) == 0 )
lukas_formanek 0:ea088908ad26 70 {
lukas_formanek 0:ea088908ad26 71 char * pch;
lukas_formanek 0:ea088908ad26 72 pch = strtok (_responseBuf,DELIMITER);
lukas_formanek 0:ea088908ad26 73 uint8_t i = 0 ;
lukas_formanek 0:ea088908ad26 74 while (pch != NULL) {
lukas_formanek 0:ea088908ad26 75 if(i == 1)
lukas_formanek 0:ea088908ad26 76 bt.printf("%s",pch);
lukas_formanek 0:ea088908ad26 77 pch = strtok (NULL, DELIMITER);
lukas_formanek 0:ea088908ad26 78 i++;
lukas_formanek 0:ea088908ad26 79 }
lukas_formanek 0:ea088908ad26 80 }
lukas_formanek 0:ea088908ad26 81 */
lukas_formanek 0:ea088908ad26 82 /*
lukas_formanek 0:ea088908ad26 83 if( strncmp( ( const char* )_responseBuf, response, 4 ) == 0 )
lukas_formanek 0:ea088908ad26 84 {
lukas_formanek 0:ea088908ad26 85 OkResponse = true;
lukas_formanek 0:ea088908ad26 86 // bt.printf("OK received !\r\n");
lukas_formanek 0:ea088908ad26 87 }
lukas_formanek 0:ea088908ad26 88 */
lukas_formanek 0:ea088908ad26 89 /*
lukas_formanek 0:ea088908ad26 90 if( strncmp( ( const char* )_responseBuf, ERROR_MESSAGE, 7 ) == 0 )
lukas_formanek 0:ea088908ad26 91 {
lukas_formanek 0:ea088908ad26 92 // bt.printf("ERROR received !\r\n");
lukas_formanek 0:ea088908ad26 93 }
lukas_formanek 0:ea088908ad26 94 */
lukas_formanek 0:ea088908ad26 95 ClearBuffer();
lukas_formanek 0:ea088908ad26 96 }
lukas_formanek 0:ea088908ad26 97 }
lukas_formanek 0:ea088908ad26 98 };
lukas_formanek 0:ea088908ad26 99
lukas_formanek 0:ea088908ad26 100 void ESP8266::SendCommand(char* command, char* answer ,int timeoutMs)
lukas_formanek 0:ea088908ad26 101 {
lukas_formanek 0:ea088908ad26 102 receiveResponse = false;
lukas_formanek 0:ea088908ad26 103 response = answer;
lukas_formanek 0:ea088908ad26 104 okResponse = false;
lukas_formanek 0:ea088908ad26 105 responseTimer.reset();
lukas_formanek 0:ea088908ad26 106 wifiUart.printf("%s",command);
lukas_formanek 0:ea088908ad26 107 responseTimer.start();
lukas_formanek 0:ea088908ad26 108 while(responseTimer.read_ms() < timeoutMs)
lukas_formanek 0:ea088908ad26 109 {
lukas_formanek 0:ea088908ad26 110 if(receiveResponse)
lukas_formanek 0:ea088908ad26 111 {
lukas_formanek 0:ea088908ad26 112 // bt.GetSerial().printf("Receive : %s \r\n", answer); //// ??????????????????????????????????????????????????????
lukas_formanek 0:ea088908ad26 113 // bt.printf("Receive : %s \r\n", answer);
lukas_formanek 0:ea088908ad26 114 bt.Print(response);
lukas_formanek 0:ea088908ad26 115 responseTimer.stop();
lukas_formanek 0:ea088908ad26 116 return;
lukas_formanek 0:ea088908ad26 117 }
lukas_formanek 0:ea088908ad26 118 }
lukas_formanek 0:ea088908ad26 119 responseTimer.stop();
lukas_formanek 0:ea088908ad26 120 // bt.printf("TIMEOUT !\r\n");
lukas_formanek 0:ea088908ad26 121 }
lukas_formanek 0:ea088908ad26 122
lukas_formanek 0:ea088908ad26 123 void ESP8266::SetIpOfServer(char* command)
lukas_formanek 0:ea088908ad26 124 {
lukas_formanek 0:ea088908ad26 125 memcpy(serverIpAddress, command, sizeof(serverIpAddress));
lukas_formanek 0:ea088908ad26 126 setServerIp = true;
lukas_formanek 0:ea088908ad26 127 };
lukas_formanek 0:ea088908ad26 128
lukas_formanek 0:ea088908ad26 129 void ESP8266::SetWiFiConnection(char* command)
lukas_formanek 0:ea088908ad26 130 {
lukas_formanek 0:ea088908ad26 131 memcpy(wifiSettings, command, sizeof(wifiSettings));
lukas_formanek 0:ea088908ad26 132 setWifiSettings = true;
lukas_formanek 0:ea088908ad26 133 };
lukas_formanek 0:ea088908ad26 134
lukas_formanek 0:ea088908ad26 135 void ESP8266::SendMessage(char message[])
lukas_formanek 0:ea088908ad26 136 {
lukas_formanek 0:ea088908ad26 137 pc.printf("%s",message);
lukas_formanek 0:ea088908ad26 138 wifiUart.printf("%s",message);
lukas_formanek 0:ea088908ad26 139 // wifiUart.printf("-68|25|140|23.81\r\n");
lukas_formanek 0:ea088908ad26 140 // wifiUart.printf("fdsfsd\r\n");
lukas_formanek 0:ea088908ad26 141 }
lukas_formanek 0:ea088908ad26 142
lukas_formanek 0:ea088908ad26 143 void ESP8266::CheckSettings()
lukas_formanek 0:ea088908ad26 144 {
lukas_formanek 0:ea088908ad26 145 if(setServerIp && setWifiSettings)
lukas_formanek 0:ea088908ad26 146 {
lukas_formanek 0:ea088908ad26 147 SendCommand("+++",(char*)OK_MESSAGE,700);
lukas_formanek 0:ea088908ad26 148 SendCommand("AT\r\n",(char*)OK_MESSAGE,200);
lukas_formanek 0:ea088908ad26 149 SendCommand("AT+CIPCLOSE\r\n",(char*)OK_MESSAGE,200);
lukas_formanek 0:ea088908ad26 150 SendCommand(serverIpAddress,(char*)OK_MESSAGE,200);
lukas_formanek 0:ea088908ad26 151 SendCommand(wifiSettings,(char*)OK_MESSAGE,1500);
lukas_formanek 0:ea088908ad26 152 SendCommand("AT+RST\r\n","ready",1000);
lukas_formanek 0:ea088908ad26 153 setServerIp = false;
lukas_formanek 0:ea088908ad26 154 setWifiSettings = false;
lukas_formanek 0:ea088908ad26 155 }
lukas_formanek 0:ea088908ad26 156 if(setServerIp)
lukas_formanek 0:ea088908ad26 157 {
lukas_formanek 0:ea088908ad26 158 SendCommand("+++",(char*)OK_MESSAGE,700);
lukas_formanek 0:ea088908ad26 159 SendCommand("AT\r\n",(char*)OK_MESSAGE,300);
lukas_formanek 0:ea088908ad26 160 SendCommand("AT+CIPCLOSE\r\n",(char*)OK_MESSAGE,200);
lukas_formanek 0:ea088908ad26 161 // SendCommand("AT+RST\r\n",(char*)OK_MESSAGE,2000);
lukas_formanek 0:ea088908ad26 162 SendCommand(serverIpAddress,(char*)OK_MESSAGE,200);
lukas_formanek 0:ea088908ad26 163 SendCommand("AT+RST\r\n","ready",1000);
lukas_formanek 0:ea088908ad26 164 setServerIp = false;
lukas_formanek 0:ea088908ad26 165 }
lukas_formanek 0:ea088908ad26 166 if(setWifiSettings)
lukas_formanek 0:ea088908ad26 167 {
lukas_formanek 0:ea088908ad26 168 // pc.printf("%s",wifiSettings);
lukas_formanek 0:ea088908ad26 169 SendCommand("+++",(char*)OK_MESSAGE,700);
lukas_formanek 0:ea088908ad26 170 SendCommand("AT\r\n",(char*)OK_MESSAGE,200);
lukas_formanek 0:ea088908ad26 171 SendCommand("AT+CIPCLOSE\r\n",(char*)OK_MESSAGE,200);
lukas_formanek 0:ea088908ad26 172 SendCommand(wifiSettings,(char*)OK_MESSAGE,1500);
lukas_formanek 0:ea088908ad26 173 SendCommand("AT+RST\r\n","ready",1000);
lukas_formanek 0:ea088908ad26 174 setWifiSettings = false;
lukas_formanek 0:ea088908ad26 175 }
lukas_formanek 0:ea088908ad26 176 }
lukas_formanek 0:ea088908ad26 177
lukas_formanek 0:ea088908ad26 178 void ESP8266::ClearBuffer()
lukas_formanek 0:ea088908ad26 179 {
lukas_formanek 0:ea088908ad26 180 memset(buffer, '\0', sizeof(buffer));
lukas_formanek 0:ea088908ad26 181 pt = 0;
lukas_formanek 0:ea088908ad26 182 }
lukas_formanek 0:ea088908ad26 183
lukas_formanek 0:ea088908ad26 184 void ESP8266::Test()
lukas_formanek 0:ea088908ad26 185 {
lukas_formanek 0:ea088908ad26 186 wifiUart.printf("+++\r\n");
lukas_formanek 0:ea088908ad26 187 wait(0.1);
lukas_formanek 0:ea088908ad26 188 wifiUart.printf("+++\r\n");
lukas_formanek 0:ea088908ad26 189 wait(0.1);
lukas_formanek 0:ea088908ad26 190 wifiUart.printf("AT\r\n");
lukas_formanek 0:ea088908ad26 191 wait(0.2);
lukas_formanek 0:ea088908ad26 192 wifiUart.printf("AT\r\n");
lukas_formanek 0:ea088908ad26 193 wait(0.2);
lukas_formanek 0:ea088908ad26 194 wifiUart.printf("AT\r\n");
lukas_formanek 0:ea088908ad26 195 printf("ATTTTTTTTTTT");
lukas_formanek 0:ea088908ad26 196 wait(0.2);
lukas_formanek 0:ea088908ad26 197 // wifiUart.printf("AT+RST\r\n");
lukas_formanek 0:ea088908ad26 198 }