Skip to content

Instantly share code, notes, and snippets.

@igrr
Created June 11, 2015 15:31
Show Gist options
  • Star 9 You must be signed in to star a gist
  • Fork 3 You must be signed in to fork a gist
  • Save igrr/d35ab8446922179dc58c to your computer and use it in GitHub Desktop.
Save igrr/d35ab8446922179dc58c to your computer and use it in GitHub Desktop.
ESP8266 Arduino OTA test script
#!/usr/bin/python
#
# this script will push an OTA update to the ESP
#
# use it like: python ota_server.py <ESP_IP_address> <sketch.bin>
#
# on the ESP side you need code like this: https://gist.github.com/igrr/43d5c52328e955bb6b09 to handle the update
#
import socket
import sys
import os
def serve(remoteAddr, filename):
# Create a TCP/IP socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
serverPort = 48266
server_address = ('0.0.0.0', serverPort)
print >>sys.stderr, 'starting up on %s port %s' % server_address
sock.bind(server_address)
sock.listen(1)
sock2 = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
remote_address = (remoteAddr, 8266)
content_size = os.path.getsize(filename)
print >>sys.stderr, 'upload size: %d' % content_size
message = '%d %d %d\n' % (0, serverPort, content_size)
print >>sys.stderr, 'sending invitation'
sent = sock2.sendto(message, remote_address)
while True:
# Wait for a connection
print >>sys.stderr, 'waiting for a connection'
connection, client_address = sock.accept()
try:
print >>sys.stderr, 'connection from', client_address
print >>sys.stderr, 'opening file %s' % filename
f = open(filename, "rb")
while True:
chunk = f.read(4096)
if not chunk:
break
print >>sys.stderr, 'sending %d' % len(chunk)
connection.sendall(chunk)
print >>sys.stderr, 'done!'
return 0
finally:
connection.close()
f.close()
return 1
def main(args):
return serve(args[1], args[2])
if __name__ == '__main__':
sys.exit(main(sys.argv))
@brutevinch
Copy link

os x el capitan :
sending 4096
sending 4096
sending 4096
sending 4096
sending 4096
sending 4096
sending 4096
Traceback (most recent call last):
File "./test.py", line 64, in
sys.exit(main(sys.argv))
File "./test.py", line 59, in main
return serve(args[1], args[2])
File "./test.py", line 48, in serve
connection.sendall(chunk)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/socket.py", line 228, in meth
return getattr(self._sock,name)(*args)
socket.error: [Errno 32] Broken pipe

@DxrMorgan
Copy link

Dont upload SPIFF! [CRITICAL]: Not enough arguments.
but all arguments set! -s spiff.bin , ip and etc

upload only firmware!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment