The main aim of this project is to control home appliance over the internet. I was trying to make an project for the Apple HomeBridge and I decided to keep the Arduino Nano and add a ESP8266-1 module. It works by connecting the Arduino to the internet through esp8266 WiFi module. This setup is a proof of concept and can be expanded or be integrated into other projects.



   Project name: Arduino – Connecting  a ESP8266-1
   Project URI:
   Description: Arduino – Connecting  a ESP8266-1
   Version: 7.0.3
   License: MIT 

#include <SoftwareSerial.h>

#define DEBUG true

SoftwareSerial esp8266(10, 11); // make RX Arduino line is pin 10, make TX Arduino line is pin 11.
// This means that you need to connect the TX line from the esp to the Arduino's pin 2
// and the RX line from the esp to the Arduino's pin 3
void setup()
  esp8266.begin(9600); // your esp's baud rate might be different

  pinMode(2, OUTPUT);
  digitalWrite(2, LOW);

  pinMode(3, OUTPUT);
  digitalWrite(3, LOW);

  pinMode(4, OUTPUT);
  digitalWrite(4, LOW);

  sendData("AT+RST\r\n", 2000, DEBUG); // reset module
  sendData("AT+CWMODE=2\r\n", 1000, DEBUG); // configure as access point
  sendData("AT+CIFSR\r\n", 1000, DEBUG); // get ip address
  sendData("AT+CIPMUX=1\r\n", 1000, DEBUG); // configure for multiple connections
  sendData("AT+CIPSERVER=1,80\r\n", 1000, DEBUG); // turn on server on port 80

void loop()
  if (esp8266.available()) // check if the esp is sending a message

    if (esp8266.find("+IPD,"))
      delay(1000); // wait for the serial buffer to fill up (read all the serial data)
      // get the connection id so that we can then disconnect
      int connectionId = - 48; // subtract 48 because the read() function returns
      // the ASCII decimal value and 0 (the first decimal number) starts at 48

      esp8266.find("pin="); // advance cursor to "pin="

      int pinNumber = ( - 48) * 10; // get first number i.e. if the pin 13 then the 1st number is 1, then multiply to get 10
      pinNumber += ( - 48); // get second number, i.e. if the pin number is 13 then the 2nd number is 3, then add to the first number

      digitalWrite(pinNumber, !digitalRead(pinNumber)); // toggle pin

      // make close command
      String closeCommand = "AT+CIPCLOSE=";
      closeCommand += connectionId; // append connection id
      closeCommand += "\r\n";

      sendData(closeCommand, 1000, DEBUG); // close connection

  Name: sendData
  Description: Function used to send data to ESP8266.
  Params: command - the data/command to send; timeout - the time to wait for a response; debug - print to Serial window?(true = yes, false = no)
  Returns: The response from the esp8266 (if there is a reponse)
String sendData(String command, const int timeout, boolean debug)
  String response = "";

  esp8266.print(command); // send the read character to the esp8266

  long int time = millis();

  while ( (time + timeout) > millis())
    while (esp8266.available())

      // The esp has data so display its output to the serial window
      char c =; // read the next character.
      response += c;

  if (debug)

  return response;

Pin on Pinterest1Share on Facebook0Share on Google+0Tweet about this on TwitterShare on LinkedIn0Buffer this pageDigg thisEmail this to someone
Flattr the authorShare on Reddit0Share on StumbleUpon0Share on Tumblr0Share on VKShare on Yummly0