9
9
#include < WiFiClient.h>
10
10
#include < ESP8266WebServer.h>
11
11
12
+ #include " settings.h"
12
13
#include " mainPage.h"
13
14
14
- #define CLOCK_NAME " ESP-CLOCK"
15
- #define WIFI_AP_NAME CLOCK_NAME
16
-
17
15
#define SETUP_PIN 3
18
16
19
17
#define MODE_SETUP 0
20
18
#define MODE_CLOCK 1
21
19
int clockMode;
22
- time_t syncInterval = 3600 ;
23
20
24
21
ESP8266WebServer server (80 );
25
22
26
- String clockName = " " ;
27
- String w_ssid;
28
- String w_psk;
29
23
String httpUpdateResponse;
30
- long timezone ;
31
- IPAddress timeServer (129 , 6 , 15 , 28 );
24
+
32
25
time_t prevDisplay = 0 ;
33
26
34
27
void handleRoot () {
35
28
String s = MAIN_page;
36
- s.replace (" @@SSID@@" , w_ssid );
37
- s.replace (" @@PSK@@" , w_psk );
38
- s.replace (" @@TZ@@" , String (timezone ));
29
+ s.replace (" @@SSID@@" , settings. ssid );
30
+ s.replace (" @@PSK@@" , settings. psk );
31
+ s.replace (" @@TZ@@" , String (settings. timezone ));
39
32
s.replace (" @@HOUR@@" , String (hour ()));
40
33
s.replace (" @@MIN@@" , String (minute ()));
41
- s.replace (" @@NTPSRV@@" , ipToString (timeServer) );
42
- s.replace (" @@NTPINT@@" , String (syncInterval ));
34
+ s.replace (" @@NTPSRV@@" , settings. timeserver );
35
+ s.replace (" @@NTPINT@@" , String (settings. interval ));
43
36
s.replace (" @@SYNCSTATUS@@" , timeStatus () == timeSet ? " OK" : " Overdue" );
44
- s.replace (" @@CLOCKNAME@@" , clockName );
37
+ s.replace (" @@CLOCKNAME@@" , settings. name );
45
38
s.replace (" @@UPDATERESPONSE@@" , httpUpdateResponse);
46
39
httpUpdateResponse = " " ;
47
40
server.send (200 , " text/html" , s);
@@ -51,31 +44,34 @@ void handleForm() {
51
44
String update_wifi = server.arg (" update_wifi" );
52
45
String t_ssid = server.arg (" ssid" );
53
46
String t_psk = server.arg (" psk" );
54
- timeServer = parseIP (server.arg (" ntpsrv" ));
47
+ String t_timeserver = server.arg (" ntpsrv" );
48
+ t_timeserver.toCharArray (settings.timeserver , EEPROM_TIMESERVER_LENGTH, 0 );
55
49
if (update_wifi == " 1" ) {
56
- w_ssid = t_ssid;
57
- w_psk = t_psk;
50
+ settings. ssid = t_ssid;
51
+ settings. psk = t_psk;
58
52
}
59
53
String tz = server.arg (" timezone" );
60
54
61
55
if (tz.length ()) {
62
- timezone = tz.toInt ();
56
+ settings. timezone = tz.toInt ();
63
57
}
64
58
65
59
time_t newTime = getNtpTime ();
66
60
if (newTime) {
67
61
setTime (newTime);
68
62
}
69
63
String syncInt = server.arg (" ntpint" );
70
- syncInterval = syncInt.toInt ();
64
+ settings.interval = syncInt.toInt ();
65
+
66
+ settings.name = server.arg (" clockname" );
67
+ settings.name .replace (" +" , " " );
71
68
72
- clockName = server.arg (" clockname" );
73
69
httpUpdateResponse = " The configuration was updated." ;
74
70
75
71
server.sendHeader (" Location" , " /" );
76
72
server.send (302 , " text/plain" , " Moved" );
77
73
78
- saveSettings ();
74
+ settings. Save ();
79
75
if (update_wifi == " 1" ) {
80
76
delay (500 );
81
77
setupWiFi ();
@@ -107,11 +103,11 @@ void loop() {
107
103
}
108
104
109
105
void setupWiFi () {
110
- readSettings ();
106
+ settings. Load ();
111
107
// Wait up to 5s for GPIO0 to go low to enter AP/setup mode.
112
108
displayBusy (0 );
113
109
while (millis () < 5000 ) {
114
- if (digitalRead (SETUP_PIN) == 0 || !w_ssid .length ()) {
110
+ if (digitalRead (SETUP_PIN) == 0 || !settings. ssid .length ()) {
115
111
stopDisplayBusy ();
116
112
return setupAP ();
117
113
}
@@ -121,103 +117,6 @@ void setupWiFi() {
121
117
setupSTA ();
122
118
}
123
119
124
- #define EEPROM_WIFI_SIZE 512
125
- #define EEPROM_MAGIC " NtPc"
126
- #define EEPROM_MAGIC_OFFSET 0
127
- #define EEPROM_MAGIC_LENGTH 4
128
- #define EEPROM_SSID_OFFSET EEPROM_MAGIC_OFFSET + EEPROM_MAGIC_LENGTH
129
- #define EEPROM_SSID_LENGTH 32
130
- #define EEPROM_PSK_OFFSET EEPROM_SSID_OFFSET + EEPROM_SSID_LENGTH
131
- #define EEPROM_PSK_LENGTH 64
132
- #define EEPROM_TZ_OFFSET EEPROM_PSK_OFFSET + EEPROM_PSK_LENGTH
133
- #define EEPROM_TIMESERVER_OFFSET EEPROM_TZ_OFFSET + 1
134
- #define EEPROM_TIMESERVER_LENGTH 4
135
- #define EEPROM_INTERVAL_OFFSET EEPROM_TIMESERVER_OFFSET + EEPROM_TIMESERVER_LENGTH
136
- #define EEPROM_INTERVAL_LENGTH 2
137
- #define EEPROM_NAME_OFFSET EEPROM_INTERVAL_OFFSET + EEPROM_INTERVAL_LENGTH
138
- #define EEPROM_NAME_LENGTH 32
139
-
140
- void readSettings () {
141
- EEPROM.begin (EEPROM_WIFI_SIZE);
142
- // Read the magic header and validate it.
143
- String magic;
144
- for (int i = 0 ; i < EEPROM_MAGIC_LENGTH ; i++) {
145
- magic += char (EEPROM.read (EEPROM_MAGIC_OFFSET + i));
146
- }
147
- if (magic != EEPROM_MAGIC) return ; // Invalid settings.
148
- w_ssid = " " ;
149
- w_psk = " " ;
150
- for (int i = EEPROM_SSID_OFFSET ; i < EEPROM_SSID_LENGTH ; i++) {
151
- char c = char (EEPROM.read (i));
152
- if (c) {
153
- w_ssid += c;
154
- }
155
- }
156
- for (int i = EEPROM_PSK_OFFSET ; i < EEPROM_PSK_LENGTH ; i++) {
157
- char c = char (EEPROM.read (i));
158
- if (c) {
159
- w_psk += c;
160
- }
161
- }
162
- timezone = long (EEPROM.read (EEPROM_TZ_OFFSET));
163
- uint32_t ntpAddr;
164
- ntpAddr = EEPROM.read (EEPROM_TIMESERVER_OFFSET) << 24 ;
165
- ntpAddr |= uint32_t (EEPROM.read (EEPROM_TIMESERVER_OFFSET+1 )) << 16 ;
166
- ntpAddr |= uint32_t (EEPROM.read (EEPROM_TIMESERVER_OFFSET+2 )) << 8 ;
167
- ntpAddr |= uint32_t (EEPROM.read (EEPROM_TIMESERVER_OFFSET+3 ));
168
- if (ntpAddr > 0 ) {
169
- timeServer = IPAddress (ntpAddr);
170
- }
171
- syncInterval;
172
- syncInterval = time_t (EEPROM.read (EEPROM_INTERVAL_OFFSET)) << 8 ;
173
- syncInterval |= EEPROM.read (EEPROM_INTERVAL_OFFSET+1 );
174
-
175
- clockName = " " ;
176
- for (int i = 0 ; i < EEPROM_NAME_LENGTH ; i++) {
177
- char c = EEPROM.read (EEPROM_NAME_OFFSET + i);
178
- if (c) {
179
- clockName += c;
180
- }
181
- }
182
- clockName.replace (" +" , " " );
183
- EEPROM.end ();
184
- }
185
-
186
- void saveSettings () {
187
- EEPROM.begin (EEPROM_WIFI_SIZE);
188
- // Zero the eeprom.
189
- for (int i = 0 ; i < EEPROM_WIFI_SIZE ; i++) {
190
- EEPROM.write (i, 0 );
191
- }
192
- // Write the magic header.
193
- for (int i = 0 ; i < EEPROM_MAGIC_LENGTH ; i++) {
194
- EEPROM.write (EEPROM_MAGIC_OFFSET + i, EEPROM_MAGIC[i]);
195
- }
196
- // Write the SSID.
197
- for (int i = 0 ; i < w_ssid.length () ; i++) {
198
- EEPROM.write (i + EEPROM_SSID_OFFSET, w_ssid.charAt (i));
199
- }
200
- // Write the PSK.
201
- for (int i = 0 ; i < w_psk.length () ; i++) {
202
- EEPROM.write (i + EEPROM_PSK_OFFSET, w_psk.charAt (i));
203
- }
204
- // Write the TZ offset.
205
- EEPROM.write (EEPROM_TZ_OFFSET, timezone );
206
- // Write the timeserver IP.
207
- EEPROM.write (EEPROM_TIMESERVER_OFFSET, timeServer >> 24 );
208
- EEPROM.write (EEPROM_TIMESERVER_OFFSET+1 , (timeServer >> 16 ) & 0xff );
209
- EEPROM.write (EEPROM_TIMESERVER_OFFSET+2 , (timeServer >> 8 ) & 0xff );
210
- EEPROM.write (EEPROM_TIMESERVER_OFFSET+3 , timeServer & 0xff );
211
- // Write the interval.
212
- EEPROM.write (EEPROM_INTERVAL_OFFSET, (syncInterval >> 8 ) & 0xff );
213
- EEPROM.write (EEPROM_INTERVAL_OFFSET+1 , syncInterval & 0xff );
214
- // Write the clock name.
215
- for (int i = 0 ; i < clockName.length () ; i++) {
216
- EEPROM.write (EEPROM_NAME_OFFSET + i, clockName.charAt (i));
217
- }
218
- EEPROM.end ();
219
- }
220
-
221
120
void setupSTA ()
222
121
{
223
122
char ssid[32 ];
@@ -228,9 +127,9 @@ void setupSTA()
228
127
229
128
clockMode = MODE_CLOCK;
230
129
WiFi.mode (WIFI_STA);
231
- w_ssid .toCharArray (ssid, 32 );
232
- w_psk .toCharArray (psk, 64 );
233
- if (w_psk .length ()) {
130
+ settings. ssid .toCharArray (ssid, 32 );
131
+ settings. psk .toCharArray (psk, 64 );
132
+ if (settings. psk .length ()) {
234
133
WiFi.begin (ssid, psk);
235
134
} else {
236
135
WiFi.begin (ssid);
0 commit comments