Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
ESP8266 ESP-01 stand alone
#1
Hola buenas, saludos a todos y todas, voy a explicar cual es el proyecto que llevo en mente y a ver si alguien que controle de programación me puede dar una solución, ya que yo me dedico a robar código, pero a la hora de escribirlo ya me cuesta un poco.

El tema es que quiero poder hacer una lectura de temperatura de una habitación y poder encender o apagar una calefacción desde el móvil android, para ello quiero usar "solamente un ESP8266 ESP-01" nada más.

1º - El tema es que ya tengo el código configurado del módulo ESP8266 para que me lea un sensor de temperatura LM35 en la patilla gpio0 y que la información me la mande a la web thingspeak, te bajas luego la aplicación móvil y ya tienes un registro de temperatura de donde quieras conectado a tu wifi y pudiendo verlo con el móvil desde donde sea, hasta aquí perfecto, sin problemas.

2º - Con el código del punto anterior lo que hago es recoger datos y enviarlos a una web, pero lo que quiero ahora es poder "enviar" desde el teléfono móvil una señal para activar la patilla gpio2 y de esta forma activar o desactivar la calefacción.

Bien, los dos puntos por separado los tengo resueltos con sus respectivos códigos, el punto primero además de leer la temperatura y enviarla a thingspeak también me gestiona la temperatura de la habitación, actúa como termostato. 

Teniendo en cuenta los costos y demás, la verdad es que si uso dos módulos ESP8266 no me va a salir por mas de 5 euros, pero claro, pudiendo compactar todo en uno, pues eso que me ahorro luego en alimentar el circuito, menos engorros con IP´s y demás. Porque he pensado en usar un módulo ESP8266 para enviar la temperatura y usar otro módulo para mover el relé que actuará sobre la caldera, pero como soy cabezón, quiero hacerlo con tan sólo un, pero ahí es donde choco.

Voy a adjuntar los sketchs que estoy usando por separado, el tema sería poder unir los dos en uno, pero me es imposible por mis carencias en programación.

Sketch que lee la temperatura del sensor LM35 y la envía a thingspeak:

Código:
#include <ThingSpeak.h>
#include<ESP8266WiFi.h>

String apiKey = "xxxxxxxxxxxxxx";
const char* ssid = "ONOABAB";
const char* password = "xxxxxxxx";
const char* server = "api.thingspeak.com";
float temp= 0;

int analog=0;
const int pinled = 2;


WiFiClient client;
unsigned long myChannelNumber = xxxxxx;
const char * myWriteAPIKey = "xxxxxxx";

void setup() {

   // prepare GPIO2
 pinMode(1, OUTPUT);
 digitalWrite(1, 0);

pinMode(pinled, OUTPUT);  
 
 // put your setup code here, to run once:
Serial.begin(9600);
delay(10);
WiFi.begin(ssid, password);
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");
ThingSpeak.begin(client);
}

void loop() {


 // put your main code here, to run repeatedly:
analog=analogRead(0);



float temp= (5.0 * analog * 100.0)/1024.0;

     if (temp <=23)
     {
     digitalWrite(pinled, HIGH);
     }
     else
     {
     digitalWrite(pinled, LOW);
     }
 
 Serial.print("Temperatura: ");

 Serial.println(temp);
 Serial.println("Enviando datos...");
 Serial.println();
Serial.println("Midiendo temperatura....");
ThingSpeak.writeField(myChannelNumber, 1, temp, myWriteAPIKey);
delay(20000);
}

Sketch con el que, usando AppInventor envío un impulso a la patilla gpio0 del ESP8266:

Código:
#include <ESP8266WiFi.h>

const char* ssid = "xxxxxxx";
const char* password = "xxxxxx";

// 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
}

Pues eso, lo que me gustaría es poder combinar los dos códigos en uno y conseguir leer los datos del LM35 y poder recibir un impulso en la patilla gpio0, pero todo en un sólo módulo ESP8266.


Quizás sea la cosa mas chorra del mundo, pero me es totalmente imposible hacerme una idea de como hacerlo, y os aseguro que lo he intentado con mil combinaciones, pero nada, también decir que sé que hay mas opciones, módulos ESP8266 más grandes y con mas opciones de programación, que puedo usar un arduino nano o UNO, etc etc.....el tema es que quiero hacerlo en plan "stand alone", usar un simple módulo ESP8266 ESP-01 para conseguir esto....

¿Alguna ayuda?

Mil gracias por vuestro tiempo.
Citar
#2
Buenos días !
Solucionaste el tema?? Estoy empezando a trabajar con el NODEMCU y me parece muy interesante tu aporte!! :-)

Un saludo,
Citar
#3
Si, solucionado, ahora puedo enviar datos a thingspeak y recibir órdenes al esp8266 desde el móvil...puedo pasarte la info que necesites y el código que uso...
Citar
#4
Lo pueded subir al post y asi se queda completo? Sonrisa

Gracias
Citar
#5
Hola, genial !! Por favor si puedes pásamelo, estoy haciendo cosas así. Me encanta el NODEMCU, a parte que me han caído en las manos 5 de ellos por la cara y tengo que darles uso !! :-)

Por cierto, como lo alimentas? directo a corriente? Yo de momento los alimento con 2 pilas AAA, y les meto en DEEP SLEEP después de cada medición. Así me estan durando un par de semanas. No es una maravilla, pero compensa el tema de poderlos mover a mi antojo :-)

Un saludo
Citar
#6
Ostras perdona, pero creo que no te he contestado.....
Te comento, he conseguido con el ESP8266 poder activar o desactivar un relé, poder enviar valores de temperatura...........o sea, lo que he hecho ha sido sustituir el termostato analógico de toda la vida por uno digital, en el que poder seleccionar la temperatura de consigna y que me active/desactive la caldera, todo ello desde el teléfono móvil y desde cualquier parte del mundo.
Para todo ello he creado una aplicación con appinventor2 la cual me envía a través de una DDNS los datos y señales al ESP8266 a través de internet y a través de de thingspeak y agarrando el código JSON que crea la web, con appinventor, puedo monitorizar la temperaura de mi casa en todo momento.
Resumiendo, por menos de 8 euros tengo un termostato controlado desde el móvil, desde el que puedo enviar y recibir datos desde cualquier parte del mundo en tiempo real.

Voy a ponerme con un tutorial y lo subiré a la red, para que todo el mundo pueda copiarlo.

En cuanto a tu pregunta, y perdona por el rollo de arriba, yo para las pruebas uso una fuente ATX reciclada y para el circuito final estoy usando un viejo cargador de móvil de 5V que me entrega hasta 1A, sobrado.
Lo que pasa que para juntar toda la electrónica he hecho un circuito con EAGLE y he soldado los componentes, puesto que el sensor de temperatura DHT11 va a 5V, el relé a 5V y el ESP8266 funciona a 3.3V.


Si necesitas ayuda, aquí me tienes, un saludo.
Citar


Temas similares...
Tema Autor Respuestas Vistas Último mensaje
  Problemas subiendo codigo al ESP8266 igargi 6 4,862 18-09-2017, 04:04 AM
Último mensaje: CarlosTM
  ESP8266 y monitorización estado pines GPIO jgarridc 2 836 14-07-2017, 10:11 AM
Último mensaje: jgarridc
  Nuevo módulo ESP8285, el sustituto del ESP8266 grafisoft 12 5,124 29-01-2017, 08:06 PM
Último mensaje: davidpedr0