LoRa Access Point 1.5.2018

Dependencies:   mbed ds3231 SX1276Lib_LoRa_Access_Point

Committer:
lukas_formanek
Date:
Sat May 08 16:23:46 2021 +0000
Revision:
11:376bfcdda0d4
Parent:
10:e62222c46ee9
LoRa_Access_Point

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 10:e62222c46ee9 13 extern time_t epoch_time;
lukas_formanek 5:19b34c4d27a1 14 ESP8266 wifi(WIFI_TX, WIFI_RX, WIFI_RST);
lukas_formanek 0:ea088908ad26 15
lukas_formanek 5:19b34c4d27a1 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 11:376bfcdda0d4 25
lukas_formanek 11:376bfcdda0d4 26 actualizeTime = false;
lukas_formanek 11:376bfcdda0d4 27 hour = 0;
lukas_formanek 11:376bfcdda0d4 28 minute = 0;
lukas_formanek 11:376bfcdda0d4 29 second = 0;
lukas_formanek 11:376bfcdda0d4 30 dayOfWeek = 0;
lukas_formanek 11:376bfcdda0d4 31 date = 0;
lukas_formanek 11:376bfcdda0d4 32 month = 0;
lukas_formanek 11:376bfcdda0d4 33 year = 0;
lukas_formanek 0:ea088908ad26 34 };
lukas_formanek 0:ea088908ad26 35
lukas_formanek 2:0499e1d037a5 36
lukas_formanek 0:ea088908ad26 37 ESP8266::ESP8266(void)
lukas_formanek 2:0499e1d037a5 38 : wifiUart(WIFI_TX,WIFI_RX,BAUDRATE),
lukas_formanek 0:ea088908ad26 39 wifiReset(D7)
lukas_formanek 0:ea088908ad26 40 {
lukas_formanek 0:ea088908ad26 41 ClearBuffer();
lukas_formanek 0:ea088908ad26 42 okResponse = false;
lukas_formanek 0:ea088908ad26 43 receiveResponse = false;
lukas_formanek 0:ea088908ad26 44 setServerIp = false;
lukas_formanek 0:ea088908ad26 45 setWifiSettings = false;
lukas_formanek 11:376bfcdda0d4 46
lukas_formanek 11:376bfcdda0d4 47 actualizeTime = false;
lukas_formanek 11:376bfcdda0d4 48 hour = 0;
lukas_formanek 11:376bfcdda0d4 49 minute = 0;
lukas_formanek 11:376bfcdda0d4 50 second = 0;
lukas_formanek 11:376bfcdda0d4 51 dayOfWeek = 0;
lukas_formanek 11:376bfcdda0d4 52 date = 0;
lukas_formanek 11:376bfcdda0d4 53 month = 0;
lukas_formanek 11:376bfcdda0d4 54 year = 0;
lukas_formanek 0:ea088908ad26 55 };
lukas_formanek 2:0499e1d037a5 56
lukas_formanek 0:ea088908ad26 57
lukas_formanek 0:ea088908ad26 58 void ESP8266::Init()
lukas_formanek 0:ea088908ad26 59 {
lukas_formanek 0:ea088908ad26 60 wifiReset = 0;
lukas_formanek 0:ea088908ad26 61 wait(0.1);
lukas_formanek 0:ea088908ad26 62 wifiReset = 1;
lukas_formanek 2:0499e1d037a5 63 wait(0.1);
lukas_formanek 0:ea088908ad26 64 wifiUart.attach(callback(this,&ESP8266::RxWifiInterrupt), Serial::RxIrq);
lukas_formanek 2:0499e1d037a5 65 ClearBuffer();
lukas_formanek 0:ea088908ad26 66 };
lukas_formanek 0:ea088908ad26 67
lukas_formanek 0:ea088908ad26 68 void ESP8266::RxWifiInterrupt()
lukas_formanek 0:ea088908ad26 69 {
lukas_formanek 5:19b34c4d27a1 70 while (wifiUart.readable()) {
lukas_formanek 0:ea088908ad26 71 char c = wifiUart.getc();
lukas_formanek 0:ea088908ad26 72 // bt.putc(c);
lukas_formanek 0:ea088908ad26 73 buffer[pt++] = c;
lukas_formanek 0:ea088908ad26 74 if(pt >= BUFFER_SIZE - 1)
lukas_formanek 0:ea088908ad26 75 ClearBuffer();
lukas_formanek 0:ea088908ad26 76
lukas_formanek 5:19b34c4d27a1 77 if(c =='\n') {
lukas_formanek 8:5d99fbf255d6 78 // if( strncmp( ( const char* )buffer, response, strlen(response) ) == 0 )
lukas_formanek 8:5d99fbf255d6 79 if (strstr(buffer, response) != NULL)
lukas_formanek 0:ea088908ad26 80 receiveResponse = true;
lukas_formanek 5:19b34c4d27a1 81
lukas_formanek 8:5d99fbf255d6 82 // if( strncmp( ( const char* )buffer, "~~~", 3 ) == 0 )
lukas_formanek 8:5d99fbf255d6 83 if (strstr(buffer, "~~~") != NULL)
lukas_formanek 0:ea088908ad26 84 wifiUart.printf("%s", WIFI_ALIVE_RESPONSE);
lukas_formanek 4:e20eb5efd859 85
lukas_formanek 5:19b34c4d27a1 86 if (strstr(buffer, "0|") != NULL)
lukas_formanek 5:19b34c4d27a1 87 rfm.SendMessage(buffer);
lukas_formanek 11:376bfcdda0d4 88 /*
lukas_formanek 11:376bfcdda0d4 89 if (strstr(buffer, "~TIME~") != NULL)
lukas_formanek 11:376bfcdda0d4 90 convert_time();
lukas_formanek 11:376bfcdda0d4 91 */
lukas_formanek 11:376bfcdda0d4 92
lukas_formanek 5:19b34c4d27a1 93
lukas_formanek 5:19b34c4d27a1 94 /*
lukas_formanek 5:19b34c4d27a1 95 if( strncmp( ( const char* )_responseBuf, "+IPD,", 5 ) == 0 )
lukas_formanek 5:19b34c4d27a1 96 {
lukas_formanek 5:19b34c4d27a1 97 char * pch;
lukas_formanek 5:19b34c4d27a1 98 pch = strtok (_responseBuf,DELIMITER);
lukas_formanek 5:19b34c4d27a1 99 uint8_t i = 0 ;
lukas_formanek 5:19b34c4d27a1 100 while (pch != NULL) {
lukas_formanek 5:19b34c4d27a1 101 if(i == 1)
lukas_formanek 5:19b34c4d27a1 102 bt.printf("%s",pch);
lukas_formanek 5:19b34c4d27a1 103 pch = strtok (NULL, DELIMITER);
lukas_formanek 5:19b34c4d27a1 104 i++;
lukas_formanek 5:19b34c4d27a1 105 }
lukas_formanek 5:19b34c4d27a1 106 }
lukas_formanek 5:19b34c4d27a1 107 */
lukas_formanek 5:19b34c4d27a1 108 /*
lukas_formanek 5:19b34c4d27a1 109 if( strncmp( ( const char* )_responseBuf, response, 4 ) == 0 )
lukas_formanek 5:19b34c4d27a1 110 {
lukas_formanek 5:19b34c4d27a1 111 OkResponse = true;
lukas_formanek 5:19b34c4d27a1 112 // bt.printf("OK received !\r\n");
lukas_formanek 5:19b34c4d27a1 113 }
lukas_formanek 5:19b34c4d27a1 114 */
lukas_formanek 5:19b34c4d27a1 115 /*
lukas_formanek 5:19b34c4d27a1 116 if( strncmp( ( const char* )_responseBuf, ERROR_MESSAGE, 7 ) == 0 )
lukas_formanek 5:19b34c4d27a1 117 {
lukas_formanek 5:19b34c4d27a1 118 // bt.printf("ERROR received !\r\n");
lukas_formanek 5:19b34c4d27a1 119 }
lukas_formanek 5:19b34c4d27a1 120 */
lukas_formanek 0:ea088908ad26 121 ClearBuffer();
lukas_formanek 0:ea088908ad26 122 }
lukas_formanek 0:ea088908ad26 123 }
lukas_formanek 0:ea088908ad26 124 };
lukas_formanek 0:ea088908ad26 125
lukas_formanek 0:ea088908ad26 126 void ESP8266::SendCommand(char* command, char* answer ,int timeoutMs)
lukas_formanek 0:ea088908ad26 127 {
lukas_formanek 0:ea088908ad26 128 receiveResponse = false;
lukas_formanek 0:ea088908ad26 129 response = answer;
lukas_formanek 0:ea088908ad26 130 okResponse = false;
lukas_formanek 0:ea088908ad26 131 responseTimer.reset();
lukas_formanek 0:ea088908ad26 132 wifiUart.printf("%s",command);
lukas_formanek 0:ea088908ad26 133 responseTimer.start();
lukas_formanek 5:19b34c4d27a1 134 while(responseTimer.read_ms() < timeoutMs) {
lukas_formanek 5:19b34c4d27a1 135 if(receiveResponse) {
lukas_formanek 2:0499e1d037a5 136 bt.Send(response);
lukas_formanek 0:ea088908ad26 137 responseTimer.stop();
lukas_formanek 0:ea088908ad26 138 return;
lukas_formanek 0:ea088908ad26 139 }
lukas_formanek 0:ea088908ad26 140 }
lukas_formanek 0:ea088908ad26 141 responseTimer.stop();
lukas_formanek 0:ea088908ad26 142 }
lukas_formanek 0:ea088908ad26 143
lukas_formanek 0:ea088908ad26 144 void ESP8266::SetIpOfServer(char* command)
lukas_formanek 0:ea088908ad26 145 {
lukas_formanek 0:ea088908ad26 146 memcpy(serverIpAddress, command, sizeof(serverIpAddress));
lukas_formanek 5:19b34c4d27a1 147 setServerIp = true;
lukas_formanek 0:ea088908ad26 148 };
lukas_formanek 0:ea088908ad26 149
lukas_formanek 0:ea088908ad26 150 void ESP8266::SetWiFiConnection(char* command)
lukas_formanek 0:ea088908ad26 151 {
lukas_formanek 0:ea088908ad26 152 memcpy(wifiSettings, command, sizeof(wifiSettings));
lukas_formanek 0:ea088908ad26 153 setWifiSettings = true;
lukas_formanek 0:ea088908ad26 154 };
lukas_formanek 0:ea088908ad26 155
lukas_formanek 0:ea088908ad26 156 void ESP8266::SendMessage(char message[])
lukas_formanek 0:ea088908ad26 157 {
lukas_formanek 10:e62222c46ee9 158 // pc.printf("%.19s ", ctime(&epoch_time));
lukas_formanek 11:376bfcdda0d4 159 // pc.printf("%s",actual_time);
lukas_formanek 11:376bfcdda0d4 160 // pc.printf("%s",rtcClock.GetTime());
lukas_formanek 11:376bfcdda0d4 161 pc.printf("%s\r\n",message);
lukas_formanek 11:376bfcdda0d4 162 wifiUart.printf("%s\r\n",message);
lukas_formanek 5:19b34c4d27a1 163 };
lukas_formanek 0:ea088908ad26 164
lukas_formanek 0:ea088908ad26 165 void ESP8266::CheckSettings()
lukas_formanek 0:ea088908ad26 166 {
lukas_formanek 5:19b34c4d27a1 167 if(setServerIp && setWifiSettings) {
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(serverIpAddress,(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 setServerIp = false;
lukas_formanek 0:ea088908ad26 175 setWifiSettings = false;
lukas_formanek 0:ea088908ad26 176 }
lukas_formanek 5:19b34c4d27a1 177 if(setServerIp) {
lukas_formanek 0:ea088908ad26 178 SendCommand("+++",(char*)OK_MESSAGE,700);
lukas_formanek 0:ea088908ad26 179 SendCommand("AT\r\n",(char*)OK_MESSAGE,300);
lukas_formanek 0:ea088908ad26 180 SendCommand("AT+CIPCLOSE\r\n",(char*)OK_MESSAGE,200);
lukas_formanek 0:ea088908ad26 181 SendCommand(serverIpAddress,(char*)OK_MESSAGE,200);
lukas_formanek 0:ea088908ad26 182 SendCommand("AT+RST\r\n","ready",1000);
lukas_formanek 0:ea088908ad26 183 setServerIp = false;
lukas_formanek 0:ea088908ad26 184 }
lukas_formanek 5:19b34c4d27a1 185 if(setWifiSettings) {
lukas_formanek 0:ea088908ad26 186 SendCommand("+++",(char*)OK_MESSAGE,700);
lukas_formanek 0:ea088908ad26 187 SendCommand("AT\r\n",(char*)OK_MESSAGE,200);
lukas_formanek 0:ea088908ad26 188 SendCommand("AT+CIPCLOSE\r\n",(char*)OK_MESSAGE,200);
lukas_formanek 0:ea088908ad26 189 SendCommand(wifiSettings,(char*)OK_MESSAGE,1500);
lukas_formanek 0:ea088908ad26 190 SendCommand("AT+RST\r\n","ready",1000);
lukas_formanek 0:ea088908ad26 191 setWifiSettings = false;
lukas_formanek 0:ea088908ad26 192 }
lukas_formanek 5:19b34c4d27a1 193 };
lukas_formanek 0:ea088908ad26 194
lukas_formanek 0:ea088908ad26 195 void ESP8266::ClearBuffer()
lukas_formanek 0:ea088908ad26 196 {
lukas_formanek 0:ea088908ad26 197 memset(buffer, '\0', sizeof(buffer));
lukas_formanek 0:ea088908ad26 198 pt = 0;
lukas_formanek 5:19b34c4d27a1 199 };
lukas_formanek 5:19b34c4d27a1 200
lukas_formanek 5:19b34c4d27a1 201 void ESP8266::ConfirmReceivedAck(uint8_t from)
lukas_formanek 5:19b34c4d27a1 202 {
lukas_formanek 5:19b34c4d27a1 203 wifiUart.printf("ACK|%c\r\n",from);
lukas_formanek 5:19b34c4d27a1 204 };
lukas_formanek 0:ea088908ad26 205
lukas_formanek 0:ea088908ad26 206 void ESP8266::Test()
lukas_formanek 0:ea088908ad26 207 {
lukas_formanek 0:ea088908ad26 208 wifiUart.printf("+++\r\n");
lukas_formanek 0:ea088908ad26 209 wait(0.1);
lukas_formanek 0:ea088908ad26 210 wifiUart.printf("AT\r\n");
lukas_formanek 0:ea088908ad26 211 wait(0.2);
lukas_formanek 0:ea088908ad26 212 wifiUart.printf("AT\r\n");
lukas_formanek 0:ea088908ad26 213 wait(0.2);
lukas_formanek 0:ea088908ad26 214 wifiUart.printf("AT\r\n");
lukas_formanek 0:ea088908ad26 215 printf("ATTTTTTTTTTT");
lukas_formanek 0:ea088908ad26 216 wait(0.2);
lukas_formanek 5:19b34c4d27a1 217 };
lukas_formanek 11:376bfcdda0d4 218
lukas_formanek 11:376bfcdda0d4 219 void ESP8266::convert_time()
lukas_formanek 11:376bfcdda0d4 220 {
lukas_formanek 11:376bfcdda0d4 221 pc.printf("%s\r\n", buffer);
lukas_formanek 11:376bfcdda0d4 222 char * pch;
lukas_formanek 11:376bfcdda0d4 223 uint8_t state=0;
lukas_formanek 11:376bfcdda0d4 224 pch = strtok (buffer,DELIMITER);
lukas_formanek 11:376bfcdda0d4 225 while (pch != NULL) {
lukas_formanek 11:376bfcdda0d4 226 switch(state) {
lukas_formanek 11:376bfcdda0d4 227 case 0 :
lukas_formanek 11:376bfcdda0d4 228 wifi.dayOfWeek=atoi(pch);
lukas_formanek 11:376bfcdda0d4 229 wifi.dayOfWeek++;
lukas_formanek 11:376bfcdda0d4 230 state=1;
lukas_formanek 11:376bfcdda0d4 231 // pc.printf("converted day of week : %d \r\n",dayOfWeek);
lukas_formanek 11:376bfcdda0d4 232 break;
lukas_formanek 11:376bfcdda0d4 233
lukas_formanek 11:376bfcdda0d4 234 case 1 :
lukas_formanek 11:376bfcdda0d4 235 wifi.date=atoi(pch);
lukas_formanek 11:376bfcdda0d4 236 state=2;
lukas_formanek 11:376bfcdda0d4 237 // pc.printf("converted date : %d \r\n",date);
lukas_formanek 11:376bfcdda0d4 238 break;
lukas_formanek 11:376bfcdda0d4 239
lukas_formanek 11:376bfcdda0d4 240 case 2 :
lukas_formanek 11:376bfcdda0d4 241 wifi.month=atoi(pch);
lukas_formanek 11:376bfcdda0d4 242 state=3;
lukas_formanek 11:376bfcdda0d4 243 break;
lukas_formanek 11:376bfcdda0d4 244
lukas_formanek 11:376bfcdda0d4 245 case 3 :
lukas_formanek 11:376bfcdda0d4 246 wifi.year=atoi(pch);
lukas_formanek 11:376bfcdda0d4 247 state=4;
lukas_formanek 11:376bfcdda0d4 248 break;
lukas_formanek 11:376bfcdda0d4 249
lukas_formanek 11:376bfcdda0d4 250 case 4 :
lukas_formanek 11:376bfcdda0d4 251 wifi.hour=atoi(pch);
lukas_formanek 11:376bfcdda0d4 252 state=5;
lukas_formanek 11:376bfcdda0d4 253 break;
lukas_formanek 11:376bfcdda0d4 254
lukas_formanek 11:376bfcdda0d4 255 case 5 :
lukas_formanek 11:376bfcdda0d4 256 wifi.minute=atoi(pch);
lukas_formanek 11:376bfcdda0d4 257 state=6;
lukas_formanek 11:376bfcdda0d4 258 break;
lukas_formanek 11:376bfcdda0d4 259
lukas_formanek 11:376bfcdda0d4 260 case 6 :
lukas_formanek 11:376bfcdda0d4 261 wifi.second=atoi(pch);
lukas_formanek 11:376bfcdda0d4 262 state=7;
lukas_formanek 11:376bfcdda0d4 263 break;
lukas_formanek 11:376bfcdda0d4 264
lukas_formanek 11:376bfcdda0d4 265 default:
lukas_formanek 11:376bfcdda0d4 266 state=7;
lukas_formanek 11:376bfcdda0d4 267 break;
lukas_formanek 11:376bfcdda0d4 268 }
lukas_formanek 11:376bfcdda0d4 269 pch = strtok (NULL, DELIMITER);
lukas_formanek 11:376bfcdda0d4 270 }
lukas_formanek 11:376bfcdda0d4 271 actualizeTime = true ;
lukas_formanek 11:376bfcdda0d4 272
lukas_formanek 11:376bfcdda0d4 273 };
lukas_formanek 11:376bfcdda0d4 274
lukas_formanek 11:376bfcdda0d4 275 void ESP8266::getServerDateTime(int *w, int *d, int *mo, int *y, int *h, int *m, int *s)
lukas_formanek 11:376bfcdda0d4 276 {
lukas_formanek 11:376bfcdda0d4 277 /*
lukas_formanek 11:376bfcdda0d4 278 *w = wifi.dayOfWeek;
lukas_formanek 11:376bfcdda0d4 279 *d = wifi.date;
lukas_formanek 11:376bfcdda0d4 280 *mo = month;
lukas_formanek 11:376bfcdda0d4 281 *y = year;
lukas_formanek 11:376bfcdda0d4 282 *h = hour;
lukas_formanek 11:376bfcdda0d4 283 *m = minute;
lukas_formanek 11:376bfcdda0d4 284 *s = second;
lukas_formanek 11:376bfcdda0d4 285 */
lukas_formanek 11:376bfcdda0d4 286 *w = wifi.dayOfWeek;
lukas_formanek 11:376bfcdda0d4 287 *d = wifi.date;
lukas_formanek 11:376bfcdda0d4 288 *mo = wifi.month;
lukas_formanek 11:376bfcdda0d4 289 *y = wifi.year;
lukas_formanek 11:376bfcdda0d4 290 *h = wifi.hour;
lukas_formanek 11:376bfcdda0d4 291 *m = wifi.minute;
lukas_formanek 11:376bfcdda0d4 292 *s = wifi.second;
lukas_formanek 11:376bfcdda0d4 293
lukas_formanek 11:376bfcdda0d4 294 };
lukas_formanek 11:376bfcdda0d4 295
lukas_formanek 11:376bfcdda0d4 296 bool ESP8266::actualizeActualTime()
lukas_formanek 11:376bfcdda0d4 297 {
lukas_formanek 11:376bfcdda0d4 298 if(actualizeTime)
lukas_formanek 11:376bfcdda0d4 299 {
lukas_formanek 11:376bfcdda0d4 300 actualizeTime = false;
lukas_formanek 11:376bfcdda0d4 301 return true;
lukas_formanek 11:376bfcdda0d4 302 }
lukas_formanek 11:376bfcdda0d4 303 return false;
lukas_formanek 11:376bfcdda0d4 304 };