How to load Zimodem firmware to an ESP8266 without Arduino IDE

Updates:

  • 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:

An ESP8266 development board, available for under $9 from Amazon. (And much less from China!)

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.

ESP-1 module USB programming adapter.

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:

http://subethasoftware.com/files/zimodem/

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:

https://github.com/nodemcu/nodemcu-flasher

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:

https://www.espressif.com/en/products/hardware/esp32/resources

Tutorial: http://iot-bits.com/esp32/esp32-flash-download-tool-tutorial/

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.

ESP8266 Flasher for Windows – Config tab, for specifying the new firmware to load.

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.

ESP8266 Flasher for Windows – Operation tab, flashing in progress.

…and when complete…

ESP8266 Flasher for Windows – Operation tab, flashing 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:

Espressif Flash Download Tools V3.6.3 for ESP8266 and ESP32

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[0123]”).

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.

Over-the-Air Updates

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:

AT+CONFIG

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):

AT&U=3.4

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.

51 thoughts on “How to load Zimodem firmware to an ESP8266 without Arduino IDE

  1. James Jones

    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?

    Reply
    1. Allen Huffman Post author

      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.

      Reply
    2. Allen Huffman Post author

      “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.

      Reply
  2. Pingback: Wire up your own RS-232 WiFi modem for under $10 using ESP8266 and Zimodem firmware. | Sub-Etha Software

  3. nowhereman999

    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

    Reply
      1. nowhereman999

        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?

        Reply
        1. Allen Huffman Post author

          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.

          Reply
          1. nowhereman999

            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. :)

            Cheers,
            Glen

          2. Allen Huffman Post author

            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.

  4. Mauricio

    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.
    Thanks again,
    Mauro

    Reply
  5. Shane Loucks

    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_main.c 371
    ets Jun 8 2016 00:22:57

    Reply
          1. Allen Huffman Post author

            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.

  6. Pingback: WiFi to RS232 – NodeMCU – The IT Garage

  7. Dave Philipsen

    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.

    Reply
    1. Allen Huffman Post author

      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.

      Reply
  8. Dave Philipsen

    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?

    Reply
    1. Allen Huffman Post author

      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.

      Reply
    2. Allen Huffman Post author

      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

      Reply
  9. Dave Philipsen

    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.

    Reply
    1. Allen Huffman Post author

      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.

      Reply
  10. Dave Philipsen

    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.

    Reply
  11. Jay

    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!

    Reply
        1. Allen Huffman Post author

          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.

          Reply
          1. Jay

            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.

          2. Allen Huffman Post author

            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.

  12. Brad Grier

    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.

    Reply
    1. Allen Huffman Post author

      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.

      Reply
      1. Brad Grier

        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.

        Reply
          1. Daniel Marks

            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.

          2. Allen Huffman Post author

            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.

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.