Short and simple blog, images, programming and electronics projects....and anything else i want to write about...Sometimes in English sometimes not...

21 May 2021

Automate ESP8266 Programming

Automate ESP8266 Programming

From time to time i need to program several hundred ESP-12F modules for my projects. First time i did it, i was changing the module on the programmer and then repeating the command.

However, by doing that it was hard to do programming at several programmers at once and also it required all my attention when the script finished etc.

So i had to automate it a bit, but i didn’t want to throw myself into codding so much. Just the most simple way to do it was an option.

So here we are. The whole solution is just a simple udev rule which sets the programming script to execute. As i said “it sets the script”. Because, udev just triggers and doesn’t handle the runtime environment as when you run a program in terminal. So for that purpose, i used “at now”.


Step 1:

Set udev rule:

Make file “/etc/udev/rules.d/esptool.rules”

Paste following into the file and change accordingly the path for the script and also check the vendor number for your programmer. You can probably find out more once you plug your device and monitor it like this “udevadm monitor –kernel –property –subsystem-match=usb”

 # esptool auto programmer
 ACTION=="add", KERNEL=="ttyUSB[0-1]", SUBSYSTEM=="tty", ATTRS{vendor}=="0x8086", RUN+="/opt/ /dev/%k %n | at now"

Step 2:

Copy/Paste/Edit the following script with appropriate data and also set it executable by the same user as the one who has set in it’s environment.

 exit 0 # comment if you want to use the auto procedure  
 # If you want to get sound notification once the script exits or finish programming.  
 # the user under which the python and esptool is set  
 # As i was using multiple programmers, i separated the log into different files.  
 # However, it's just distinguished per the device number at the moment.  
 # The programmer will usually be registered at the first available number.  
 su - [your-user-name] -c 'echo -e "\n----------------------------------------\nPORT: 	$USB_DEVICE\n----------------------------------------\n >> $ESPTOOL_LOG"'  
 su - $BASH_USER -c "$ESPTOOL_PATH --baud 1500000 --port $USB_DEVICE write_flash 0x00000000 $FIRMWARE_PATH 0x00200000 $SPIFFS_PATH >> $ESPTOOL_LOG"  
 echo -ne '\007' > $OUTPUT_TERMINAL  

Feel free to adjust the script according to your needs. There is nothing complex, just simple calling the with parameters and passing the output to a log file.

Change [your-user-name] part of the script to your user. The reason was that esptool and the enviromnet was available only for that particular user. I believe it’s gonna be the case with you. The script is initiated by the system so unless you have the env set for root, you would not be able to run the esptool.

The execution is set under the same user so that there is no permission problem when the log is printed.

After you finish, you can grep your logs, catch all MAC addresses in order to track the devices. It would be nice to add some timestamp, maybe even to use to burn in your serial into the chip at the same time.

That’s about all.


ESP8166 / ESP12F / ESP-12F / ESP32 / ESP-12E
I sell on Tindie


Buy Me A Coffee