[Aporte] Modulo Wifi ESP8266

Usar el módulo mediante comandos AT puede volverse una pesadilla con un proyecto grande teniendo en cuenta que el firmware no es perfecto y se cuelga a veces. Yo cambiaría de enfoque y programaría directamente el ESP8266 para que haga lo que le pida sin necesidad de poner en medio un PIC. Internamente el modulo tiene un procesador de 80MHz y mucha memoria para hacer programas complejos. Tienes el kit de desarrollo de Espressive muy bien explicado y con tutoriales en la comunidad de esp8266.com pero si lo quieres hacer más "familiar" lo puedes programar directamente usando el IDE de arduino. Hay miles de ejemplos en la red para poder hacerlo.

https://github.com/esp8266/Arduino
 
pero es muy complejo que el pic lea lo que envie el ESP8266? si yo pudiera leer eso como te decia por ejemplo L01 el pic, yo despues median if, switch o lo que sea puedo hacer que haga algo, solo que envie cosas asi L01, L02, L03 y bla bla bla... entonces enciende una luz, u otra u otra y asi y otra cosa jamas programe los ESP ni arduino, solo pic con ccs. pero lo que nose como hacer para leer eso
 
Hola necesito ayuda con ESP8266
Me compre un ESP8266, para comenzar a manejarlo y a familiarizarme con los comandos AT lo compre junto con un CP2102.

Para las conexiones me base en el diagrama siguiente

En la computadora instalé Tera Term para la comunicación, en la interfaz de Tera cundo energizo el ESP8266 me aparece la información típica de versión y la leyenda Ready.

Pero cuando quiero enviar el primer comando AT+GMR y pulso enter no hace nada solo el cursor se posiciona sobre la letra A.

Alguien me podría apoyar en que estoy equivocándome.
 

Adjuntos

  • ESP8266-FTDI_fritzing_01.png
    ESP8266-FTDI_fritzing_01.png
    32.3 KB · Visitas: 32
Me parece que no tienes bien configurado el terminal y no envía el retorno de carro.
Yo perdí un par de horas el otro día por esa tontería.
 
Hablando del tema, estoy siguiendo estos manuales:
http://www.prometec.net/arduino-wifi/
Pero uso linux en lugar de windows, con el segundo manual no puedo enviar datos al PC, me huele a que hay que configurar el firewall o algo parecido porque dice que no responde el cliente en la IP de mi PC.

¿Puede ser eso?¿Como se abre ese puerto o lo que sea? Estoy usando linux mint 18


Edito, pues he probado desconectando cortafuegos y tampoco...
Da error en lugar de ok al enviar el comando de establecer la conexión
 
Última edición:
Gracias, el problema si era la configuración de la Terminal TERA TERM.

Después de cada comando, el ESP8266 espera los caracteres especiales de nueva línea <CR><LF> para ejecutar el comando.

Encontré la información en el siguiente archovo.
:apreton:
 

Adjuntos

  • ISTD-034.pdf
    573.7 KB · Visitas: 57
Consulta : Al entrar a un local de comidas rapidas, me conecto a su red wifi libre y ni bien abro el explorador ingreso a sus paginas cuando yo tenia seteado google como inicio, en algun lado lo vi y esto era posible hacerlo con un ESP8266, osea la idea seria poner el modulo ESP como router wifi y al abrir el explorador directamente entraria a mi pagina creada en el arduino/micro, sin poner direcciones ip. Si alguno sabe como hacerlo seria bueno compartirlo.
 
Hola, estoy intentando hacer un sistema de automatización para una casa. Estoy utilizando el modulo Nodemcu. La idea es que cada habitación contenga un modulo y es controlada mediante una pagina en html. El problema se da cuando enciendo todos los módulos, por alguna razón no funciona ninguno. Pero si solo tengo uno funcionando este si responde a la acción en lque se elija en la pagina. Los módulos se conectan al wifi de i casa ya que por puerto serial me informa, pero no puedo acceder a ellos a través de la pagina que utiliza una IP fija correspondiente a cada modulo para acceder a ello. Si les sirve les adjunto el código. Básicamente los códigos de cada modulo son iguales, solo cambia en la parte del loop al momento de decidir a que función dirigirse dependiendo lo almacenado en request.
Código:
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <EEPROM.h>
#include <Servo.h>

//-------------------VARIABLES GLOBALES--------------------------

int contconexion = 0;
unsigned long previousMillis = 0;

char ssid[50];     
char pass[50];

const char *ssidConf = "wifiConf";
const char *passConf = "12345678";

IPAddress ip(192,168,1,200);     
IPAddress gateway(192,168,1,1);   
IPAddress subnet(255,255,255,0); 

String mensaje = "";

int value = LOW;
int grados=0;
int pos=0;
int lado;
      

WiFiClient espClient;
ESP8266WebServer server(80);
WiFiServer server1(80);
WiFiClient client = server1.available();


Servo cortina;

//-------------------Variables de la casa---------------------

int luz1_cocina=5;            //D1
int luz2_cocina=4;            //D2
int cortina1_cocina=0;        //D3
int cortina2_cocina=2;        //D4
int microf_cocina=12;         //D6
int cargar_password=13;       //D7

//-----------CODIGO HTML PAGINA DE CONFIGURACION---------------

String pagina = "<!DOCTYPE html>"
"<html>"
"<head>"
"<title>Tutorial Eeprom</title>"
"<meta charset='UTF-8'>"
"</head>"
"<body>"
"</form>"
"<form action='guardar_conf' method='get'>"
"SSID:<br><br>"
"<input class='input1' name='ssid' type='text'><br>"
"PASSWORD:<br><br>"
"<input class='input1' name='pass' type='password'><br><br>"
"<input class='boton' type='submit' value='GUARDAR'/><br><br>"
"</form>"
"<a href='escanear'><button class='boton'>ESCANEAR</button></a><br><br>";

String paginafin = "</body>"
"</html>";

//------------------------SETUP WIFI-----------------------------
void setup_wifi() {
// Conexión WIFI
  WiFi.mode(WIFI_STA); //para que no inicie el SoftAP en el modo normal
  WiFi.config(ip, gateway, subnet);
  WiFi.begin(ssid, pass);
 
  while (WiFi.status() != WL_CONNECTED and contconexion <50)
    { //Cuenta hasta 50 si no se puede conectar lo cancela
    ++contconexion;
    delay(250);
    Serial.print(".");
  }
  if (contconexion <50) {   
      Serial.println("");
      server1.begin();
      Serial.println("WiFi conectado");
      // Muestro la IP local asignada. URL del servidor
      Serial.print("Usa esta URL para conectar al servidor: ");
      Serial.println(WiFi.localIP());
      Serial.println(ssid);
      Serial.println(pass);
  }
  else {
      Serial.println("");
      Serial.println("Error de conexion");
  }
}


//-------------------PAGINA DE CONFIGURACION--------------------
void paginaconf() {
  server.send(200, "text/html", pagina + mensaje + paginafin);
}

//--------------------MODO_CONFIGURACION------------------------
void modoconf() {

  WiFi.softAP(ssidConf, passConf);
  IPAddress myIP = WiFi.softAPIP();
  Serial.print("IP del acces point: ");
  Serial.println(myIP);
  Serial.println("WebServer iniciado...");

  server.on("/", paginaconf); //esta es la pagina de configuracion

  server.on("/guardar_conf", guardar_conf); //Graba en la eeprom la configuracion

  server.on("/escanear", escanear); //Escanean las redes wifi disponibles
 
  server.begin();

  while (true) {
      server.handleClient();
  }
}

//---------------------GUARDAR CONFIGURACION-------------------------

void guardar_conf() {
 
  Serial.println(server.arg("ssid"));//Recibimos los valores que envia por GET el formulario web
  grabar(0,server.arg("ssid"));
  Serial.println(server.arg("pass"));
  grabar(50,server.arg("pass"));

  mensaje = "Configuracion Guardada...";
  paginaconf();
}

//----------------Función para grabar en la EEPROM-------------------

void grabar(int addr, String a) {
  int tamano = a.length();
  char inchar[50];
  a.toCharArray(inchar, tamano+1);
  for (int i = 0; i < tamano; i++) {
    EEPROM.write(addr+i, inchar[i]);
  }
  for (int i = tamano; i < 50; i++) {
    EEPROM.write(addr+i, 255);
  }
  EEPROM.commit();
}

//-----------------Función para leer la EEPROM------------------------

String leer(int addr) {
   byte lectura;
   String strlectura;
   for (int i = addr; i < addr+50; i++) {
      lectura = EEPROM.read(i);
      if (lectura != 255) {
        strlectura += (char)lectura;
      }
   }
   return strlectura;
}

//---------------------------ESCANEAR----------------------------

void escanear() { 
  int n = WiFi.scanNetworks(); //devuelve el número de redes encontradas
  Serial.println("escaneo terminado");
  if (n == 0) { //si no encuentra ninguna red
    Serial.println("no se encontraron redes");
    mensaje = "no se encontraron redes";
  } 
  else
  {
    Serial.print(n);
    Serial.println(" redes encontradas");
    mensaje = "";
    for (int i = 0; i < n; ++i)
    {
      // agrega al STRING "mensaje" la información de las redes encontradas
      mensaje = (mensaje) + "<p>" + String(i + 1) + ": " + WiFi.SSID(i) + " (" + WiFi.RSSI(i) + ") Ch: " + WiFi.channel(i) + " Enc: " + WiFi.encryptionType(i) + " </p>\r\n";
      //WiFi.encryptionType 5:WEP 2:WPA/PSK 4:WPA2/PSK 7:open network 8:WPA/WPA2/PSK
      delay(10);
    }
    Serial.println(mensaje);
    paginaconf();
  }
}


//--------------------------funcion PINES--------------------------

void pines(){
 
  //Cocina
  pinMode(luz1_cocina, OUTPUT);
  digitalWrite(luz1_cocina, LOW);
  pinMode(luz2_cocina, OUTPUT);
  digitalWrite(luz2_cocina, LOW);

  //cargar_password
  pinMode(cargar_password,INPUT);
  }

//------------------------------SETUP----------------------------------

void setup() {
 
  // Inicia Serial
  Serial.begin(115200);
  Serial.println("");
  pines();
  EEPROM.begin(512);
 
  if (digitalRead(cargar_password) == 0) {
    Serial.println("Bienvenido al modo configuracion");
    modoconf();
  }
 
  leer(0).toCharArray(ssid, 50);
  leer(50).toCharArray(pass, 50);
 
  setup_wifi();     
}

//--------------------------LOOP--------------------------------

void loop() {
 
  // Compruebo si hay un cliente disponible (una petición)
 
  WiFiClient client = server1.available();
 
  if (!client) {
    return; // En caso de no haber un cliente, no hago nada
  }
 
  // Espero hasta que el cliente realice una petición
 
  Serial.println("¡Nuevo cliente!");
  while(!client.available()){
    delay(1);
  }
 
  // Leo la primera linea de la petición del cliente
 
  String request = client.readStringUntil('\r');     // Leo hasta retorno de carro
  //Serial.println(request);                         //Imprimo la petición
  client.flush();                                    //Limpio el buffer
 

  //LLamo a las funciónes 
      
 if (request.indexOf("/cocina")!=-1)
        cocina(request); 

 if(request.indexOf("/predeterminados")!=-1)
        predeterminados(request);   
   delay(1000);
}

//----------------------funcion Cocina---------------------------

void cocina(String request){
   //cortinas
  if(request.indexOf("/cortina1=izq")!=-1 ){
    lado=1;
    Cortina(lado, cortina1_cocina);
  }
   if(request.indexOf("/cortina1=der")!=-1){
    lado=0;
    Cortina(lado, cortina1_cocina);
  }
  if(request.indexOf("/cortina2=izq")!=-1){
    lado=1;
    Cortina(lado, cortina2_cocina);
  }
   if(request.indexOf("/cortina2=der")!=-1){
    lado=0;
    Cortina(lado, cortina2_cocina);
  }
    
  //luz
  if(request.indexOf("/luz1=on")!=-1){
    lado=1;
    Luz(lado, luz1_cocina);
  }
  if(request.indexOf("/luz1=off")!=-1){
    lado=0;
    Luz(lado, luz1_cocina);
  }
  if(request.indexOf("/luz2=on")!=-1){
    lado=1;
    Luz(lado, luz2_cocina);
  }
  if(request.indexOf("/luz2=off")!=-1){
    lado=0;
    Luz(lado, luz2_cocina);
  }
}

//-----------------funcion predeterminados----------------------------

void predeterminados(String request){
  if(request.indexOf("/opcion1")){
    predet_1();
    }
  if(request.indexOf("/opcion2")){
    predet_2();
    }
  if(request.indexOf("/opcion3")){
    predet_3();
    }
  }

//------------------------PREDETERMINADOS---------------------

//------------------------opcion 1 --------------------------
//Enciende todas las luces de la cocina y cierra las cortinas

void predet_1(){
  delay(1000);
  Luz(1,luz1_cocina);
  delay(1000);
  Luz(1,luz2_cocina);
  delay(1000);
  Cortina(0,cortina1_cocina);
  delay(1000);
  Cortina(0,cortina2_cocina);
  delay(1000);
 }

//------------------------opcion 2 --------------------------
//apaga todas las luces de la casa y cierra todas las cortinas

void predet_2(){
 
  delay(1000);
  Luz(0,luz1_cocina);
  delay(1000);
  Luz(0,luz2_cocina);
  delay(1000);
 
  Cortina(0,cortina1_cocina);
  delay(1000);
  Cortina(0,cortina2_cocina);
  delay(1000); 
 
  }

//------------------------opcion 3 --------------------------
//apaga todas las luces de la casa y abre todas las cortinas

void predet_3(){
  delay(1000);
  Luz(0,luz1_cocina);
  delay(1000);
  Luz(0,luz2_cocina);
  delay(1000);
 
  Cortina(1,cortina1_cocina);
  delay(1000);
  Cortina(1,cortina2_cocina);
  delay(1000);
    
 }

//------------------------FUNCIUONES DE SALIDA--------------------
//----------------------funcion cortina-------------------------------

void Cortina(int lado, int pin){
 
   Serial.println("accion: Cortina");
  cortina.attach(pin);
 
  if (lado==1){
    if (pos==0){
      for (grados=0;grados<=180;grados+=1){
        cortina.write(grados);
        delay(5);
          }
        }
      pos=1;
    }
      
  if (lado==0){
    if (pos==1){ 
      for (grados=180;grados>=0;grados -=1){
      cortina.write(grados);
      delay(5);
        }
      }
      pos=0;
  }
}
 
//---------------------funcion Luz----------------------------

void Luz(int lado, int pin){
  Serial.println("accion: Luz");
 
    if (lado==1)  {
    digitalWrite(pin, HIGH);
  }
  if (lado==0)  {
    digitalWrite(pin, LOW);
  }
}

Al principio pense que se debia a que todos trabajan con el mismo puerto (80), pero la verdad que desconozco un poco del tema y no se si eso tiene sentido.
 
Modifica el código para que cada módulo espere una cantidad de tiempo aleatorio antes de intentar la primera conexión, por ejemplo, entre 500 y 5000 milisegundos.
C:
delay(random(500, 5000));
Recuerda que cada módulo debe tener una IP distinta, o solicitarla al servidor de DHCP de la red.
 
Modifica el código para que cada módulo espere una cantidad de tiempo aleatorio antes de intentar la primera conexión, por ejemplo, entre 500 y 5000 milisegundos.
C:
delay(random(500, 5000));
Recuerda que cada módulo debe tener una IP distinta, o solicitarla al servidor de DHCP de la red.
Hola joaquin, gracias por tu respuesta. Asi es, cada modulo cuenta con una ip distinta, vario el ultimo numero de la misma.

Acabo de darme cuenta que la comunicación con los módulos se me inhibe cuando conecto otro modulo que funciona como cliente. La idea de este es que haga las peticiones en html mientras es controlado por firebase desde una red externa a la casa. si yo conecto los módulos sin el cliente me funcionan los 4 juntos. Pero cuando enciendo el cliente no me funciona ninguno incluyendo el cliente (pero me muestra por puerto serie que si se conecto al wifi). El codigo del cliente es el siguiente
Código:
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <EEPROM.h>
#include <Servo.h>
#include <FirebaseArduino.h>

//-------------------VARIABLES GLOBALES--------------------------
#define FIREBASE_HOST "casaeri.firebaseio.com"    
#define FIREBASE_AUTH "Wb8vIs2kmFe2Krq8j2u2F4Aj9VhhX7c6PzzqOJNB"

int contconexion = 0;
unsigned long previousMillis = 0;

char ssid[50];    
char pass[50];

const char *ssidConf = "wifiConf";
const char *passConf = "12345678";

const char* cocina = "192.168.1.200";
const char* dormitorio_bano = "192.168.1.201";
const char* oficina = "192.168.1.202";

String mensaje = "";

int value = LOW;
int grados=0;
int pos=0;
int lado;
int cargar_password=13;       //D7

WiFiClient espClient;
ESP8266WebServer server(80);
WiFiServer server1(80);
WiFiClient client = server1.available();


//-----------CODIGO HTML PAGINA DE CONFIGURACION---------------

String pagina = "<!DOCTYPE html>"
"<html>"
"<head>"
"<title>Configuracion</title>"
"<meta charset='UTF-8'>"
"</head>"
"<body>"
"</form>"
"<form action='guardar_conf' method='get'>"
"SSID:<br><br>"
"<input class='input1' name='ssid' type='text'><br>"
"PASSWORD:<br><br>"
"<input class='input1' name='pass' type='password'><br><br>"
"<input class='boton' type='submit' value='GUARDAR'/><br><br>"
"</form>"
"<a href='escanear'><button class='boton'>ESCANEAR</button></a><br><br>";

String paginafin = "</body>"
"</html>";

//------------------------SETUP WIFI-----------------------------
void setup_wifi() {
// Conexión WIFI
  WiFi.mode(WIFI_STA); //para que no inicie el SoftAP en el modo normal
  WiFi.begin(ssid, pass);

  while (WiFi.status() != WL_CONNECTED and contconexion <50)
    { //Cuenta hasta 50 si no se puede conectar lo cancela
    ++contconexion;
    delay(250);
    Serial.print(".");
  }
  if (contconexion <50) {  
      Serial.println("");
      server1.begin();
      Serial.println("WiFi conectado");
      // Muestro la IP local asignada. URL del servidor
      Serial.print("Usa esta URL para conectar al servidor: ");
      Serial.println(WiFi.localIP());
      Serial.println(ssid);
      Serial.println(pass);
  }
  else {
      Serial.println("");
      Serial.println("Error de conexion");
  }
}


//-------------------PAGINA DE CONFIGURACION--------------------
void paginaconf() {
  server.send(200, "text/html", pagina + mensaje + paginafin);
}

//--------------------MODO_CONFIGURACION------------------------
void modoconf() {

  WiFi.softAP(ssidConf, passConf);
  IPAddress myIP = WiFi.softAPIP();
  Serial.print("IP del acces point: ");
  Serial.println(myIP);
  Serial.println("WebServer iniciado...");

  server.on("/", paginaconf); //esta es la pagina de configuracion

  server.on("/guardar_conf", guardar_conf); //Graba en la eeprom la configuracion

  server.on("/escanear", escanear); //Escanean las redes wifi disponibles

  server.begin();

  while (true) {
      server.handleClient();
  }
}

//---------------------GUARDAR CONFIGURACION-------------------------

void guardar_conf() {

  Serial.println(server.arg("ssid"));//Recibimos los valores que envia por GET el formulario web
  grabar(0,server.arg("ssid"));
  Serial.println(server.arg("pass"));
  grabar(50,server.arg("pass"));

  mensaje = "Configuracion Guardada...";
  paginaconf();
}

//----------------Función para grabar en la EEPROM-------------------

void grabar(int addr, String a) {
  int tamano = a.length();
  char inchar[50];
  a.toCharArray(inchar, tamano+1);
  for (int i = 0; i < tamano; i++) {
    EEPROM.write(addr+i, inchar[i]);
  }
  for (int i = tamano; i < 50; i++) {
    EEPROM.write(addr+i, 255);
  }
  EEPROM.commit();
}

//-----------------Función para leer la EEPROM------------------------

String leer(int addr) {
   byte lectura;
   String strlectura;
   for (int i = addr; i < addr+50; i++) {
      lectura = EEPROM.read(i);
      if (lectura != 255) {
        strlectura += (char)lectura;
      }
   }
   return strlectura;
}

//---------------------------ESCANEAR----------------------------

void escanear() {
  int n = WiFi.scanNetworks(); //devuelve el número de redes encontradas
  Serial.println("escaneo terminado");
  if (n == 0) { //si no encuentra ninguna red
    Serial.println("no se encontraron redes");
    mensaje = "no se encontraron redes";
  }
  else
  {
    Serial.print(n);
    Serial.println(" redes encontradas");
    mensaje = "";
    for (int i = 0; i < n; ++i)
    {
      // agrega al STRING "mensaje" la información de las redes encontradas
      mensaje = (mensaje) + "<p>" + String(i + 1) + ": " + WiFi.SSID(i) + " (" + WiFi.RSSI(i) + ") Ch: " + WiFi.channel(i) + " Enc: " + WiFi.encryptionType(i) + " </p>\r\n";
      //WiFi.encryptionType 5:WEP 2:WPA/PSK 4:WPA2/PSK 7:open network 8:WPA/WPA2/PSK
      delay(10);
    }
    Serial.println(mensaje);
    paginaconf();
  }
}


//------------------------SETUP-----------------------------

void setup() {

  // Inicia Serial
  Serial.begin(115200);
  Serial.println("");
  EEPROM.begin(512);
     
  pinMode(cargar_password, INPUT);
  if (digitalRead(cargar_password) == LOW) {
    Serial.println("Bienvenido al modo configuracion");
    modoconf();
  }

  leer(0).toCharArray(ssid, 50);
  leer(50).toCharArray(pass, 50);

  setup_wifi();

  Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH);
     
}

//--------------------------LOOP--------------------------------

void loop() {
  // Compruebo si hay un cliente disponible (una petición)

  String modo= Firebase.getString("modo");

  WiFiClient client;

  //LLamo a las funciónes      
  if (modo == "\"externo\"")
      Control_Externo();
  delay(1000);
}




//----------------------FUNCIONES DE CONTROL EXTERNO---------------------

//-----------------------funcion Control_externo-------------------

void Control_Externo(){

    Serial.println("Contorl externo");
   
    if (Firebase.getString("cocina")!="\"0\"")
          cocina_ext();
    if (Firebase.getString("baño")!="\"0\"")
        bano_ext();
    if (Firebase.getString("dormitorio")!="\"0\"")
        dormitorio_ext();
    if (Firebase.getString("oficina")!="\"0\"")
        oficina_ext();
    if(Firebase.getString("predeterminados")!="\"0\"")
        predeterminados_ext();
       
  }
//----------------------funcion Cocina---------------------------

void cocina_ext(){
   Serial.println("Control cocina");
   //cortinas
  if(Firebase.getString("cocina")== "\"cortina1_izq\"") {
    if (client.connect(cocina, 80))
      {
        client.print(String("GET /cocina/cortina1=izq") + " HTTP/1.1\r\n" +"Host: " + cocina + "\r\n" +"Connection: close\r\n" +"\r\n");
        client.stop();
        Serial.println("cortina1 abierta");
      }  
  }
   if(Firebase.getString("cocina")== "\"cortina1_der\""){
    if (client.connect(cocina, 80))
      {
        client.print(String("GET /cocina/cortina1=der") + " HTTP/1.1\r\n" +"Host: " + cocina + "\r\n" +"Connection: close\r\n" +"\r\n");
        client.stop();
        Serial.println("cortina1 cerrada");
      }

  }
  if(Firebase.getString("cocina")== "\"cortina2_izq\""){
    if (client.connect(cocina, 80))
      {
        client.print(String("GET /cocina/cortina2=izq") + " HTTP/1.1\r\n" +"Host: " + cocina + "\r\n" +"Connection: close\r\n" +"\r\n");
        client.stop();
        Serial.println("cortina2 abierta");
      }

  }
   if(Firebase.getString("cocina")== "\"cortina2_der\""){
    if (client.connect(cocina, 80))
      {
        client.print(String("GET /cocina/cortina2=der") + " HTTP/1.1\r\n" +"Host: " + cocina + "\r\n" +"Connection: close\r\n" +"\r\n");
        client.stop();
        Serial.println("cortina2 cerrada");
      }

  }
   
  //luz
  if(Firebase.getString("cocina")== "\"luz1On\""){
    if (client.connect(cocina, 80))
      {
        client.print(String("GET /cocina/luz1=on") + " HTTP/1.1\r\n" +"Host: " + cocina + "\r\n" +"Connection: close\r\n" +"\r\n");
        client.stop();
        Serial.println("luz1 on");
      }

  }
  if(Firebase.getString("cocina")== "\"luz1Off\""){
    if (client.connect(cocina, 80))
      {
        client.print(String("GET /cocina/luz1=off") + " HTTP/1.1\r\n" +"Host: " + cocina + "\r\n" +"Connection: close\r\n" +"\r\n");
        client.stop();
        Serial.println("luz1 off");
      }

  }
  if(Firebase.getString("cocina")== "\"luz2On\""){
    if (client.connect(cocina, 80))
      {
        client.print(String("GET /cocina/luz2=on") + " HTTP/1.1\r\n" +"Host: " + cocina + "\r\n" +"Connection: close\r\n" +"\r\n");
        client.stop();
        Serial.println("luz2 on");
      }

  }
  if(Firebase.getString("cocina")== "\"luz2Off\""){
    if (client.connect(cocina, 80))
      {
        client.print(String("GET /cocina/luz1=off") + " HTTP/1.1\r\n" +"Host: " + cocina + "\r\n" +"Connection: close\r\n" +"\r\n");
        client.stop();
        Serial.println("luz2 off");
      }

  }
}
//---------------------funcion baño-----------------------------

void bano_ext(){
   Serial.println("Control baño");  
  //luz
  if(Firebase.getString("bano")== "\"luzOn\""){
    if (client.connect(dormitorio_bano, 80))
      {
        client.print(String("GET /bano/luz=on") + " HTTP/1.1\r\n" +"Host: " + dormitorio_bano + "\r\n" +"Connection: close\r\n" +"\r\n");
        client.stop();
        Serial.println("luz on");
      }
  }
  if(Firebase.getString("bano")== "\"luzOff\""){
    if (client.connect(dormitorio_bano, 80))
      {
        client.print(String("GET /bano/luz=off") + " HTTP/1.1\r\n" +"Host: " + dormitorio_bano + "\r\n" +"Connection: close\r\n" +"\r\n");
        client.stop();
        Serial.println("luz off");
      }
  }
}
//-------------------funcion dormitorio----------------------------

void dormitorio_ext(){
  Serial.println("Control dormitorio");
   //cortinas
  if(Firebase.getString("dormitorio")== "\"cortina_izq\""){
    if (client.connect(dormitorio_bano, 80))
      {
        client.print(String("GET /dormitorio/cortina=izq") + " HTTP/1.1\r\n" +"Host: " + dormitorio_bano + "\r\n" +"Connection: close\r\n" +"\r\n");
        client.stop();
        Serial.println("cortina abierta");
      }
  }
   if(Firebase.getString("dormitorio")== "\"cortina_izq\""){
    if (client.connect(dormitorio_bano, 80))
      {
        client.print(String("GET /dormitorio/cortina=der") + " HTTP/1.1\r\n" +"Host: " + dormitorio_bano + "\r\n" +"Connection: close\r\n" +"\r\n");
        client.stop();
        Serial.println("cortina cerrada");
      }
  }  
  //luz
  if(Firebase.getString("dormitorio")== "\"luzOn\""){
    if (client.connect(dormitorio_bano, 80))
      {
        client.print(String("GET /dormitorio/luz=On") + " HTTP/1.1\r\n" +"Host: " + dormitorio_bano + "\r\n" +"Connection: close\r\n" +"\r\n");
        client.stop();
        Serial.println("luz on");
      }
  }
  if(Firebase.getString("dormitorio")== "\"luzOff\""){
    if (client.connect(dormitorio_bano, 80))
      {
        client.print(String("GET /dormitorio/luz=Off") + " HTTP/1.1\r\n" +"Host: " + dormitorio_bano + "\r\n" +"Connection: close\r\n" +"\r\n");
        client.stop();
        Serial.println("luz off");
      }
  }
  if (Firebase.getString("aire_acond")!= "\"0\"")
    aire_acond_ext();
}

//-----------------funcion aire acondicionado------------------------

void aire_acond_ext(){
  Serial.println("Control aire acondicionado");
  if(Firebase.getString("aire_acond")== "\"aire_acond_apagar\""){
    if (client.connect(dormitorio_bano, 80))
      {
        client.print(String("GET /dormitorio/aire_acond/apagar") + " HTTP/1.1\r\n" +"Host: " + dormitorio_bano + "\r\n" +"Connection: close\r\n" +"\r\n");
        client.stop();
        Serial.println("apagar");
      }
    }
  if(Firebase.getString("aire_acond")== "\"aire_acond_encender\""){
    if (client.connect(dormitorio_bano, 80))
      {
        client.print(String("GET /dormitorio/aire_acond/encender") + " HTTP/1.1\r\n" +"Host: " + dormitorio_bano + "\r\n" +"Connection: close\r\n" +"\r\n");
        client.stop();
        Serial.println("encender");
      }
    }
  if(Firebase.getString("aire_acond")== "\"aire_acond_abajo\""){
    if (client.connect(dormitorio_bano, 80))
      {
        client.print(String("GET /dormitorio/aire_acond/bajar_temp") + " HTTP/1.1\r\n" +"Host: " + dormitorio_bano + "\r\n" +"Connection: close\r\n" +"\r\n");
        client.stop();
        Serial.println("temp abajo");
      }
    }
  if(Firebase.getString("aire_acond")== "\"aire_acond_arriba\""){
    if (client.connect(dormitorio_bano, 80))
      {
        client.print(String("GET /dormitorio/aire_acond/subir_temp") + " HTTP/1.1\r\n" +"Host: " + dormitorio_bano + "\r\n" +"Connection: close\r\n" +"\r\n");
        client.stop();
        Serial.println("temp arriba");
      }
    }
  }

//---------------------funcion oficina-------------------------------

void oficina_ext(){
  Serial.println("Control oficina");
   //cortinas
  if(Firebase.getString("oficina")== "\"cortina1_izq\""){
    if (client.connect(oficina, 80))
      {
        client.print(String("GET /oficina/cortina=izq") + " HTTP/1.1\r\n" +"Host: " + oficina + "\r\n" +"Connection: close\r\n" +"\r\n");
        client.stop();
        Serial.println("cortina abierta");
      }
  }
   if(Firebase.getString("oficina")== "\"cortina1_izq\""){
    if (client.connect(oficina, 80))
      {
        client.print(String("GET /oficina/cortina=der") + " HTTP/1.1\r\n" +"Host: " + oficina + "\r\n" +"Connection: close\r\n" +"\r\n");
        client.stop();
        Serial.println("cortina cerrada");
      }
   
  }  
  //luz
  if(Firebase.getString("oficina")== "\"luzOn\""){
    if (client.connect(oficina, 80))
      {
        client.print(String("GET /oficina/luz=on") + " HTTP/1.1\r\n" +"Host: " + oficina + "\r\n" +"Connection: close\r\n" +"\r\n");
        client.stop();
        Serial.println("luz on");
      }
 
  }
  if(Firebase.getString("oficina")== "\"luzOff\""){
    if (client.connect(oficina, 80))
      {
        client.print(String("GET /oficina/luz=off") + " HTTP/1.1\r\n" +"Host: " + oficina + "\r\n" +"Connection: close\r\n" +"\r\n");
        client.stop();
        Serial.println("luz off");
      }
 
  }
}

//-----------------funcion predeterminados----------------------------

void predeterminados_ext(){
  Serial.println("Control predeterminados");
  if(Firebase.getString("predeterminado")== "\"opcion1\""){
    if (client.connect(cocina, 80))
      {
        client.print(String("GET /predeterminados/opcion1") + " HTTP/1.1\r\n" +"Host: " + cocina + "\r\n" +"Connection: close\r\n" +"\r\n");
        client.stop();
        Serial.println("opcion 1");
      }
   }
   if(Firebase.getString("predeterminado")== "\"opcion2\""){
    if (client.connect(cocina, 80))
      {
        client.print(String("GET /predeterminados/opcion2") + " HTTP/1.1\r\n" +"Host: " + cocina + "\r\n" +"Connection: close\r\n" +"\r\n");
        client.stop();
        Serial.println("opcion 2 cocina");
      }
    if (client.connect(dormitorio_bano, 80))
      {
        client.print(String("GET /predeterminados/opcion2") + " HTTP/1.1\r\n" +"Host: " + dormitorio_bano + "\r\n" +"Connection: close\r\n" +"\r\n");
        client.stop();
        Serial.println("opcion 2 baño_dormitorio");
      }
    if (client.connect(oficina, 80))
      {
        client.print(String("GET /predeterminados/opcion2") + " HTTP/1.1\r\n" +"Host: " + oficina + "\r\n" +"Connection: close\r\n" +"\r\n");
        client.stop();
        Serial.println("opcion 2 oficina");
      }
    }
   if(Firebase.getString("predeterminado")== "\"opcion3\""){
    if (client.connect(cocina, 80))
      {
        client.print(String("GET /predeterminados/opcion3") + " HTTP/1.1\r\n" +"Host: " + cocina + "\r\n" +"Connection: close\r\n" +"\r\n");
        client.stop();
        Serial.println("opcion 3 cocina");
      }
    if (client.connect(dormitorio_bano, 80))
      {
        client.print(String("GET /predeterminados/opcion3") + " HTTP/1.1\r\n" +"Host: " + dormitorio_bano + "\r\n" +"Connection: close\r\n" +"\r\n");
        client.stop();
        Serial.println("opcion 3 baño_dormitorio");
      }
    if (client.connect(oficina, 80))
      {
        client.print(String("GET /predeterminados/opcion3") + " HTTP/1.1\r\n" +"Host: " + oficina + "\r\n" +"Connection: close\r\n" +"\r\n");
        client.stop();
        Serial.println("opcion 3 oficina");
      }
    }

  }
 
Última edición:
Este modulo, en particular, no me gusta, sobre todo cuando lo quieres utilizar con fines experimentales, por las siguientes razones:
  • Necesitas en la mayoría de los casos un regulador 3.3V
  • Necesitas un adaptador USB FTDI
  • La mayoría de los pines del ESP8266 no son accesibles al usuario
  • para cargar el firmware debes hacer cambios en el circuito
  • Por la disposición de sus pines se dificulta mucho las conexiones en un protoboard
Prefiero siempre utilizar módulos mas flexibles como NODEMCU, ESP32, WEMOS D1, son mucho mas prácticos, tal vez un poco mas costosos pero pronto lo ves compensado cuando vas ganando en comodidad, te evitas circuiteria adicional y mucho dolor de cabeza

Sin embargo es de digno de agradecer, el tutorial esta muy bien explicado y documentado.
 
Última edición:
Este modulo, en particular, no me gusta, sobre todo cuando lo quieres utilizar con fines experimentales, por las siguientes razones:
  • Necesitas en la mayoría de los casos un regulador 3.3V
  • Necesitas un adaptador USB FTDI
  • La mayoría de los pines del ESP8266 no son accesibles al usuario
  • para cargar el firmware debes hacer cambios en el circuito
  • Por la disposición de sus pines se dificulta mucho las conexiones en un protoboard
Prefiero siempre utilizar módulos mas flexibles como NODEMCU, ESP32, WEMOS D1, son mucho mas prácticos, tal vez un poco mas costosos pero pronto lo ves compensado cuando vas ganando en comodidad, te evitas circuiteria adicional y mucho dolor de cabeza

Sin embargo es de digno de agradecer, el tutorial esta muy bien explicado y documentado.

Solo debes tomar en cuenta que cuando inicio este hilo, que fue en 2015, era una opción formidable que justamente llevaron al desarrollo de los módulos que listas. Y hoy en día sigue siendo una opción para el que ya tiene desarrollado algo muy especifico y que obviamente no requieres del FTDI siendo el método de expansión preferido, el protocolo I2C, que desde un principio ha estado disponible; así que tiene su merito al menos para mi.
esp8266-esp-01-i2c-lcd-pcf8574-1024x739.png


Incluso existen en el mercado, una buena cantidad de productos comerciales basados en este modulo, sin embargo coincido con usted que hoy en día para el que va a experimentar, es mas económico comenzar con los que mencionas.

Saludos.
 
Atrás
Arriba