1
1
#include < ESP8266WiFi.h>
2
2
#include < ESP8266mDNS.h>
3
- #include < WiFiUdp.h>
4
3
5
4
const char * host = " esp8266-ota" ;
6
5
const char * ssid = " **********" ;
7
6
const char * pass = " **********" ;
8
- const uint16_t aport = 8266 ;
7
+ const uint16_t ota_port = 8266 ;
8
+ const char * ota_pass = " 1234" ;
9
9
10
- WiFiServer TelnetServer (aport);
11
- WiFiClient Telnet;
12
10
WiFiUDP OTA;
11
+ WiFiServer MonitorServer (ota_port);
12
+ WiFiClient Monitor;
13
13
14
14
void setup () {
15
15
Serial.begin (115200 );
16
16
Serial.println (" " );
17
- Serial.println (" Arduino OTA Test " );
17
+ Serial.println (" Bare Minimum Arduino OTA" );
18
18
19
19
Serial.printf (" Sketch size: %u\n " , ESP.getSketchSize ());
20
20
Serial.printf (" Free size: %u\n " , ESP.getFreeSketchSpace ());
21
21
22
22
WiFi.begin (ssid, pass);
23
23
if (WiFi.waitForConnectResult () == WL_CONNECTED){
24
24
MDNS.begin (host);
25
- MDNS.addService ( " arduino " , " tcp " , aport );
26
- OTA.begin (aport );
27
- TelnetServer .begin ();
28
- TelnetServer .setNoDelay (true );
25
+ MDNS.enableArduino (ota_port, true );
26
+ OTA.begin (ota_port );
27
+ MonitorServer .begin ();
28
+ MonitorServer .setNoDelay (true );
29
29
Serial.print (" IP address: " );
30
30
Serial.println (WiFi.localIP ());
31
+ } else {
32
+ Serial.println (" WiFi Connect Failed" );
33
+ delay (10000 );
34
+ ESP.reset ();
31
35
}
32
36
}
33
37
34
38
void loop () {
35
- // OTA Sketch
36
39
if (OTA.parsePacket ()) {
37
40
IPAddress remote = OTA.remoteIP ();
41
+ String pass = OTA.readStringUntil (' ' );
38
42
int cmd = OTA.parseInt ();
39
43
int port = OTA.parseInt ();
40
44
int size = OTA.parseInt ();
41
-
45
+
46
+ if (!pass.equals (String (ota_pass))){
47
+ Serial.println (" ERROR: Wrong Password" );
48
+ return ;
49
+ }
50
+
42
51
Serial.print (" Update Start: ip:" );
43
52
Serial.print (remote);
44
53
Serial.printf (" , port:%d, size:%d\n " , port, size);
45
54
uint32_t startTime = millis ();
46
55
47
- WiFiUDP::stopAll ();
48
-
49
56
if (!Update.begin (size)){
50
- Serial. println ( " Update Begin Error " );
57
+ Update. printError (Serial );
51
58
return ;
52
59
}
53
60
61
+ WiFiUDP::stopAll ();
62
+ WiFiClient::stopAll ();
63
+
54
64
WiFiClient client;
55
65
if (client.connect (remote, port)) {
56
-
57
66
uint32_t written;
58
67
while (!Update.isFinished ()){
59
68
written = Update.write (client);
60
69
if (written > 0 ) client.print (written, DEC);
61
70
}
62
- Serial.setDebugOutput (false );
63
-
64
71
if (Update.end ()){
65
72
client.println (" OK" );
66
73
Serial.printf (" Update Success: %u\n Rebooting...\n " , millis () - startTime);
@@ -74,28 +81,27 @@ void loop() {
74
81
}
75
82
}
76
83
// IDE Monitor (connected to Serial)
77
- if (TelnetServer .hasClient ()){
78
- if (!Telnet || !Telnet .connected ()){
79
- if (Telnet) Telnet .stop ();
80
- Telnet = TelnetServer .available ();
84
+ if (MonitorServer .hasClient ()){
85
+ if (!Monitor || !Monitor .connected ()){
86
+ if (Monitor) Monitor .stop ();
87
+ Monitor = MonitorServer .available ();
81
88
} else {
82
- WiFiClient toKill = TelnetServer.available ();
83
- toKill.stop ();
89
+ MonitorServer.available ().stop ();
84
90
}
85
91
}
86
- if (Telnet && Telnet .connected () && Telnet .available ()){
87
- while (Telnet .available ())
88
- Serial.write (Telnet .read ());
92
+ if (Monitor && Monitor .connected () && Monitor .available ()){
93
+ while (Monitor .available ())
94
+ Serial.write (Monitor .read ());
89
95
}
90
96
if (Serial.available ()){
91
97
size_t len = Serial.available ();
92
98
uint8_t * sbuf = (uint8_t *)malloc (len);
93
99
Serial.readBytes (sbuf, len);
94
- if (Telnet && Telnet .connected ()){
95
- Telnet .write ((uint8_t *)sbuf, len);
96
- yield ( );
100
+ if (Monitor && Monitor .connected ()){
101
+ Monitor .write ((uint8_t *)sbuf, len);
102
+ delay ( 0 );
97
103
}
98
104
free (sbuf);
99
105
}
100
- delay (1 );
106
+ delay (0 );
101
107
}
0 commit comments