-
-
Notifications
You must be signed in to change notification settings - Fork 345
/
application.cpp
133 lines (107 loc) · 3.35 KB
/
application.cpp
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
121
122
123
124
125
126
127
128
129
130
131
132
133
#include <SmingCore.h>
#include <JsonObjectStream.h>
// If you want, you can define WiFi settings globally in Eclipse Environment Variables
#ifndef WIFI_SSID
#define WIFI_SSID "PleaseEnterSSID" // Put your SSID and password here
#define WIFI_PWD "PleaseEnterPass"
#endif
namespace
{
HttpServer server;
FtpServer ftp;
// Set input GPIO pins here
const uint8_t inputs[] = {5, 2};
void onIndex(HttpRequest& request, HttpResponse& response)
{
TemplateFileStream* tmpl = new TemplateFileStream("index.html");
auto& vars = tmpl->variables();
String gpioList;
for(unsigned i = 0; i < ARRAY_SIZE(inputs); ++i) {
String s = F("<span id=\"gpio{id}\" class=\"label label-default\">GPIO{gpio}</span> ");
s.replace("{id}", String(i));
s.replace("{gpio}", String(inputs[i]));
gpioList += s;
}
vars["gpio_list"] = gpioList;
response.sendNamedStream(tmpl); // this template object will be deleted automatically
}
void onFile(HttpRequest& request, HttpResponse& response)
{
String file = request.uri.getRelativePath();
if(file[0] == '.')
response.code = HTTP_STATUS_FORBIDDEN;
else {
response.setCache(86400, true); // It's important to use cache for better performance.
response.sendFile(file);
}
}
void onAjaxInput(HttpRequest& request, HttpResponse& response)
{
JsonObjectStream* stream = new JsonObjectStream();
JsonObject json = stream->getRoot();
json["status"] = (bool)true;
String stringKey = F("StringKey");
String stringValue = F("StringValue");
json[stringKey] = stringValue;
for(int i = 0; i < 11; i++) {
String desiredString = F("sensor_") + String(i);
json[desiredString] = desiredString;
}
JsonObject gpio = json.createNestedObject("gpio");
for(unsigned i = 0; i < ARRAY_SIZE(inputs); ++i) {
gpio[String(i)] = digitalRead(inputs[i]);
}
response.sendDataStream(stream, MIME_JSON);
}
void onAjaxFrequency(HttpRequest& request, HttpResponse& response)
{
int freq = request.getQueryParameter("value").toInt();
System.setCpuFrequency(CpuFrequency(freq));
JsonObjectStream* stream = new JsonObjectStream();
JsonObject json = stream->getRoot();
json["status"] = true;
json["value"] = (int)System.getCpuFrequency();
response.sendDataStream(stream, MIME_JSON);
}
void startWebServer()
{
server.listen(80);
server.paths.set("/", onIndex);
server.paths.set("/ajax/input", onAjaxInput);
server.paths.set("/ajax/frequency", onAjaxFrequency);
server.paths.setDefault(onFile);
Serial << endl
<< _F("=== WEB SERVER STARTED ===") << endl
<< WifiStation.getIP() << endl
<< _F("==========================") << endl
<< endl;
}
void startFTP()
{
if(!fileExist("index.html"))
fileSetContent("index.html",
F("<h3>Please connect to FTP and upload files from folder 'web/build' (details in code)</h3>"));
// Start FTP server
ftp.listen(21);
ftp.addUser("me", "123"); // FTP account
}
void gotIP(IpAddress ip, IpAddress netmask, IpAddress gateway)
{
startFTP();
startWebServer();
}
} // namespace
void init()
{
spiffs_mount(); // Mount file system, in order to work with files
Serial.begin(SERIAL_BAUD_RATE); // 115200 by default
Serial.systemDebugOutput(true); // Enable debug output to serial
WifiStation.enable(true);
WifiStation.config(WIFI_SSID, WIFI_PWD);
WifiAccessPoint.enable(false);
for(auto pin : inputs) {
pinMode(pin, INPUT);
}
// Run our method when station was connected to AP
WifiEvents.onStationGotIP(gotIP);
}