Things used in this project

Hardware components:
FTDI cable
*IMPORTANT*: 3v3 cable!! If yours is 5V, you'll need to regulate power to the VCC and RX pins.
×1
Proto board and jumper wires
I'm using a Pinoccio proto board, because it's teeny-tiny!
×1
Tactile switch
a.k.a. a button
×2
Esp01
Everything ESP ESP8266 ESP-01
Bought on eBay.
×1

Schematics

Conceptual diagram
I will upload a Fritzing once I am better with that tool! In the meantime, check out the above pictures and description for how to connect everything.
Schematic
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.
Esp jig

Code

esp_webserver_BW.inoPlain text
The example code – connects to a WiFi network with no password.
/*
 *  This sketch demonstrates how to set up a simple HTTP-like server.
 *  The server will set a GPIO pin depending on the request
 *    http://server_ip/gpio/0 will set the GPIO2 low,
 *    http://server_ip/gpio/1 will set the GPIO2 high
 *  server_ip is the IP address of the ESP8266 module, will be 
 *  printed to Serial when the module is connected.
 */

#include <ESP8266WiFi.h>

const char* ssid = "Brainwash";
const char* password = "";

// Create an instance of the server
// specify the port to listen on as an argument
WiFiServer server(80);

void setup() {
  Serial.begin(9600);
  delay(10);

  // prepare GPIO2
  pinMode(2, OUTPUT);
  digitalWrite(2, 0);
  
  // Connect to WiFi network
  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);
  
  WiFi.begin(ssid, password);
  
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");
  
  // Start the server
  server.begin();
  Serial.println("Server started");

  // Print the IP address
  Serial.println(WiFi.localIP());
}

void loop() {
  // Check if a client has connected
  WiFiClient client = server.available();
  if (!client) {
    return;
  }
  
  // Wait until the client sends some data
  Serial.println("new client");
  while(!client.available()){
    delay(1);
  }
  
  // Read the first line of the request
  String req = client.readStringUntil('\r');
  Serial.println(req);
  client.flush();
  
  // Match the request
  int val;
  if (req.indexOf("/gpio/0") != -1)
    val = 0;
  else if (req.indexOf("/gpio/1") != -1)
    val = 1;
  else {
    Serial.println("invalid request");
    client.stop();
    return;
  }

  // Set GPIO2 according to the request
  digitalWrite(2, val);
  
  client.flush();

  // Prepare the response
  String s = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<!DOCTYPE HTML>\r\n<html>\r\nGPIO is now ";
  s += (val)?"high":"low";
  s += "</html>\n";

  // Send the response to the client
  client.print(s);
  delay(1);
  Serial.println("Client disonnected");

  // The client will actually be disconnected 
  // when the function returns and 'client' object is detroyed
}

Credits

Photo on 7 5 17 at 5 06 pm 7 05huowsyxv
Alex Glow
65 projects • 558 followers
The Hackster team's resident Hardware Nerd. I like robots, music, EEG, wearables, and languages. FIRST Robotics kid.
Contact
Thanks to Jono Spiro.

Replications

Love this project? Think it could be improved? Tell us what you think!

Give feedback

Comments

Sign up / LoginProjectsPlatformsTopicsContestsLiveAppsBetaBlog