Hola a todos, no tengo muy claro si esta consulta es de software o hardware, supongo que dependerá de su aclaración.
Estoy con un proyecto para controlar la temperatura (con el sensor AM2301) de cuatro cámaras frigoríficas con su gestión de alarmas y una pantallita Nokia5110. Usando nodemcu.
La pantalla se gestiona sin problema con SPI, enciendo y apago los leds a través del PCF8574 (I2C).
El problema es cuando incluyo la línea “dht.begin()” compila correcto, pero deja de mostrarme las salidas puerto serie y parece que el resto funciona correctamente.
No tengo nada en lo pines GPIO3 y GPIO1. Será ¿GPIO2 el culpable?
Mando un programita reducido que reproduce la incidencia, por si alguien pudiera darme una pista de lo que ocurre o por donde mirar.
///// Para la pantalla Nokia 5110
#include <SPI.h>
#include <Adafruit_PCD8544.h>
Adafruit_PCD8544 display = Adafruit_PCD8544(14, 13, 2, 15, 16); // NodeMCU SPI 14x6 con el tamano 0
//Expansor de pines I2C
#include "PCF8574.h"
PCF8574 pcf8574(0x20);
//Sensor AM2301
#include "DHT.h"
#define DHTTYPE DHT21 // DHT 21 (AM2301)
DHT dht_Nevera (P1, DHTTYPE);
int Ultimo_Display=0;
const int MOSTRAR_TEMPERATURA =2000;
int Contador=0;
float Humedad = 0;
float Temperatura = 0;
void setup() {
Serial.begin(9600);
pcf8574.pinMode(P0, OUTPUT);
pcf8574.pinMode(P1, INPUT);
pcf8574.pinMode(P2, INPUT);
pcf8574.pinMode(P3, INPUT);
pcf8574.pinMode(P4, INPUT);
pcf8574.pinMode(P5, INPUT);
pcf8574.pinMode(P6, INPUT);
pcf8574.pinMode(P7, INPUT);
pcf8574.begin();
pcf8574.digitalWrite(P0, 0); // Controla los LED de la pantalla 0 = encendido
Serial.println("Empezamos");
display.begin();
display.setContrast(60); // entre 0 y 100
display.clearDisplay();
display.setTextSize(0);
display.setTextColor(BLACK);
display.setCursor(0,0);
display.println("Empezamos...");
display.display();
delay(2000); //Sólo para poder ver que lo muestra el display.
// Si descomento esta linea no muestra el puerto serie.
// dht_Nevera.begin();
//
Serial.println("Salimos SetUp");
display.clearDisplay();
display.setCursor(0,0);
display.println("Salimos SetUp...");
display.display();
delay(2000); //Sólo para poder ver que lo muestra el display.
}
void loop() {
// Recuperamos datos de DHT21
// Humedad = dht_Nevera.readHumidity();
// Temperatura = dht_Nevera.readTemperature();
if (isnan(Humedad) || isnan(Temperatura)) Serial.println("Error en sensor");
if (millis() > Ultimo_Display + MOSTRAR_TEMPERATURA) {
Contador++; //sólo para ver funciona el display,
Ultimo_Display = millis();
String Texto="Temperatura: "+ String(Temperatura, DEC)+" C";
Serial.print(Contador);Serial.println(Texto);
display.clearDisplay();
display.setCursor(0,0);
display.println(Texto);
display.println(Contador);
display.display();
}
}
Gracias por vuestra atención.
Solución: El problema es que la librería DHT.h está preparada para apuntar a pines físicos del Nodemcu o Arduino, no a través de un dispositivo I2C. Creo otra librería únicamente cambiando lo siguiente:
pinMode(… por pcf8574.pinMode(
digitalWrite(… por pcf8574.digitalWrite(
digitalRead(… por pcf8574.digitalRead(