ESP-12E and ESP-12F Programming and Development Board




About: Engineer, retired. Have always had an interest in electronics, often related to radio control. This evolved into a part time business that I still practice. I do some voluntary work in schools to encourag...

The remit for this board was simple:

  • Be able to program ESP-12E and ESP-12F modules as easily as the NodeMCU boards (i.e. no need to press buttons).
  • Have breadboard friendly pins with access to the usable IO.
  • Use a separate USB to serial converter so the board has no additional current drain and can be tested as close as possible to the end application, especially with respect to sleep current.

The unit here could be made using a breadboard and spreading out the pins of a 2mm pin header to bridge between the ESP12 and the breadboard, as shown in other instructables. However a PCB module is neater and faster to connect. So if you have the gear to make PCBs - grab the artwork attached and knock up one of these.


  • 2mm pin-strip (2x8 ways)
  • 2.54mm right angle pin-strip (12 ways + 2off 3 way)
  • Horizontal 3 way 2.54mm socket – e.g. Farnell 1593474
  • 2 off BCW32 or other SOT23 format NPN transisitor.
  • 4 off 10k 0805
  • 2 off 22k 0805
  • 0.1uF ceramic 0805
  • 6mm tactile switch (through hole)
  • PCB made to attached artwork.

Step 1: Description

The NodeMCU programming system uses the serial RTS and CTS lines to drive the reset and GPIO0 pins to set the programming mode. A couple of NPN transistors are used. When DTR is high and RTS low the Reset pin is pulled low. When DTR is low and RTS high GPIO0 is pulled low. The programming software drives the DTR and RTS pins as required to put the ESP12 in to flash mode.

Circuit diagram:

A FTDI USB to serial converter is used as it has the lines required on one side. Hence one just has to add some pin headers.

When programming ESP12 modules on this breakout board one either selects NodeMCU V1.0 as the board in the Arduino IDE or if using Generic ESP8266 then set Reset Method (in Tools) to nodemcu. You can then click download whenever you want to load your sketch. The board needs 3.3 power applied to the 3.3v and GND pins.

I built this to help develop my TicTac Super Wifi Analyser, but knowing that it will become my favourite tool for developing and testing ESP8266 systems using the ESP12 boards.

Step 2: Assembly

Download the attached ESP12 Programmer artwork.docx Print it out and check the board size is as noted. If not the adjust the size via right click, Size and Position.

I print artwork onto two pieces of tracing paper. I then overlay these to double the contrast and mask any small imperfections in the printing (I use a laser printer). I punch holes in the edge of the upper layer, place Sellotape across the holes, align and then press on the holes to stick. I have a UV exposure unit. I used to use a UV black light that worked fine with spray coated PCBs. I use weak sodium hydroxide solution (drain cleaner) to develop and Di-Sodium Peroxodisulphate Hexahydrate to etch. Take special precautions with the chemicals, especially the sodium hydroxide that attacks flesh instantly. You don't want this stuff in your eyes! I then expose again and develop to get rid of the film over the tracks and finish off with some immerse tin (quite expensive – and limited life). The latter step is optional, especially if you plan to solder the board before the surface gets too oxidised.

I solder components in height order. I place a SMD component, apply solder paste to one pin and solder this. I then do the same for the rest of the SMD components. Then I apply paste to all the unsoldered pins and then go around and solder these.

I did not push the 2mm pin-strip all the way in - but just enough so the pins protruded by around 1mm. When done the plastic bar can be pushed down to the board level. This saves having to trim them and allows the ESP12 aerial to be a mm further away from the FTDI connector.

If you have problems getting the Horizontal 3 way 2.54mm sockets you could use Arduino socket strip and epoxy it flat and solder to one set of pads. If so link the pairs of pads as necessary so the sockets connect to the circuit.

Lastly solder the 12 way right angle 0.1" pin-strip and label as below:

On the FTDI module solder 2 off 3 way right angle pin strip as below:

Step 3: How to Use

Start the Arduino IDE (download and install from if necessary) and add the ESP board details if you don’t have them (see: Sparkfun).

Load your code.

Then set the programming details (Tools):

Select board: Generic ESP8266 Module or NodeMCU v1.0 (ESP-12E Module). The former gives more options. See below for the rest of the settings. The Port number is likely to be different. Click PORT to see which one appears when the FTDI module is connected.

Now power the board with 3.3v to the 3.3v pin and connect GND. Plug in the FTDI USB to Serial converter. Now you can program the board just by clicking the download button. After you have done this a few times you will see the value of this little board.

I used this to develop my TicTac Super Wifi Analyser

I hope you find this useful.




    • IoT Challenge

      IoT Challenge
    • Gardening Contest

      Gardening Contest
    • Woodworking Contest

      Woodworking Contest

    11 Discussions


    Question 12 days ago

    Hello Mike, great project
    I thought that Gpio2 has to be connected to 3v3 to set the esp8266 in Flash Startup or in UART Download Mode.

    1 answer

    Reply 12 days ago

    Correct. Fortunately there is an internal pull-up resistor that does this if there is no load on the pin. This is also why I used this GPIO as one of the set driving MOSFET gates. Mike


    Question 4 months ago

    hello sir
    i have one question in my mind
    i have a code for temperature sensor with esp 8266 12 e. i set this code to take reading every 30 min
    but when i insert this code to esp it take reading every 27-28 min. i cannot understand that where is the error in code or hardware plz tell me. i can share my code also ...thanks
    please reply me

    1 answer

    Answer 4 months ago

    If you want to time something accurately you need to use a timer and interrupts - that I have never done on the ESP. If however the time is set using 'WAIT' statements this may just implement a counter - that will be inaccurate in the ESP as it uses the core to both to run the program and deal with the communications. In this case I would adjust the time set until your 30 min target is achieved. If I wanted a 30min data input I would be driving the ESP from a raspberry pi and would use Node-Red to request the data at the set frequency. I hope this helps. Mike


    6 months ago

    Cool project, but I thought that Gpio0 has to be connected to GND to set the esp8266 in Programming Mode.

    2 replies

    Reply 6 months ago

    Correct. However Nodemcu boards have circuitry that enables the Arduino IDE to do this automatically via a couple of the serial protocol pins. This programmer has the same circuitry. The key is to set the reset method to 'nodemcu' as can be seen in the picture in Step 3. Pulling GPIO low (automatically) is explained in Step 1. Mike.


    Reply 6 months ago

    Thanks for your fast response. This helps me a lot.


    6 months ago

    Forgive me if I overlooked this part, but do you solder the ESP module to this board? Or do you temporarily place it on the pins and have enough contact to successfully program it so that it can be removed & soldered into another circuit?

    1 reply

    Reply 6 months ago

    Yes I just rest the ESP on the pins. They are tight enough to make a decent contact. Then the board can be installed elsewhere. I did this for my portable WiFi analyser project.


    Random Stuidos

    1 year ago

    Awesome, I've been looking to use WiFi in a project but wasn't able to find any good layouts. This is a life-saver.

    1 reply
    FlyingDrMikeRandom Stuidos

    Reply 1 year ago

    Have you looked at my other instructables? If you are looking to control things from a Raspberry Pi, with the option for a smartphone interface then Sonoff-Tasmota firmware (for an ESP) is well worth considering. Node-Red on the Pi opens up a load of options. Mike