- 2018-02-25: Clarification on what ESP devices these instructions are currently limited to, per a comment from James J.
- 2018-02-26: Added notes about versions for ESP-1, NodeMCU ESP8266-12E, and NodeMCU-32S modules.
- 2018-02-27: Added link to Espressif tool for Windows that is supposed to do ESP32 modules (and also does ESP8266). If it works, I may update this just to use that one tool for both module types.
- 2018-03-02: Removed second Windows option until I have confirmed how it works.
Updating ESP8266 / ESP32 Firmware
NOTE: These instructions are currently limited to devices like the NodeMCU ESP8266-12E and the NodeMCU-32S development kits:
These devices have a built-in USB-to-Serial interface, so they can be plugged up to a Mac/PC over a USB cable for uploading firmware. However, the instructions probably will work with things like the ESP-1 module by using a USB programming device that interfaces it to USB.
Customized Zimodem firmware for all three of these platforms is now being created.
The excellent Zimodem firmware by Bo Zimmerman turns a low-cost ESP8266 module into a WiFi smart modem. One of the challenges users face is how to get this firmware installed on their module to begin with. I have been providing steps on how to install and configure the Arduino IDE so you can download the Zimodem source, build it, and load it.
But, if you aren’t a developer and don’t really want to go through that many hoops, you can take an existing firmware binary file and just load it directly.
Here are the steps as I know them, for Windows (with a nice GUI), or Mac OS X/Linux (command line).
Customized Zimodem Firmware images
I have a customized version of the Zimodem firmware on my server pre-built for the NodeMCU ESP8266-12E devkit, NodeMCU-32S devkit, and ESP-1 module. Download this firmware image here:
The versions will be named as follows:
- zimodem.ino.generic-3.4.bin – for the ESP-1 module.
- zimodem.ino.nodemcu-3.4.bin – for the NodeMCU ESP8266-12E development kit.
- zimodem.ino.nodemcu-32s-3.4.bin – for the NodeMCU-32S development kit.
These names are the default names that the Arduino IDE creates, with the version number added.
Windows – ESP8266 NodeMCU Firmware Programmer
Download the NodeMCU flasher program. There is a 32-bit and 64-bit version:
NOTE: A different utility may be needed for ESP32. There is one that espressif (the ESP chip creator) provides that does both ESP8266 and ESP32. It is a .rar file, and when I downloaded it under Window 10, it ended up as a .man file (?). I had to rename that to .rar, and then find a RAR extractor (I used a free one from the Microsoft store). If you are using an ESP32, you may want to try this:
With your ESP8266 module plugged in (so it appears as a COM: port to Windows), open the NodeMCU flasher program and select that COM port:
On the Advanced tab, uncheck the default internal firmware (that is the option you would use to restore an ESP8266 module back to factory firmware), and browse to the new firmware in the second line. Checkbox that line, and set the start address to 0x0000.
You might also go to the Advanced tab and increase the baud rate if you want the update to go faster. Once the binary file and COM port have been specified, return to the Operation tab and click Flash to begin the upload to the ESP8266.
…and when complete…
You can now restart the ESP8266 module and it should be using the new firmware.
Windows – ESP8266/ESP32 Espressif Flash Download Tools V3.6.3
I have tested this tool on ESP8266, but not on ESP32 yet. I will update this section when I do. It requires more steps to install and setup, but may be what we have to use for ESP32. Running it offers four different parts it can flash:
I will update this tutorial when I have confirmed how to use this.
Mac and Linux – esptool
Install esptool (a Python script) and pySerial (a Python library for talking to the serial port):
easy_install esptool easy_install pyserial
NOTE: I think I hadto run this as super user, “sudo easy_install esptool”.
Identify the serial port connected to the ESP module. This can be done from a shell (Linux) or the Terminal (Mac). On Mac, can look for devices that begin with “cu”:
alsmbpro:temp allenh$ ls /dev/cu* /dev/cu.Bluetooth-Incoming-Port /dev/cu.HC-05A-DevB /dev/cu.SLAB_USBtoUART
If you do not know what to look for, you could do this command before plugging in the ESP8266, then again after you plug it in and see what appears. (On my system, I know I installed Silicon Labs drivers, so I recognized the “SLAB” name.)
On Linux, I think you need to do ls /dev/ttyS*. (I also saw an exemple using “setserial -g /dev/ttyS”).
Now that you know what serial port is connected to the ESP module, run esptool.py specifying that port, and the firmware image to use. On my system:
esptool.py -p /dev/cu.SLAB_USBtoUART --baud 460800 write_flash --flash_size=detect 0 zimodem.ino.nodemcu-3.4.bin
If it works, you should see something like this:
prompt$ esptool.py -p /dev/cu.SLAB_USBtoUART --baud 460800 write_flash --flash_size=detect 0 zimodem.ino.nodemcu-3.4.bin esptool.py v2.2.1 Connecting........_ Detecting chip type... ESP8266 Chip is ESP8266EX Uploading stub... Running stub... Stub running... Changing baud rate to 460800 Changed. Configuring flash size... Auto-detected Flash size: 4MB Compressed 344528 bytes to 247587... Wrote 344528 bytes (247587 compressed) at 0x00000000 in 5.8 seconds (effective 472.4 kbit/s)... Hash of data verified. Leaving... Hard resetting...
You can now restart the ESP8266 module and it should be using the new firmware.
Once you have this special build of the firmware, you will be able to do over-the-air updates. Make sure you configure your Zimodem for your WiFi network by going through the:
You can then use the command “AT&U” to see what the current version is. Bo is currently working on 3.4.
In stock Zimodem, firmware updates pull from Bo’s website for the two boards he support (the ESP-1, I think, and some flavor of ESP32). For my customized “CoCoWiFi” version, it will pull special builds from my website instead, and there are three different boards supported.
As I build new versions of this customized Zimodem firmware, I will place them on my server and you can type (from the Zimodem command mode):
That will get whatever version I have available. You should not need to do any more USB updates, unless something goes horribly wrong, or you want to go back to stock NodeMCU firmware.
Please let me know if this works for you.
Lacking hardware experience, perhaps I’m unaware of something obvious to those who do. The description here would imply that one must connect the ESP8266 to a serial port on one’s PC, Mac, or Linux computer. It’s not clear how to do so given the photos I’ve seen of, for example, the ESP8266 ESP-1, without additional hardware. So, what exactly is one plugging the ESP8266 in to?
I did some updates. The naming is quite confusing. I am writing about the NodeMCU ESP8266-12E devkit device, as opposed to the ESP-1 module, or the ESP-32S devkit device. I am still a bit unclear on who makes each… The ESP8266 Arduino support comes from one place, but the ESP32 support comes from some other place and is installed a different way. I’m not sure where the ESP-1 fits in yet, but I plan to order a few of them so I can maintain builds for that as well.
Thanks for the added discussion and photo.
Now I need a way to automate builds from Arduino…
“On second think…” On CoCo on a Chip, he added that mode that links the Bluetooth to the ESP module. I believe you would be able to pair the PC to the Bluetooth module, then get it in the mode where BT goes to ESP and then do this by using the COM or Serial port associated with the Bluetooth on the PC. I will do an ESP-1 build and try this out this week.
Pingback: Wire up your own RS-232 WiFi modem for under $10 using ESP8266 and Zimodem firmware. | Sub-Etha Software
Hi Allen, I’m going through your installation guide here using the MAC install for the drivers for my NodeMCU ESP8266-12E but it wasn’t showing up when I used the command ls /dev/cu* until I also installed the CP210x USB to UART Bridge VCP Drivers from the silicon labs website here: https://www.silabs.com/products/development-tools/software/usb-to-uart-bridge-vcp-drivers
Thanks for the detailed instructions and all your hard work on this project. I’m getting close to getting my CoCo on the internet, thanks to you. :)
Nowhereman999 aka – Glen Hewlett
Let me know how it goes! There may still be some issues with the defaults in my custom build, so I need to look into that this week.
Hi Allen, I just got it all hooked up to my CoCo and seeing the AT responses from the CoCo terminal brought back some awesome CoCo memories. Thanks for that. I was able to join my WIFI, now I need to find some BBS’s to telnet/dial into. Very cool stuff. Thanks again for sharing and the tutorial and software updates.
ps. I’m currently running at 1200 baud, do I need to do anything to use higher speeds on the bit banger on the CoCo 3? Can I just set the CoCo to higher speeds and it will just work or do I need to do more on the NodeMCU ESP8266-12E?
You can change the baud using ATB2400 and then switch your terminal program to match. I have tested 9600 using TwilightTerm and bitbanger, but most other terminals for CC3 won’t do that. With RS232 Pak I did ATB115200 ;-) and Ultimaterm supports that just fine.
Thanks Allen, I did search zimodem and found a lot of info for the AT commands. Thanks for the info on the terminal programs. Ultimaterm was my favourite back in the 80’s. I guess I’ll have to give TwilightTerm a try since I want 9600 baud from my bit banger port. :)
There is also help built in. AT&H. But a bug or some issue with the current Arduino libraries causes it to get scrambled in the middle.
Thanks for the build and the article. I was able to run Zimodem in my cheap esp-01, using Linux and esptool.
There is a problem, thought. The wifi conf and baud rate changes are not saved. Or are saved and lost after a reboot. There is not a big deal since at+config is such a easy and convenient tool, that isn’t take a lot to reconnect.
I am using this with an Atari 8bit computer.
I’m having trouble getting this flashed to an esp32 at all. The flash completes but I get the following error scrolling on the serial monitor (115200baud):
rst:0x10 (RTCWDT_RTC_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
flash read err, 1000
ets Jun 8 2016 00:22:57
I will try to find time to test mine. Anyone else working with the ESP32 here?
I got the same error using ESP-32S. I guess I’ll have to try using an ESP8266 instead.
Hi, which firmware should I use for a Wemos D1 Mini and when using with a Commodore AMIGA and Atari STE please?
I am unfamiliar with Wemos D1 Mini. What is it?
Same sort of thing as your boards but I’d be using Amiga and STE and wonder if the Commodore firmware was just for C64 – https://www.aliexpress.com/item/Smart-Electronics-D1-mini-Mini-NodeMcu-4M-bytes-Lua-WIFI-Internet-of-Things-development-board-based/32659152063.html
As it says ESP8266MOD on the board same as yours I think we use NodeMCU firmware but it wont flash saying “Require WiFi” – any ideas?
There could be differences in how I/O is used between different pieces of hardware that use the core ESP chip. You could check out Bo Zimmermans project page and see what devices he officially supports. I have only tested on the ESP8266 NodeMCU dev kit and the ESP32 dev kit.
Pingback: WiFi to RS232 – NodeMCU – The IT Garage
Allen, thanks for hosting this information. I’ve finally gotten around to loading up one of my ESP-01 modules with the ZiModem firmware and so far I’m pretty impressed! I do have a question, however, about the files you have hosted at http://subethasoftware.com/files/zimodem/. I used the zimodem.ino.generic-3.4.bin file to program my ESP-01. Is this exactly the same as Bo Zimmerman’s or is it something you have customized slightly? Just curious.
I change the defaults of some ATSx commands to invert the RS232 signals from Commodore (inverted HI/LO) to standard. I also change where it pulls the over the air update file to be one from my server so an updated doesn’t loose those customizations, That is an old build, though. If you are using the ESP-01, you can get a build from Bo and then do the ATS commands and save them back to the config and end up in the same spot, but with newer code.
Allen, another question. I am using your build of Zimodem v3.4 CoCoWiFi Version. When I issue the command AT&U it tells me that the latest available version is 3.5. How do I get it to d/l the latest version? Using AT&U=6502 doesn’t work. From your previous message from June 14th of last year should I assume that you are not going to continue to host CoCo-specific firmware as updates are available?
It seems that I can ‘end up in the same spot’ if I simply download/install the latest Zimodem binary and then make changes to the S registers and save the configuration, right? Which S registers are changed in your CoCoWiFi version?
My fork was modified to pull updates from my site, but I can’t make a build that doesn’t crash. I probably left the .txt file with 3.5 listed in it. I’ll fix that. Thanks!
I do not recall the S registers, but they are the ones that change the states from HIGH to LOW. If you take a peek at my github fork source code, I put them all in an ifdef block so it should be easy to spot what changes I made.
I fixed the update txt file back to 3.4. It looks like all the main lines have to be reversed. I also change some faults for flow control, it looks like.
define DEFAULT_DCD_HIGH LOW
define DEFAULT_DCD_LOW HIGH
define DEFAULT_CTS_HIGH LOW
define DEFAULT_CTS_LOW HIGH
define DEFAULT_RTS_HIGH LOW
define DEFAULT_RTS_LOW HIGH
define DEFAULT_RI_HIGH LOW
define DEFAULT_RI_LOW HIGH
define DEFAULT_DSR_HIGH LOW
define DEFAULT_DSR_LOW HIGH
define DEFAULT_DTR_HIGH LOW
define DEFAULT_DTR_LOW HIGH
Ok, so it’s just handshake lines that were changed so this shouldn’t affect the ESP8266 since I don’t believe any of the handshake lines are available on that module. So, effectively, I could just use the standard Zimodem firmware as it would not be any different for my ESP8266 module, I guess.
I was using it on a CoCo via RS232 Pak and bitbanger. I had to swap lines to DTR would let things talk to it, and CD would be correct. Some terminal programs needs one, some needed both.
Ok, I am going to experiment with the straight ZiModem firmware from Bo’s site then. He’s up to version 3.5.4. I’ll let you know how it works.
Please do! Thanks!
It looks like my original article covers the ATS settings:
Couple questions about this firmware… I’m using this on a C64 (or, other Commodore 8 bits, also) so I’m going to need to modify the CTS/RTS/DCD settings, and probably the GPIO pins that they’re assigned to. I’m using this reference material: https://1200baud.wordpress.com/2017/03/04/build-your-own-9600-baud-c64-wifi-modem-for-20/ and I was using his firmware. Even though his firmware does work, I like Bo’s because I can use his client software with it.
So, when setting registers S46-48, I’m assuming I should leave those at 0 for use on the commodore, and setting registers S49-51, I should set them to the corresponding GPIO pins that those are connected to on Alwyz’s design? I’m having issues with CCGMS locking up, or at least the modem locking up when enabling the UP9600 driver, or enabling RTS/CTS flow control.
Thanks for any insight!
If you get the current firmware direct from Bo’s site, it will be set up for Commodore inverted RS-232 signals with no changes
Ah ok… I’ll get it. I’m using it with a NodeMCU, not the custom circuitry he designed. Thanks!
I run mine on the ESP8266 evaluation module, which I think it what you mean? The IO pins work as long as you just wire it the default way of the firmware. I also tried it on the ESP32 dev module, but the 8266 was cheaper so I have been using that.
So far, it seems to be working. Though, the blue LED isn’t lit up, odd. Anyway, this is the dev kit that’s pictured on nodemcu.com. I bought 4 of them off of… amazon? ebay? It’s been a while. I did change the S49-51 registers to reflect the actual GPIO pins they are connected to.
I don’t know how soon I will be able to revisit this, but I plan to redo all my units and start offering kits for folks who want one… 3D printed case, programmed NodeMCU module, RS232 adapter, and connecting wires.
Nice detailed instructions. Just did half of the setup to get my old computers on the modern internet — now waiting on a gender-changing connector to complete the install.
I set up the 8266 install using your 3.4 code following the Mac install instructions and it went off without a hitch. Configured the ESP to my home network and was able to (using the Arduino serial monitor) make a rudimentary connection to a test bbs I set up.
Once my adapter arrives, I’ll be able to complete the proper serial side and use my old systems…. we’ll see how that goes.
What machine will you be using it on? I haven’t been able to build a working version of the current Zimodem in years, but if you don’t mind having to do some AT config commands, you can get Bo’s current version and be much more modern.
Initially I’ll be using it on a recently-acquired NEC PC-8201a (sister to the TRS-80 Model 100). I may pick up a second 8266 and build another for an Apple //e that’s languishing in a closet right now :)
So, for now I’m in no rush to be ‘current’, but will probably look at it down the road. Very cool of you to build and maintain this — it’s helped me keep interested in doing things with ‘vintage’ computers.
Commodore BASIC sources are available for FTP, Telnet and some other stuff, too.
Neat! I’ll have to look at that then, but first, finish this one up :)
May I include your ESP12 binary on my project http://www.github.com/profdc9/WiFiModem to make it easier to find?
I gave up trying to build it. My builds would crash. The author uses specific versions of the libraries that work for him.
Where did you get the build firmware that is at your link?
I built them several years ago. I’d go direct to Bo Zimmerman’s original as it’s years newer.
I tried to compile it and it crashed….I have no idea what libraries he uses to compile them. It’s not reproducible as far as I can tell, and I haven’t been able to get the author’s attention.
I see his replies on his version control bug reports regularly. Somewhere he documents which versions he used. I think there are existing bug reports about that which he may have answers for with what he uses.
Where did you get the build of the firmware that is hosted on your website?
And if my binaries work, you can use them for whatever, but I think there may be issues.