WiFi Serial Connection
ESP8266
d. bodnar  revised
07-08-15

 http://192.168.1.29/gpio/1                   http://192.168.1.29/gpio/0

I have been experimenting with a small (about 1" x 1/2") board that provides WiFi access to the internet and can be used to send data via a serial port.

The output of the unit is currently being hosted by www.thingspeak.com,  a free web service that can be used to graphically display such data.

The current test data (just the temperature on my workbench or something I am currently working on) can be see here: 
https://thingspeak.com/channels/19064

This graph shows the same data:

 

My latest experimentation involves reading temperature and ambient light level.  This data is also on thingspeak here:

https://thingspeak.com/channels/18994

 

 

These boards are available on eBay - just search for esp8266.  The cost, with delivery, should be less than $5.00.

I currently have the units I received working well with an Arduino Pro Mini.  I am using a board that I designed for model railroad DCC work as a test platform.  The test unit is shown here:

 

Arduino-wifi-board
Tutorial for ESP8266 Serial WiFi Module - 作业部落 Cmd Markdown 编辑阅读器
Wi07c - ElectroDragon
ESP8266 Serial WiFi Wireless Transceiver Module Send Receive Lwip AP Sta | eBay
ESP8266 - NURDspace
ESP8266 remote Wireless Module WIFI to UART Module - ICStation.com
Using the ESP8266 module
ESP8266 - search Instructables
World Wide Web Control for under $30.00
ESP8266 WiFi Module Library Hackaday Projects
ESP8266 Resources | XESS Corp.
ESP8266 Community Forum View topic - Walkthrough request

http://www.dx.com/p/crius-ftdi-basic-breakout-5v-usb-to-ttl-6-pin-module-for-mwc-multiwii-lite-se-228307#.VHEQuMlNfzo  -- serial adapter

resistor needed

May need    AT+CWMODE=3 before connecting to WiFi

AT+CWJAP="main","password" +CR+LF   - connect to access point

AT+CWLAP  - show access points

+CWLAP:(1,"3VC01",-90,"00:1f:90:e7:0a:de",1)

+CWLAP:(1,"main",-52,"00:1f:90:b3:63:10",6)

+CWLAP:(3,"XD8Y3",-93,"f8:e4:fb:14:ec:0d",6)

+CWLAP:(1,"One",-71,"00:90:4c:c0:00:03",4)

+CWLAP:(1,"Two",-59,"30:46:9a:9a:b9:48",11)

AT+CIFSR   - get IP address

9600 - n81 - add CR/LF to each entry

 

From:http://www.instructables.com/id/Using-the-ESP8266-module/step6/Running-a-simple-webserver-in-BASIC/

If you are using a terminal program connected to your 8266 module, take note of the following commands..

AT+CIPMUX=1
AT+CIPSERVER=1,80

These two commands set up the magic to make the module automatically answer a request from another computer or device. In my case, I've configured the module to answer web requests on port 80.

On Serial/USB gizmo
WHITE TO TX
GREEN TO RX

OnESP8266
white to rxd (yellow on image below)
green to txd (green on image below)

 

#include<stdlib.h>
#include <SoftwareSerial.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 8
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
#define SSID "main"
#define PASS "abcdeabcde"
#define IP "184.106.153.149" // thingspeak.com
String GET = "GET /update?key=VPPK6NPY1OWYNERI&field1=";
SoftwareSerial monitor(10, 11); // RX, TX

int RsetWiFi = 12; //reset pin on WiFi module

void setup()
{

  pinMode(RsetWiFi, OUTPUT);
  digitalWrite(RsetWiFi, HIGH);
  delay(1000);
  monitor.begin(9600);
  Serial.begin(9600);
  sensors.begin();
  sendDebug("AT");
  delay(3000);
  if(Serial.find("OK")){
    monitor.println("RECEIVED:    OK");
    connectWiFi();
  }
}

void loop(){
  digitalWrite(RsetWiFi, LOW); //reset WiFi unit
  delay(1000);
  digitalWrite(RsetWiFi, HIGH); // complete reset
  delay (3000);
   sendDebug("AT");
  delay(3000);
  if(Serial.find("OK")){
    monitor.println("RECEIVED 2nd:    OK");
    connectWiFi();
  }
 // sendDebug("AT+RST");
  delay(3000);
  sensors.requestTemperatures();
  float tempC = sensors.getTempCByIndex(0);
  tempC = DallasTemperature::toFahrenheit(tempC);
  //monitor.println(tempC);
  char buffer[10];
  String tempF = dtostrf(tempC, 4, 1, buffer);
  updateTemp(tempF);
  //  sendDebug("fahrenheit");
  //  sendDebug(tempF);
  delay(6000); //was 60000
}

void updateTemp(String tenmpF){
  String cmd = "AT+CIPSTART=\"TCP\",\"";
  cmd += IP;
  cmd += "\",80";
  sendDebug(cmd);
  delay(2000);
//  if(Serial.find("Error")){
//    monitor.print("RECEIVED:    Error");
//    return;
//  }
  cmd = GET;
  cmd += tenmpF;
  cmd += "\r\n";
  Serial.print("AT+CIPSEND=");
  Serial.println(cmd.length());
  if(Serial.find(">")){
    monitor.print(">");
    monitor.print(cmd);
    Serial.print(cmd);
  }
  else{
    sendDebug("AT+CIPCLOSE");
  }
  if(Serial.find("OK")){
    monitor.println("RECEIVED:   OK");
  }
  else{
    monitor.println("RECEIVED:   Error");
  }
}
void sendDebug(String cmd){
  monitor.print("SEND: ");
  monitor.println(cmd);
  Serial.println(cmd);
} 

boolean connectWiFi(){
  Serial.println("AT+CWMODE=1");
  delay(2000);
  String cmd="AT+CWJAP=\"";
  cmd+=SSID;
  cmd+="\",\"";
  cmd+=PASS;
  cmd+="\"";
  sendDebug(cmd);
  delay(5000);
  if(Serial.find("OK")){
    monitor.println("RECEIVED: OK");
    return true;
  }
  else{
    monitor.println("RECEIVED: Error");
    return false;
  }
}