-
-
Save jalexandre0/1a8b3060ff0015dda051c353f6577d25 to your computer and use it in GitHub Desktop.
automated ESP8266 programming station to mass flash large quantity of devices quickly
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python | |
# | |
# automated ESP8266 programming station | |
# monitors for inserted serial devices and calls esptool to flash them | |
# written to mass flash entire batches of ESP8266 devices quickly | |
# $ pip install esptool pyudev | |
# | |
# 2016.06.16 darell tan | |
# | |
import pyudev | |
import subprocess | |
import sys | |
import os | |
import time | |
fwfile = sys.argv[1] | |
assert os.path.isfile(fwfile) | |
ctx = pyudev.Context() | |
mon = pyudev.Monitor.from_netlink(ctx) | |
mon.filter_by(subsystem='tty') | |
logf = open('massflash.log', 'a') | |
devs = {} | |
print 'waiting for usb events...' | |
for dev in iter(mon.poll, None): | |
vid, pid = dev.get('ID_VENDOR_ID', None), dev.get('ID_MODEL_ID', None) | |
print dev.action, dev.device_node, dev.device_type, \ | |
dev.subsystem, \ | |
vid, pid, \ | |
dev.get('ID_SERIAL', None), dev.get('ID_SERIAL_SHORT', None) | |
# log in/out times of each device | |
if dev.action == 'add': | |
devs[dev] = time.time() | |
elif dev.action == 'remove': | |
logf.write('%f %f\n' % (devs.get(dev, -1), time.time())) | |
# flash device | |
if dev.action == 'add': | |
print 'flashing on %s...' % (dev.device_node) | |
cmd = "esptool.py -b 921600 -p %s write_flash -ff 80m -fs 32m 0x0000 %s" % (dev.device_node, fwfile) | |
subprocess.Popen(cmd.split()) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment