So I was trying to learn IoT using Arduino and decided to purchase a WiFi module on eBay. I ordered an ESP8266 module since it is the most popular on most tutorials. Without doing some initial research, I chose the ESP-12E model (for $ 2.50) since I thought that the newest is always better (which I later on regretted since I have not included an adapter board). Looking online I've found out that this model has only a few documentation, tutorials, and reference designs for making it as a stand-alone board or as a shield. Also adding to the confusion is the "E" in the model which stands for "extended" (extension of the ESP-12). Until now I'm not even sure if they are the same with the ESP-12 but only with 6 added pins at the bottom for an SPI interface and two additional I/O pins. I could have bought myself a working shield instead but anyways there is nothing that I could do anymore so I decided to just make my own.
Step 1: Schematic Capture and PCB Layout
Ok... Now I just have to design a PCB layout so that I could easily connect this one to a breadboard or to the header pins of the Arduino. But wait... Remember that I mentioned that there are only a few documentation that can be found online? Well I had to dig deep just to make sure that I'm doing the right thing. I found a mistake also on the silkscreen label of the actual board. GPIO4 and GPIO5 have been interchanged. Please take note of this and follow the design guide.
The design is fairly simple. There's nothing really special about it since this is just to be used for testing and I am constrained with the size of the single-sided PCB that I have. I've put a 2-row header pins just in case I would need to hook up more than one wire to a single pin. Majority of the components here are SMD. The pins for the USB-to-serial adapter have been arranged accordingly to make it compatible with what I have. Some FTDI, CP2102, or CH340G boards might not have the same configurations though.
I'll be posting my own schematics and layout below plus the resource files using EAGLE CAD. If you want the Gerber files, just process it on your own. If by some chances you have found a mistake, leaving a comment would greatly help everyone to improve the design.
Step 2: Fabricating the Printed Circuit Board
I have printed the artwork on a bondpaper. I don't have a laser printer so I can't use a transparency sheet or a glossy paper. I'll just apply mineral oil to the paper to reveal the design (making it more transparent) without having the ink smeared. By now I guess you already know that I'll be using the exposure method. This is what I do most of the time since I only have an inkjet printer. You could also use the heatless/cold toner transfer method. You could find many of it online. I've also added the printout for the bottom solder mask pattern just in case if you wan't to add.
After exposing the PCB and etching it, you could add a silkscreen print on top for the labels. In my case, I'll just print it on a sticker paper or plain paper and place it on the component side (I messed up on this). Better protect it with a spray of lacquer or nail polish after. I would advise to drill the holes first before removing the toner/photoresist to prevent pre-oxidation and greasing on the copper making it hard for solder to adhere to the joint.
After placing the parts and soldering everything, it is important to check for continuity and shorts especially on the power and GPIOs.
Step 3: Uploading a Sketch and Testing It
To see if it really works, I've uploaded a simple "Hello World" program for the microcontrollers aka the Blink code. I am using the Arduino IDE which has an added board support from the ESP8266 community. You can get this on GitHub. Now open the example Blink.ino on Arduino and change the pin from 13 to 2 (connected to the on-board LED of the ESP8266). Make sure to have the correct board and port settings. In the schematic, I've included a guide on which pins to pull to VCC or ground during uploading of a program.
Uploading a simple sketch like this surprisingly takes quite some time. Just wait for a message to appear telling that your program was already uploaded.
After a while, I got this on-and-off blinking. Yehey! I have survived the smoke test :-)