LoRa Access Point 1.5.2018
Dependencies: mbed ds3231 SX1276Lib_LoRa_Access_Point
ESP8266.cpp@2:0499e1d037a5, 2018-04-23 (annotated)
- Committer:
- lukas_formanek
- Date:
- Mon Apr 23 10:30:01 2018 +0000
- Revision:
- 2:0499e1d037a5
- Parent:
- 1:7543af31b91f
- Child:
- 4:e20eb5efd859
23.4.2018
Who changed what in which revision?
User | Revision | Line number | New 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 | 1:7543af31b91f | 14 | ESP8266 wifi(WIFI_TX, WIFI_RX, WIFI_RST); // 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 | 2:0499e1d037a5 | 27 | |
lukas_formanek | 0:ea088908ad26 | 28 | ESP8266::ESP8266(void) |
lukas_formanek | 2:0499e1d037a5 | 29 | : wifiUart(WIFI_TX,WIFI_RX,BAUDRATE), |
lukas_formanek | 0:ea088908ad26 | 30 | wifiReset(D7) |
lukas_formanek | 0:ea088908ad26 | 31 | { |
lukas_formanek | 0:ea088908ad26 | 32 | ClearBuffer(); |
lukas_formanek | 0:ea088908ad26 | 33 | okResponse = false; |
lukas_formanek | 0:ea088908ad26 | 34 | receiveResponse = false; |
lukas_formanek | 0:ea088908ad26 | 35 | setServerIp = false; |
lukas_formanek | 0:ea088908ad26 | 36 | setWifiSettings = false; |
lukas_formanek | 0:ea088908ad26 | 37 | }; |
lukas_formanek | 2:0499e1d037a5 | 38 | |
lukas_formanek | 0:ea088908ad26 | 39 | |
lukas_formanek | 0:ea088908ad26 | 40 | void ESP8266::Init() |
lukas_formanek | 0:ea088908ad26 | 41 | { |
lukas_formanek | 0:ea088908ad26 | 42 | wifiReset = 0; |
lukas_formanek | 0:ea088908ad26 | 43 | wait(0.1); |
lukas_formanek | 0:ea088908ad26 | 44 | wifiReset = 1; |
lukas_formanek | 2:0499e1d037a5 | 45 | wait(0.1); |
lukas_formanek | 0:ea088908ad26 | 46 | wifiUart.attach(callback(this,&ESP8266::RxWifiInterrupt), Serial::RxIrq); |
lukas_formanek | 2:0499e1d037a5 | 47 | ClearBuffer(); |
lukas_formanek | 0:ea088908ad26 | 48 | }; |
lukas_formanek | 0:ea088908ad26 | 49 | |
lukas_formanek | 0:ea088908ad26 | 50 | void ESP8266::RxWifiInterrupt() |
lukas_formanek | 0:ea088908ad26 | 51 | { |
lukas_formanek | 0:ea088908ad26 | 52 | while (wifiUart.readable()) |
lukas_formanek | 0:ea088908ad26 | 53 | { |
lukas_formanek | 0:ea088908ad26 | 54 | char c = wifiUart.getc(); |
lukas_formanek | 0:ea088908ad26 | 55 | // bt.putc(c); |
lukas_formanek | 0:ea088908ad26 | 56 | buffer[pt++] = c; |
lukas_formanek | 0:ea088908ad26 | 57 | if(pt >= BUFFER_SIZE - 1) |
lukas_formanek | 0:ea088908ad26 | 58 | ClearBuffer(); |
lukas_formanek | 0:ea088908ad26 | 59 | |
lukas_formanek | 0:ea088908ad26 | 60 | if(c =='\n') |
lukas_formanek | 0:ea088908ad26 | 61 | { |
lukas_formanek | 0:ea088908ad26 | 62 | if( strncmp( ( const char* )buffer, response, strlen(response) ) == 0 ) |
lukas_formanek | 0:ea088908ad26 | 63 | receiveResponse = true; |
lukas_formanek | 0:ea088908ad26 | 64 | |
lukas_formanek | 0:ea088908ad26 | 65 | if( strncmp( ( const char* )buffer, "~~~", 3 ) == 0 ) |
lukas_formanek | 0:ea088908ad26 | 66 | wifiUart.printf("%s", WIFI_ALIVE_RESPONSE); |
lukas_formanek | 0:ea088908ad26 | 67 | /* |
lukas_formanek | 0:ea088908ad26 | 68 | if( strncmp( ( const char* )_responseBuf, "+IPD,", 5 ) == 0 ) |
lukas_formanek | 0:ea088908ad26 | 69 | { |
lukas_formanek | 0:ea088908ad26 | 70 | char * pch; |
lukas_formanek | 0:ea088908ad26 | 71 | pch = strtok (_responseBuf,DELIMITER); |
lukas_formanek | 0:ea088908ad26 | 72 | uint8_t i = 0 ; |
lukas_formanek | 0:ea088908ad26 | 73 | while (pch != NULL) { |
lukas_formanek | 0:ea088908ad26 | 74 | if(i == 1) |
lukas_formanek | 0:ea088908ad26 | 75 | bt.printf("%s",pch); |
lukas_formanek | 0:ea088908ad26 | 76 | pch = strtok (NULL, DELIMITER); |
lukas_formanek | 0:ea088908ad26 | 77 | i++; |
lukas_formanek | 0:ea088908ad26 | 78 | } |
lukas_formanek | 0:ea088908ad26 | 79 | } |
lukas_formanek | 0:ea088908ad26 | 80 | */ |
lukas_formanek | 0:ea088908ad26 | 81 | /* |
lukas_formanek | 0:ea088908ad26 | 82 | if( strncmp( ( const char* )_responseBuf, response, 4 ) == 0 ) |
lukas_formanek | 0:ea088908ad26 | 83 | { |
lukas_formanek | 0:ea088908ad26 | 84 | OkResponse = true; |
lukas_formanek | 0:ea088908ad26 | 85 | // bt.printf("OK received !\r\n"); |
lukas_formanek | 0:ea088908ad26 | 86 | } |
lukas_formanek | 0:ea088908ad26 | 87 | */ |
lukas_formanek | 0:ea088908ad26 | 88 | /* |
lukas_formanek | 0:ea088908ad26 | 89 | if( strncmp( ( const char* )_responseBuf, ERROR_MESSAGE, 7 ) == 0 ) |
lukas_formanek | 0:ea088908ad26 | 90 | { |
lukas_formanek | 0:ea088908ad26 | 91 | // bt.printf("ERROR received !\r\n"); |
lukas_formanek | 0:ea088908ad26 | 92 | } |
lukas_formanek | 0:ea088908ad26 | 93 | */ |
lukas_formanek | 0:ea088908ad26 | 94 | ClearBuffer(); |
lukas_formanek | 0:ea088908ad26 | 95 | } |
lukas_formanek | 0:ea088908ad26 | 96 | } |
lukas_formanek | 0:ea088908ad26 | 97 | }; |
lukas_formanek | 0:ea088908ad26 | 98 | |
lukas_formanek | 0:ea088908ad26 | 99 | void ESP8266::SendCommand(char* command, char* answer ,int timeoutMs) |
lukas_formanek | 0:ea088908ad26 | 100 | { |
lukas_formanek | 0:ea088908ad26 | 101 | receiveResponse = false; |
lukas_formanek | 0:ea088908ad26 | 102 | response = answer; |
lukas_formanek | 0:ea088908ad26 | 103 | okResponse = false; |
lukas_formanek | 0:ea088908ad26 | 104 | responseTimer.reset(); |
lukas_formanek | 0:ea088908ad26 | 105 | wifiUart.printf("%s",command); |
lukas_formanek | 0:ea088908ad26 | 106 | responseTimer.start(); |
lukas_formanek | 0:ea088908ad26 | 107 | while(responseTimer.read_ms() < timeoutMs) |
lukas_formanek | 0:ea088908ad26 | 108 | { |
lukas_formanek | 0:ea088908ad26 | 109 | if(receiveResponse) |
lukas_formanek | 0:ea088908ad26 | 110 | { |
lukas_formanek | 0:ea088908ad26 | 111 | // bt.GetSerial().printf("Receive : %s \r\n", answer); //// ?????????????????????????????????????????????????????? |
lukas_formanek | 0:ea088908ad26 | 112 | // bt.printf("Receive : %s \r\n", answer); |
lukas_formanek | 2:0499e1d037a5 | 113 | bt.Send(response); |
lukas_formanek | 0:ea088908ad26 | 114 | responseTimer.stop(); |
lukas_formanek | 0:ea088908ad26 | 115 | return; |
lukas_formanek | 0:ea088908ad26 | 116 | } |
lukas_formanek | 0:ea088908ad26 | 117 | } |
lukas_formanek | 0:ea088908ad26 | 118 | responseTimer.stop(); |
lukas_formanek | 0:ea088908ad26 | 119 | // bt.printf("TIMEOUT !\r\n"); |
lukas_formanek | 0:ea088908ad26 | 120 | } |
lukas_formanek | 0:ea088908ad26 | 121 | |
lukas_formanek | 0:ea088908ad26 | 122 | void ESP8266::SetIpOfServer(char* command) |
lukas_formanek | 0:ea088908ad26 | 123 | { |
lukas_formanek | 0:ea088908ad26 | 124 | memcpy(serverIpAddress, command, sizeof(serverIpAddress)); |
lukas_formanek | 0:ea088908ad26 | 125 | setServerIp = true; |
lukas_formanek | 0:ea088908ad26 | 126 | }; |
lukas_formanek | 0:ea088908ad26 | 127 | |
lukas_formanek | 0:ea088908ad26 | 128 | void ESP8266::SetWiFiConnection(char* command) |
lukas_formanek | 0:ea088908ad26 | 129 | { |
lukas_formanek | 0:ea088908ad26 | 130 | memcpy(wifiSettings, command, sizeof(wifiSettings)); |
lukas_formanek | 0:ea088908ad26 | 131 | setWifiSettings = true; |
lukas_formanek | 0:ea088908ad26 | 132 | }; |
lukas_formanek | 0:ea088908ad26 | 133 | |
lukas_formanek | 0:ea088908ad26 | 134 | void ESP8266::SendMessage(char message[]) |
lukas_formanek | 0:ea088908ad26 | 135 | { |
lukas_formanek | 0:ea088908ad26 | 136 | pc.printf("%s",message); |
lukas_formanek | 0:ea088908ad26 | 137 | wifiUart.printf("%s",message); |
lukas_formanek | 0:ea088908ad26 | 138 | // wifiUart.printf("-68|25|140|23.81\r\n"); |
lukas_formanek | 0:ea088908ad26 | 139 | // wifiUart.printf("fdsfsd\r\n"); |
lukas_formanek | 0:ea088908ad26 | 140 | } |
lukas_formanek | 0:ea088908ad26 | 141 | |
lukas_formanek | 0:ea088908ad26 | 142 | void ESP8266::CheckSettings() |
lukas_formanek | 0:ea088908ad26 | 143 | { |
lukas_formanek | 0:ea088908ad26 | 144 | if(setServerIp && setWifiSettings) |
lukas_formanek | 0:ea088908ad26 | 145 | { |
lukas_formanek | 0:ea088908ad26 | 146 | SendCommand("+++",(char*)OK_MESSAGE,700); |
lukas_formanek | 0:ea088908ad26 | 147 | SendCommand("AT\r\n",(char*)OK_MESSAGE,200); |
lukas_formanek | 0:ea088908ad26 | 148 | SendCommand("AT+CIPCLOSE\r\n",(char*)OK_MESSAGE,200); |
lukas_formanek | 0:ea088908ad26 | 149 | SendCommand(serverIpAddress,(char*)OK_MESSAGE,200); |
lukas_formanek | 0:ea088908ad26 | 150 | SendCommand(wifiSettings,(char*)OK_MESSAGE,1500); |
lukas_formanek | 0:ea088908ad26 | 151 | SendCommand("AT+RST\r\n","ready",1000); |
lukas_formanek | 0:ea088908ad26 | 152 | setServerIp = false; |
lukas_formanek | 0:ea088908ad26 | 153 | setWifiSettings = false; |
lukas_formanek | 0:ea088908ad26 | 154 | } |
lukas_formanek | 0:ea088908ad26 | 155 | if(setServerIp) |
lukas_formanek | 0:ea088908ad26 | 156 | { |
lukas_formanek | 0:ea088908ad26 | 157 | SendCommand("+++",(char*)OK_MESSAGE,700); |
lukas_formanek | 0:ea088908ad26 | 158 | SendCommand("AT\r\n",(char*)OK_MESSAGE,300); |
lukas_formanek | 0:ea088908ad26 | 159 | SendCommand("AT+CIPCLOSE\r\n",(char*)OK_MESSAGE,200); |
lukas_formanek | 0:ea088908ad26 | 160 | // SendCommand("AT+RST\r\n",(char*)OK_MESSAGE,2000); |
lukas_formanek | 0:ea088908ad26 | 161 | SendCommand(serverIpAddress,(char*)OK_MESSAGE,200); |
lukas_formanek | 0:ea088908ad26 | 162 | SendCommand("AT+RST\r\n","ready",1000); |
lukas_formanek | 0:ea088908ad26 | 163 | setServerIp = false; |
lukas_formanek | 0:ea088908ad26 | 164 | } |
lukas_formanek | 0:ea088908ad26 | 165 | if(setWifiSettings) |
lukas_formanek | 0:ea088908ad26 | 166 | { |
lukas_formanek | 0:ea088908ad26 | 167 | // pc.printf("%s",wifiSettings); |
lukas_formanek | 0:ea088908ad26 | 168 | SendCommand("+++",(char*)OK_MESSAGE,700); |
lukas_formanek | 0:ea088908ad26 | 169 | SendCommand("AT\r\n",(char*)OK_MESSAGE,200); |
lukas_formanek | 0:ea088908ad26 | 170 | SendCommand("AT+CIPCLOSE\r\n",(char*)OK_MESSAGE,200); |
lukas_formanek | 0:ea088908ad26 | 171 | SendCommand(wifiSettings,(char*)OK_MESSAGE,1500); |
lukas_formanek | 0:ea088908ad26 | 172 | SendCommand("AT+RST\r\n","ready",1000); |
lukas_formanek | 0:ea088908ad26 | 173 | setWifiSettings = false; |
lukas_formanek | 0:ea088908ad26 | 174 | } |
lukas_formanek | 0:ea088908ad26 | 175 | } |
lukas_formanek | 0:ea088908ad26 | 176 | |
lukas_formanek | 0:ea088908ad26 | 177 | void ESP8266::ClearBuffer() |
lukas_formanek | 0:ea088908ad26 | 178 | { |
lukas_formanek | 0:ea088908ad26 | 179 | memset(buffer, '\0', sizeof(buffer)); |
lukas_formanek | 0:ea088908ad26 | 180 | pt = 0; |
lukas_formanek | 0:ea088908ad26 | 181 | } |
lukas_formanek | 0:ea088908ad26 | 182 | |
lukas_formanek | 0:ea088908ad26 | 183 | void ESP8266::Test() |
lukas_formanek | 0:ea088908ad26 | 184 | { |
lukas_formanek | 0:ea088908ad26 | 185 | wifiUart.printf("+++\r\n"); |
lukas_formanek | 0:ea088908ad26 | 186 | wait(0.1); |
lukas_formanek | 0:ea088908ad26 | 187 | wifiUart.printf("+++\r\n"); |
lukas_formanek | 0:ea088908ad26 | 188 | wait(0.1); |
lukas_formanek | 0:ea088908ad26 | 189 | wifiUart.printf("AT\r\n"); |
lukas_formanek | 0:ea088908ad26 | 190 | wait(0.2); |
lukas_formanek | 0:ea088908ad26 | 191 | wifiUart.printf("AT\r\n"); |
lukas_formanek | 0:ea088908ad26 | 192 | wait(0.2); |
lukas_formanek | 0:ea088908ad26 | 193 | wifiUart.printf("AT\r\n"); |
lukas_formanek | 0:ea088908ad26 | 194 | printf("ATTTTTTTTTTT"); |
lukas_formanek | 0:ea088908ad26 | 195 | wait(0.2); |
lukas_formanek | 0:ea088908ad26 | 196 | // wifiUart.printf("AT+RST\r\n"); |
lukas_formanek | 0:ea088908ad26 | 197 | } |