Arduino WIFI con ESP8266-01

Buenas noches:

Ya tengo programado un ESP8266 con IDE, me parece que ya no hay órdenes AT.
Puedo programar por separado el ESP8266-01 Y Aduino UNO por separado y después unirlos vía serial?
Por supuesto con un divisor de voltaje en RX del ESP.
He probado con Serial2 y nada me pierdo. Una ayuda por favor.

Gracias

Cual es Serial2? Ninguno de los dos tienes 2 Seriales y menos 3. Ya que mencionas Serial2 lo que surge de la existencia de un Serial, Serial1, Serial2, Serial3. Los únicos que responden a eso son el MEGA y el DUE

Si puedes programarlos independientemente, de hecho muchos y yo mismo lo hacemos de ese modo.

Para programar el IDE necesitas un conversor USB serial to TTL. Y además agregar lo necesario al IDE para que reconozca los chips Expressif ESP8266

Lo que debes hacer en el UNO es crear un puerto Serie Virtual usando SoftwareSerial en cualquiera de los pines del 2 al 13.
Y conectarte con el ESP01 usando el divisor indicado.

Gracias Surbyte:

Si tengo todo instalado (ttl/USB y ESP8266 en el IDE), ya veo que Serial2... solo es para Arduino Mega y otros.

Desde ESP8266 hacia el Arduino sería por Serial.Print? (Programado desde USB/ttl)
Desde Arduino UNO para seguimiento Serial. Print y me dices que un Serial Virtual?

Cual es la función para hacer un serial virtual?

Gracias

Lo que debes hacer en el UNO es crear un puerto Serie Virtual usando SoftwareSerial en cualquiera de los pines del 2 al 13.

He empezado con el ESP8266, no soy capaz de extraer los datos.

#include <SoftwareSerial.h>
#include <ESP8266WiFi.h>

const char* ssid = "xxxxx";
const char* password = "xxxxxxxx";
int escalon1, escalon2;
// the IP address for the shield:
IPAddress ip(192, 168, 1, 101);
IPAddress gateway(192, 168, 1, 1); 
IPAddress subnet(255, 255, 255, 0); 

WiFiServer server(80);

void setup() {
  WiFi.config(ip, gateway, subnet);
  Serial.begin(9600);
  delay(10);

  //Configuración  del GPIO2
  pinMode(2, OUTPUT);
  digitalWrite(2,LOW);
  
  
  Serial.println();
  Serial.println();
  Serial.print("Conectandose a red : ");
  Serial.println(ssid);
  
  WiFi.begin(ssid, password); //Conexión a la red
  
  while (WiFi.status() != WL_CONNECTED)
  {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi conectado");
  
  
  server.begin(); //Iniciamos el servidor
  Serial.println("Servidor Iniciado");


  Serial.println("Ingrese desde un navegador web usando la siguiente IP:");
  Serial.println(WiFi.localIP()); //Obtenemos la IP
}

void loop() {
  
  WiFiClient client = server.available();
  if (client) //Si hay un cliente presente
  { 
    Serial.println("Nuevo Cliente");
    
    //esperamos hasta que hayan datos disponibles
    while(!client.available()&&client.connected())
    {
    delay(1);
    }
    
    // Leemos la primera línea de la petición del cliente.
    String linea1 = client.readStringUntil('r');
    Serial.println(linea1);

    if (linea1.indexOf("LED=ON")>0) //Buscamos un LED=ON en la 1°Linea
    {
      digitalWrite(2,HIGH);
    }
    if (linea1.indexOf("LED=OFF")>0)//Buscamos un LED=OFF en la 1°Linea
    {
      digitalWrite(2,LOW);
    }
    
    client.flush(); 
                
    Serial.println("Enviando respuesta...");   
    //Encabesado http    
    client.println("HTTP/1.1 200 OK");
    client.println("Content-Type: text/html");
    client.println("Connection: close");// La conexión se cierra después de finalizar de la respuesta
    client.println();
    //Pagina html  para en el navegador
    client.println("<!DOCTYPE HTML>");
    client.println("<html>");
    client.println("<meta http-equiv='Content-Type' content='text/html; charset=utf-8'>");
    client.println("<head><title>Prueba</title>");
    client.println("<body >");
    client.println("<h1 style='color:red'; align='center'>Prueba V0</h1>");
    client.println("<div style='text-align:center;'>");
    client.println("
");            
    client.println("<button onClick=location.href='./?LED=ON'>LED ON</button>");           
    client.println("<button onClick=location.href='./?LED=OFF'>LED OFF</button>");
    client.println("
");
    client.println("</div>");
    client.println("<form action='/my-handling-form-page' method='post'>");
    client.println("<div>");
    client.println("<label for='escalon1'>Escalón 1:</label>");
    client.println("<input type='number' id='escalon1' />");
    client.println("</div>");
    client.println("<div>");
    client.println("<label for='escalon2'>Escalón 2:</label>");
    client.println("<input type='number' id='escalon2' />");
    client.println("</div>");
    client.println("<div>");
    client.println("<label for='msg'>Message:</label>");
    client.println("<textarea id='msg'></textarea>");
    client.println("</div>");
    client.println("<button onClick=location.href='submit'>Send your message</button>");
    client.println("</div>");
    client.println("</form>");
    client.println("</body>");
    client.println("</html>");
    
    delay(1);
    Serial.println("respuesta enviada");
    Serial.println();
    Serial.println(escalon1);
    Serial.println(escalon2);

  }
}

Salida serial

.
WiFi conectado
Servidor Iniciado
Ingrese desde un navegador web usando la siguiente IP:
192.168.1.101
Nuevo Cliente
GET /my-handling-fo
Enviando respuesta...
respuesta enviada

0
0
Nuevo Cliente
GET /favicon.ico HTTP/1.1
Host: 192.168.1.101
Connection: keep-alive
P
Enviando respuesta...
respuesta enviada

0
0
Nuevo Cliente

En tu código no veo nada que lea datos HTML!!

Te falta un client.read(), algo asi:

char c = client.read(); // read 1 byte (character) from client
                HTTP_req += c;  // save the HTTP request 1 char at a time
                // last line of client request is blank and ends with \n

Mi capacidad de entendimiento a quedado superado, usando los módulos por separado.

¿Cómo configuro el ESP8266-01 para usarlo desde el Arduino , una vez que fueron programados en IDE?

Y así usarlo cómo en la mayoría de los ejemplos de la web.

Mas alla que quedes o no superado lo importante es entender.

cliente.print() actúa de modo similar a un Serial.print()

client.read() es lo mismo que Serial.read()

El ESP01 lo puedes usar de dos maneras, ambas via serie pero una es programándolo por su cuenta y otra como una extensión del Arduino usando comandos AT.

La opción que estas usando es la primera (por su cuenta).

Como lo usas desde el Arduino, pues interactuando datos via puerto Serie.

Hola,
En este enlace pongo cómo programar el esp8266 directamente con Arduino uno, sin usar el adaptador.

Lo primero, bajarle la velocidad, lo suelen entregar a 115200, hay que ponerlo en 9600 baudios.

Hola gracias,

Lo que pasa que al programarlo con IDE, creo que desapareció todo lo que tenía para programar en AT.

Voy a seguir con las indicaciones de SurByte sobre la comunicación serial.