ESP8266 ESP-01 stand alone

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:

#include <ThingSpeak.h>
#include<ESP8266WiFi.h>
 
String apiKey = "S7I6STA5Y0HS2L64";
const char* ssid = "ONOABAB";
const char* password = "H44f4tjjk5Wj";
const char* server = "api.thingspeak.com";
float temp= 0;

int analog=0;
const int pinled = 2;

 
WiFiClient client;
unsigned long myChannelNumber = 266577;
const char * myWriteAPIKey = "S7I6STA5Y0HS2L64";
 
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:

#include <ESP8266WiFi.h>
 
const char* ssid = "ONOABAB";
const char* password = "H44f4tjjk5Wj";
 
// 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.

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

Imposible el ESP8266-01 no tiene ningun AD. Asi que no podrás leer la temperatura con un LM35 pero si con un DS18B20 que es digital.

Asi que cambia de sensor.
Por lo demás no tienes problemas porque debería funcionar.

Hola, te adjunto fotografía en la que se puede ver como el LM35 conectado al ESP8266 en modo stand alon me está enviando datos a thingspeak, a la vez que se puede ver por el monitor serie la salida de temperatura también. Yo también creía que con el LM35 no se podía, pero sí.

En cuanto a los sketchs, los dos funcionan correctamente puesto que los he testeado, lo que quiero es que los dos sketch se conviertan en uno solo para poder gestionar todo con un sólo módulo ESP8266.

La foto es tan chica que no se puede ver nada.
Porque no filmas un video.

Otra cosa que no creo.
ESP8266 trabaja con 3.3V como puedes usar esta línea

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

la copiaste mal? debería ser si fuera cierto 3.3V en lugar de 5.0 porque no hay referencia de 5V en un ESP sea el que sea.

Aunque nos estamos yendo del hilo, ya que yo voy por el tema del código....el ESP8266 trabaja a 3.3V pero el sensor de temperatura empieza a trabajar a partir de 5V, el circuito lo tengo alimentado con una fuente, con la que le doy 3.3V al ESP8266 y 5V al resto de circuito, o sea, el arduino UNO y el LM35.

Ahora subo link con el vídeo...
[

](Dropbox - File Deleted - Simplify your life)

No nos estamos yendo del hilo, estoy intentando entender que quieres hacer.

Ahora dices que usas el UNO para leer el LM35, yo entendí que usabas el ESP8266 para hacerlo.

para ello quiero usar "solamente un ESP8266 ESP-01" nada más

Lo que quieres es hacerlo sin el UNO?

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

Esto no es válido. NO existe AD en el GPIO0!!

Repito la imagen no se entiende. Puedes hacer un esquema.

Lo conseguí, gracias al foro de spainlabs he conseguido con tan solo un módulo esp8266 enviar temperatura a una web y recibir comandos para activar relés, todo por 5 euros..... increíble!!!!!

Pero no respondes lo que se te pregunta y nos tomamos el tiempo de responderte y por ende ayudarte si sirvió de algo claro.

Te contesté a tu privado y te envié un vídeo, lo que se me comentó por aquí no me valió para nada...

Hola saludos a tod@s, por aquí ando de nuevo.

Os cuento, el tema es que tras varios meses trasteando ya he conseguido enviar datos a la nube con el ESP8266 ESP01, también consigo mandar datos con una app que he hecho con appinventor y también consigo monitorizar el estado de un relé a través de la web, así que tengo un termostato ESP8266 controlado desde cualquier punto del mundo.

Pero tengo un problema, y es que el módulo ESP8266 ESP01 de vez en cuando se me resetea, algunas veces levanta y otras veces no.

Lo estoy alimentando con un cargador de móvil de 5V y 2,5 A, con esta tensión alimento el relé y el DHT11, luego con un LD33V saco 3.3 voltios y hasta 800 mA para alimentar el ESP8266 ESP01. Pero aún así el módulo se resetea a veces, igual pasan 15 horas que 40 minutos.

Estoy buscando por internet algún circuito en el que se alimente al módulo ESP8266, pero hay un montón de variantes y no sé cual agarrar.

Si el ADMIN cree conveniente pasar éste post al HW, bienvenido sea...

Movido a hardware

Bueno resumiendo, no es como @jgarridc intentó explicar o yo malentendí, sino que usa un UNO para leer el LM35 y un ESP01 para comunicarse con Thinkspeak.

También vi en Spainlabs como lo ayudaron a resolverlo, cosa que valoro y para nada critico pero es una pena que no posteó la resolución acá.

Siempre digo que no solo hay que presentar una duda, sino que resuelta como sea, hay que mostrar como quedó para que otro se beneficie del tema, sino viene 2 años después esparando que el autor le responda.

Termostato Wifi