Hola! no se si esto va aquí, vi varios post sobre nodemcu aquí en los foros de arduino así que me atrevo a consultar acá.
Les cuento, estoy utilizando una placa Nodemcu V3 de Lolin, a esta se le va a conectar un sensor DHT11, un sensor de humedad de suelo y una matriz led de 8x8, todo estos datos que se recopilasen los mostrara vía web obviamente y por serial para debug, el código lo saque de una pagina de por ahí de donde tome la idea
bueno esa es la idea, ahora el problema, hasta ahora tengo la lectura del DHT11 y la muestro por la web y el serie, hasta ahí bien, el problema es cuando agrego las lineas de código para hacer la lectura análoga del sensor de humedad del piso mediante el A0 para mostrarlas almenos por serie, ocurre que luego de subir el sketch, la placa nodemcu comienza a reiniciarse y ponerse en modo flash causando que no funcione debería funcionar, luego acotando esas lineas de código y volviendo a subir el sketch el problema desaparece.
Otra cosa, no se si es así por lo general, hace menos de una semana que comencé a experimentar con esta placa, mi forma que note de usarla que me parece muuuy rara y molesta, es que tengo que presionar el botón de RESET mientras luego presiono el botón de FLASH y luego ahí suelto el botón de RESET para que la placa sea reconocida por windows y asi poder subir mi sketch, entonces, la placa sin que windows reconozca el puerto quiere decir que la placa esta operando con las lineas de código, y si lo reconoce entra en modo flash para subir el sketch, y creo que lo hice muy largo al post jaja, dejare mi sketch para que puedan quizás comprender el problema.
A0----> lectura de humedad de suelo
D3----> lectura de datos del DHT11
Nodemcu_con_sensores_1.1.ino (4.99 KB)
Asi funciona
/*********
Rui Santos
Complete project details at http://randomnerdtutorials.com
*********/
// Including the ESP8266 WiFi library
#include <ESP8266WiFi.h>
#include "DHT.h"
// Uncomment one of the lines below for whatever DHT sensor type you're using!
#define DHTTYPE DHT11 // DHT 11
//#define DHTTYPE DHT21 // DHT 21 (AM2301)
//#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321
// Replace with your network details
const char* ssid = "XXXXXXX";
const char* password = "XXXXXXX";
// Web Server on port 80
WiFiServer server(80);
// DHT Sensor
const int DHTPin = 0; //D3
// Initialize DHT sensor.
DHT dht(DHTPin, DHTTYPE);
// Temporary variables
static char celsiusTemp[7];
//static char fahrenheitTemp[7];
static char humidityTemp[7];
// only runs once on boot
void setup() {
pinMode(2, OUTPUT);
// Initializing serial port for debugging purposes
Serial.begin(115200);
delay(10);
dht.begin();
// Connecting to WiFi network
Serial.println();
Serial.print("Conectando a ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi Conectado");
// Starting the web server
server.begin();
Serial.println("Web server activo. Esperando Direccion IP...");
delay(10000);
// Printing the ESP IP address
Serial.println(WiFi.localIP());
}
// runs over and over again
void loop()
{
digitalWrite(2, HIGH);
// Listenning for new clients
WiFiClient client = server.available();
if (client) {
//Serial.println("Nuevo Cliente");
// bolean to locate when the http request ends
boolean blank_line = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
if (c == '\n' && blank_line) {
// Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
float h = dht.readHumidity();
// Read temperature as Celsius (the default)
float t = dht.readTemperature();
//h = 23.4;
//t = 15.6;
// Read temperature as Fahrenheit (isFahrenheit = true)
//float f = dht.readTemperature(true);
// Check if any reads failed and exit early (to try again).
if (isnan(h) || isnan(t)) {
Serial.println("Fallo la lectura del sensor DHT");
strcpy(celsiusTemp,"Falla");
//strcpy(fahrenheitTemp, "Failed");
strcpy(humidityTemp, "Falla");
}
else{
// Computes temperature values in Celsius + Fahrenheit and Humidity
float hic = dht.computeHeatIndex(t, h, false); //calor
dtostrf(hic, 6, 2, celsiusTemp);
//float hif = dht.computeHeatIndex(f, h);
//dtostrf(hif, 6, 2, fahrenheitTemp);
dtostrf(h, 6, 2, humidityTemp);
// You can delete the following Serial.print's, it's just for debugging purposes
////////HUMEDAD RELATIVA/////////////
Serial.print("Humedad: ");
Serial.print(h);
Serial.println(" %\t");
////////HUMEDAD DE SUELO/////////////
Serial.print("Humedad de suelo: ");
Serial.print(adc());
Serial.println(" %\t");
/////TEMPERATURA RELATIVA////////////
Serial.print("Temperatura: ");
Serial.print(t);
Serial.println(" *C ");
///////////CALOR/////////////////////
Serial.print("Indice de calor: ");
Serial.print(hic);
Serial.println(" Cal ");
////////////////////////////////////
Serial.println(" ");
}
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connection: close");
client.println();
// your actual web page that displays temperature and humidity
client.println("<!DOCTYPE HTML>");
client.println("<html>");
client.println("<head></head><body><h1>Nodemcu - Treeko, Mini estacion meteorologica</h1><h3>Humedad: ");
client.println(humidityTemp);
client.println("%</h3><h3>Temperatura en Celsius: ");
client.println(celsiusTemp);
client.println("%</h3><h3>");
client.println("</body></html>");
break;
}
if (c == '\n') {
// when starts reading a new line
blank_line = true;
}
else if (c != '\r') {
// when finds a character on the current line
blank_line = false;
}
}
}
// closing the client connection
delay(1);
client.stop();
//Serial.println("Cliente Desconectado.");
}
}
float adc() {
//Humedad de suelo
int val2 = map(analogRead(A0), 1023, 0, 0, 255); //mapeo del valor analogo
float HS = (val2*100.0)/255.0;
//if (HS < 10.0) HS = 23.5;
return HS;
}
Saludos!,
Comprueba que tengas el ESP8266 core actualizado.
Yo he estado varios días con un problema parecido, de soft reset, y al final era que tenía que actualizar el core, de la versión 2.3.0. a la 2.4.0.
el código de Surbyte funciono como de costumbre y dio justo con el problema jajaja ahora lo que no me explico es el por que se reiniciaba de la manera que yo lo hacia.
A mi me acaba de pasar con un wemos D1, pues resulta que varios de los pines que uno ve, estan conectados a los TX y RX del nodo, tuve que buscar algunos que no estuvieran conectados a "algo", en la placa.
Saludos.
-Alex.
Ahora no me acuerdo que corregí. Compara el mio con el tuyo y saldrá el elemento que fallaba.
Al principio creí que era esto
static char humidityTemp[7];
No se para que le pones static a una variable global. Eso se usa con locales o me dirás que conserva el valor cuando reinicia? Ojo que lo pregunto y no soy irónico
1 Like
Lo que fallo es lo mismo que plantie, la lectura del pin analogo dentro del Void loop, vos eso lo pusiste como un float adc y luego dentro del loop llamaste al float para leer el valor q devolvia el adc e imprimirlo por el serial o la web
Bueno no me acordaba. Bien quedó mejor registrado asi.