-
Notifications
You must be signed in to change notification settings - Fork 0
/
SmartGrid_ESP.ino
120 lines (90 loc) · 3.2 KB
/
SmartGrid_ESP.ino
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
#include <ESP8266WiFi.h>
#include <EasyTransfer.h>
#include <ESP8266WebServer.h>
#include <WiFiClient.h>
/* Arguments sizes and Timeout constants */
#define AutoReset_Timeout 500 // If no device connects for this milliseconds, ESP will reset 'Arguments'
#define Argument_Size 6 // Number of arguments to be fetch and store in global 'Arguments'
#define SensorBuffer_Size 100 // Max number of characters to be sent back to remote device
ESP8266WebServer MyServer(80);
WiFiClient MyClient;
const char *SG_SsID = "SG_395002"; // SsID should not be more than 15 chars
const char *SG_Password = "12345678";
const char *AP_SsID = "CLSYS"; // SsID should not be more than 15 chars
const char *AP_Password = "abcd1234";
EasyTransfer ETin, ETout;
struct SEND_DATA_STRUCTURE
{
unsigned long Arguments[Argument_Size];
};
/* 'RECEIVE_DATA_STRUCTURE' MUST BE IDENTICAL ON GATEWAY SIDE (WITH NAME OF 'SEND_DATA_STRUCTURE') */
struct RECEIVE_DATA_STRUCTURE
{
char ReplyBuffer_100[SensorBuffer_Size];
byte MODE;
};
SEND_DATA_STRUCTURE OutgoingData;
RECEIVE_DATA_STRUCTURE IncomingData;
uint8_t C1;
unsigned long LastAccessTime; // To reset 'Arguments' if no connection was made in last AutoReset_Timeout milliseconds.
/* Handles index or root requests */
void HandleRoot()
{
MyServer.sendHeader("Cache-Control", "no-cache, no-store, must-revalidate", false);
MyServer.sendHeader("Pragma", "no-cache", false);
MyServer.sendHeader("Expires", "1000", false);
MyServer.send(200, "text/plain", "https://github.com/AnuragVasanwala/Smart-Grid/");
}
/* Handles maneuver requests */
void HandleManeuver()
{
/* Parse arguments and store it to Arguments byte array */
for (C1 = 0; (C1 < Argument_Size) && (C1 < MyServer.args()); C1++)
{
/* Convert string argument value to equivalent byte */
OutgoingData.Arguments[C1] = (unsigned long)(MyServer.arg(C1).toInt());
}
/* Prepare html headers to instruct remote device to not to cache page */
MyServer.sendHeader("Cache-Control", "no-cache, no-store, must-revalidate", false);
MyServer.sendHeader("Pragma", "no-cache", false);
MyServer.sendHeader("Expires", "0", false);
/* Send data to remote device */
MyServer.send(200, "text/plain", IncomingData.ReplyBuffer_100);
LastAccessTime = millis();
}
void setup()
{
/* Wait for a one and half second to make ESP stable */
delay(1500);
Serial.begin(1024);
WiFi.mode(WIFI_STA);
WiFi.begin(AP_SsID, AP_Password);
/////////////////////////////////////////////////////////////////////
// WiFi.mode(WIFI_AP_STA);
// WiFi.softAP(SG_SsID, SG_Password);
MyServer.on("/DeviceInfo", HandleRoot);
MyServer.on("/DeviceController", HandleManeuver);
MyServer.begin();
ETin.begin(details(IncomingData), &Serial);
ETout.begin(details(OutgoingData), &Serial);
}
IPAddress server(192, 168, 1, 103); // TCPlsr
void loop()
{
MyServer.handleClient();
if (ETin.receiveData())
{
if (IncomingData.MODE == 1)
{
if (MyClient.connect(server, 8080))
{
MyClient.print(IncomingData.ReplyBuffer_100);
while (MyClient.available()) {
String line = MyClient.readStringUntil('\r');
}
}
}
ETout.sendData();
}
delay(500);
}