Story

The day is hot and sunny in San Francisco, and Ben has kicked me out of the office.

I've just spent about an hour building this little jig, and to my wonder and delight, IT WORKS!!!! (On the first try!)

I highly recommend using one of these, for several reasons:

Here's the story:

I spent a couple of hack nights with my friends Jono and Rhodey, trying different methods of programming the popular little ESP8266 boards.

Rhodey and I tried programming it with an Uno; this worked from his Linux machine, but not from my Mac – although I could find the board's IP once it was programmed. The issues persisted when I tried different methods at home later. We used a mashup of this tutorial from ElectroDragon, this Instructable, and rancidbacon's walkthrough (which says that using an Uno is "not very legit": hack at your own discretion).

Jono and I programmed it directly using an FTDI cable; that went much better, and I was finally able to upload the WifiWebServer sketch! He showed me the jig he'd built, which is something I hadn't gotten around to yet. So, today, smitten with envy, I completed mine – in my own style. I.e.: it looks like it shouldn't work, but somehow it does...

1. Building the Jig

Make has an awesome how-to for programming these using an FTDI cable. Fortunately, my FTDI cable—yanked from a Seeed Grove kit—is at 3V3 by default! This means that I didn't have to worry about scaling down from 5V so as to not to fry the ESP.

Following the diagram given in the above article...

;

;

1 / 2

...I took a protoboard and stuck a row of male-male headers at one end, so I could plug the FTDI cable into it directly. The row of proto-pins is only 5 wide, but as you can see, you can just leave off the DTR pin so there's no problem. I marked the GND end, to stay oriented.

At the other end of the board, I put a two rows of 4 male-male headers, where I'd stick the ESP8266. It's a great friction fit – the board goes on without much trouble, and it comes off easily too, but is firmly held with good contact to all the necessary pins.

Now, there are a couple of things to consider when wiring this up. See that GND-GPIO0 connection? It's the black wire that connects two pins to the GND wire of the FTDI programmer.

This picture is used in all the tutorials, and I'm not sure where it came from originally. Thank you, unknown benefactor!

;

;

1 / 2

GPIO0 needs to be connected to GND in order to program the board. However, during normal use, it must be disconnected. And I always forget to unplug it. So, I put in a button (P) for that connection.

The other button (R) pulls the RST reset pin low, connecting it to GND.

That's the general logic of it. Next, I think I'll put in a wire for the GPIO2 pin, so that you can test the circuit without doing my janky little "bridge it to GND with an LED" maneuver. Especially since there should be a current-limiting resistor in there.

This proto board was designed for Pinoccio, and is therefore eensy weensy

;

;

1 / 2 • BLOBBY BLOBBY BLOBBY

I'm not going to pretend that this is an extremely well-constructed jig: many of the connections between adjacent sockets are made simply by globbing solder between them. And some of the wire connections are 3 tiers high... however, it WORKS!!

The jig is tiny, convenient, and sturdy. I can drop a board onto one end and plug my FTDI cable into the other, then connect it directly to my computer's USB port. I snap a spring-closed glasses case around the jig when I need to take it places.

2. Programming the Board

At this point, I've done the whole thing with installing FTDI drivers and Sandeep Mistry's ESP8266 library for Arduino. So, I can simply:

• "Why is my circuit freaking out?" At one point, before programming the thing, we connected a haptic motor from GPIO2 to GND. As it turns out, the default programming has this pin set to HIGH, so until you reprogram the board, it'll keep on shouting.

• "What baud rate do we need to read from the board?" 115200 worked for us. Some boards from different manufacturers may use 9600 or other rates. Try different ones in your serial monitor.

• "Why does it keep crashing?" We thought it was resetting because the haptic motor / LED was drawing too much current. Turns out, the web page only accepts one connection at a time, by default – although you can enable a multi-connection mode.

• "Error: cannot access /dev/cu.usbmodem[ID] ... error: espcomm_open failed" Make sure you RESET the board into programming mode. HoldP down while you press R, or do the equivalent on your jig.

• "What is this esptool programmer, and why isn't it showing up in the Arduino IDE?" It's an independently developed programmer, and is available on GitHub. However, it turns out that you don't actually need to select that programmer... it works fine with whatever you have.

;

;

1 / 2 • SO RIGHT

• Settings: I'm using...

OS: Mac 10.9

Arduino IDE version 1.6.3

Board: "Generic ESP8266 Module"

Flash size: "512K"

CPU Frequency: "80 MHz"

Upload Speed: "115200"

Port: whatever it shows up as

Programmer: Still set as "Arduino as ISP" from my last project (with an ATTiny85)

Schematics

Conceptual diagram

esp-jig.png

• Connections are shown on the top of the board. However, they'll be soldered on the bottom, meaning that it'll look "backwards" from this diagram. Don't get confused! • Also, the wire connections wouldn't line up well with the FTDI header part. Look at the ground wire for reference: each FTDI wire connects to the pin to its right. • Finally, although the diagram shows two separate boards, the wires are actually stacked on top of each other. It's just easier to show this way.