Skip to content

Commit 79c2042

Browse files
John DoeJohn Doe
John Doe
authored and
John Doe
committed
Initial Upload From IDE
For Test ONLY
1 parent 760cb5b commit 79c2042

File tree

5 files changed

+149
-7
lines changed

5 files changed

+149
-7
lines changed

hardware/esp8266com/esp8266/boards.txt

+17-5
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
menu.UploadSpeed=Upload Speed
22
menu.CpuFrequency=CPU Frequency
33
menu.FlashSize=Flash Size
4+
menu.FlashMode=Flash Mode
45
menu.FlashFreq=Flash Frequency
6+
menu.UploadTool=Upload Using
57

68
##############################################################
79
generic.name=Generic ESP8266 Module
@@ -23,11 +25,26 @@ generic.build.variant=generic
2325
generic.build.flash_mode=qio
2426
generic.build.spiffs_pagesize=256
2527

28+
generic.menu.UploadTool.esptool=Serial
29+
generic.menu.UploadTool.esptool.upload.tool=esptool
30+
generic.menu.UploadTool.espota=OTA
31+
generic.menu.UploadTool.espota.upload.tool=espota
32+
2633
generic.menu.CpuFrequency.80=80 MHz
2734
generic.menu.CpuFrequency.80.build.f_cpu=80000000L
2835
generic.menu.CpuFrequency.160=160 MHz
2936
generic.menu.CpuFrequency.160.build.f_cpu=160000000L
3037

38+
generic.menu.FlashFreq.40=40MHz
39+
generic.menu.FlashFreq.40.build.flash_freq=40
40+
generic.menu.FlashFreq.80=80MHz
41+
generic.menu.FlashFreq.80.build.flash_freq=80
42+
43+
generic.menu.FlashMode.dio=DIO
44+
generic.menu.FlashMode.dio.build.flash_mode=dio
45+
generic.menu.FlashMode.qio=QIO
46+
generic.menu.FlashMode.qio.build.flash_mode=qio
47+
3148
generic.menu.UploadSpeed.115200=115200
3249
generic.menu.UploadSpeed.115200.upload.speed=115200
3350
generic.menu.UploadSpeed.9600=9600
@@ -117,11 +134,6 @@ generic.menu.FlashSize.4M.upload.maximum_size=1044464
117134
# generic.menu.FlashSize.16M.build.spiffs_end=0x1000000
118135
# generic.menu.FlashSize.16M.build.spiffs_blocksize=8192
119136

120-
generic.menu.FlashFreq.40=40MHz
121-
generic.menu.FlashFreq.40.build.flash_freq=40
122-
generic.menu.FlashFreq.80=80MHz
123-
generic.menu.FlashFreq.80.build.flash_freq=80
124-
125137
##############################################################
126138
modwifi.name=Olimex MOD-WIFI-ESP8266(-DEV)
127139

hardware/esp8266com/esp8266/libraries/ESP8266mDNS/ESP8266mDNS.cpp

+6-2
Original file line numberDiff line numberDiff line change
@@ -66,11 +66,16 @@ extern "C" {
6666
#define MDNS_TYPE_PTR 0x000C
6767
#define MDNS_TYPE_SRV 0x0021
6868
#define MDNS_TYPE_TXT 0x0010
69-
#define MDNS_TYPE_NSEC 0x002F
7069

7170
#define MDNS_CLASS_IN 0x0001
7271
#define MDNS_CLASS_IN_FLUSH_CACHE 0x8001
7372

73+
#define MDNS_ANSWERS_ALL 0x0F
74+
#define MDNS_ANSWER_PTR 0x08
75+
#define MDNS_ANSWER_TXT 0x04
76+
#define MDNS_ANSWER_SRV 0x02
77+
#define MDNS_ANSWER_A 0x01
78+
7479
#define _conn_read32() (((uint32_t)_conn->read() << 24) | ((uint32_t)_conn->read() << 16) | ((uint32_t)_conn->read() << 8) | _conn->read())
7580
#define _conn_read16() (((uint16_t)_conn->read() << 8) | _conn->read())
7681
#define _conn_read8() _conn->read()
@@ -341,7 +346,6 @@ void MDNSResponder::_parsePacket(){
341346
else if(currentType == MDNS_TYPE_PTR) os_printf(" PTR ");
342347
else if(currentType == MDNS_TYPE_SRV) os_printf(" SRV ");
343348
else if(currentType == MDNS_TYPE_TXT) os_printf(" TXT ");
344-
else if(currentType == MDNS_TYPE_NSEC) os_printf(" NSEC ");
345349
else os_printf(" 0x%04X ", currentType);
346350

347351
if(currentClass == MDNS_CLASS_IN) os_printf(" IN ");
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
#include <ESP8266WiFi.h>
2+
#include <ESP8266mDNS.h>
3+
#include <WiFiUDP.h>
4+
5+
const char* host = "esp8266-ota";
6+
const char* ssid = "**********";
7+
const char* pass = "**********";
8+
const uint16_t aport = 8266;
9+
10+
WiFiUDP listener;
11+
12+
void setup() {
13+
Serial.begin(115200);
14+
Serial.setDebugOutput(true);
15+
Serial.println("");
16+
Serial.println("Arduino OTA Test");
17+
18+
Serial.printf("Sketch size: %u\n", ESP.getSketchSize());
19+
Serial.printf("Free size: %u\n", ESP.getFreeSketchSpace());
20+
21+
WiFi.begin(ssid, pass);
22+
if(WiFi.waitForConnectResult() == WL_CONNECTED){
23+
MDNS.begin(host);
24+
MDNS.addService("arduino", "tcp", aport);
25+
listener.begin(aport);
26+
Serial.print("IP address: ");
27+
Serial.println(WiFi.localIP());
28+
}
29+
}
30+
31+
void loop() {
32+
if (ota_cmd_listener.parsePacket()) {
33+
IPAddress remote = listener.remoteIP();
34+
int cmd = listener.parseInt();
35+
int port = listener.parseInt();
36+
int sz = listener.parseInt();
37+
Serial.printf("Starting Update: cmd:%d, port:%d, size:%d\r\n", cmd, port, sz);
38+
WiFiClient cl;
39+
if (!cl.connect(remote, port)) {
40+
Serial.println("Failed to connect");
41+
return;
42+
}
43+
listener.stop();
44+
if (!ESP.updateSketch(cl, sz)) {
45+
Serial.println("Update failed");
46+
listener.begin(aport);
47+
}
48+
}
49+
delay(100);
50+
}

hardware/esp8266com/esp8266/platform.txt

+9
Original file line numberDiff line numberDiff line change
@@ -93,3 +93,12 @@ tools.esptool.upload.protocol=esp
9393
tools.esptool.upload.params.verbose=-vv
9494
tools.esptool.upload.params.quiet=
9595
tools.esptool.upload.pattern="{path}/{cmd}" {upload.verbose} -cd {upload.resetmethod} -cb {upload.speed} -cp "{serial.port}" -ca 0x00000 -cf "{build.path}/{build.project_name}.bin"
96+
97+
tools.espota.cmd=python
98+
tools.espota.cmd.windows=python.exe
99+
tools.espota.path={runtime.platform.path}/tools
100+
101+
tools.espota.upload.protocol=espota
102+
tools.espota.upload.params.verbose=
103+
tools.espota.upload.params.quiet=
104+
tools.espota.upload.pattern="{cmd}" "{path}/espota.py" "{serial.port}" "{build.path}/{build.project_name}.bin"
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
#!/usr/bin/env python
2+
#
3+
# this script will push an OTA update to the ESP
4+
#
5+
# use it like: python ota_server.py <ESP_IP_address> <sketch.bin>
6+
#
7+
# on the ESP side you need code like this: https://gist.github.com/igrr/43d5c52328e955bb6b09 to handle the update
8+
#
9+
10+
import socket
11+
import sys
12+
import os
13+
14+
def serve(remoteAddr, filename):
15+
# Create a TCP/IP socket
16+
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
17+
serverPort = 48266
18+
server_address = ('0.0.0.0', serverPort)
19+
print >>sys.stderr, 'starting up on %s port %s' % server_address
20+
sock.bind(server_address)
21+
sock.listen(1)
22+
23+
sock2 = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
24+
remote_address = (remoteAddr, 8266)
25+
content_size = os.path.getsize(filename)
26+
print >>sys.stderr, 'upload size: %d' % content_size
27+
message = '%d %d %d\n' % (0, serverPort, content_size)
28+
print >>sys.stderr, 'sending invitation %s' % message
29+
sent = sock2.sendto(message, remote_address)
30+
sent = sock2.sendto(message, remote_address)
31+
sent = sock2.sendto(message, remote_address)
32+
33+
34+
while True:
35+
# Wait for a connection
36+
print >>sys.stderr, 'waiting for connection'
37+
connection, client_address = sock.accept()
38+
try:
39+
print >>sys.stderr, 'connection from', client_address
40+
41+
print >>sys.stderr, 'opening file %s' % filename
42+
f = open(filename, "rb")
43+
44+
while True:
45+
chunk = f.read(4096)
46+
if not chunk:
47+
break
48+
49+
print >>sys.stderr, 'sending %d' % len(chunk)
50+
connection.sendall(chunk)
51+
52+
print >>sys.stderr, 'done!'
53+
return 0
54+
55+
finally:
56+
connection.close()
57+
f.close()
58+
return 1
59+
60+
def main(args):
61+
return serve(args[1], args[2])
62+
63+
64+
65+
if __name__ == '__main__':
66+
sys.exit(main(sys.argv))
67+

0 commit comments

Comments
 (0)