Sensor LDR siempre "0"

Hola a todos!

Estoy intentando hacer funcionar un ESP32 con varios sensores (entre ellos un LDR) y publicalos a MQTT.

Tengo el siguiente codigo:

#include <WiFi.h>
#include <PubSubClient.h>
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
#include "settings.h"

#define PIN_SENSOR_VIENTO 34 // Pin analógico A2 en el ESP32 (pin GPIO 34)
#define PIN_SENSOR_LDR 26    // Pin analógico A3 en el ESP32 (pin GPIO 26)

unsigned long temp1 = 0;

unsigned int WindSpeed = 0;
unsigned int LDRValue = 0;

Adafruit_BME280 bme;

WiFiClient espClient;
PubSubClient clientMqtt(espClient);

void setup() {
  Serial.begin(9600);
  setupWifi();
  clientMqtt.setServer(mqttServer, mqttPort);
  clientMqtt.setCallback(callback);

  if (!bme.begin(0x76)) {
    Serial.println("[ERROR] No se pudo inicializar el sensor BME280. Compruebe la conexión.");
    while (1);
  }
}

void setupWifi() {
  delay(10);
  Serial.println();
  Serial.print("[WIFI] Conectando a ");
  Serial.println(ssid);

  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.println("");
  Serial.println("[WIFI] WiFi conectada");
  Serial.print("[WIFI] IP: ");
  Serial.print(WiFi.localIP());
  Serial.println("");
}

void callback(char* topic, byte* payload, unsigned int length) {
  Serial.print("[MQTT] Mensaje recibido (");
  Serial.print(topic);
  Serial.print(") ");
  String mqttcommand = "";
  for (int i = 0; i < length; i++) {
    mqttcommand += (char)payload[i];
  }
  Serial.print(mqttcommand);
  Serial.println();
  if (mqttcommand == "comando") {
    Serial.println("comando");
  }  
}

void reconnect() {
  Serial.print("[MQTT] Intentando conectar a servidor MQTT... ");
  while (!clientMqtt.connected()) {
    Serial.print(".");
    if (clientMqtt.connect(mqttId, mqttUser, mqttPassword)) {
      Serial.println("");
      Serial.println("[MQTT] Conectado al servidor MQTT");
      clientMqtt.publish(mqttSubTopicHealthcheck, "starting");
      clientMqtt.subscribe(mqttSubTopicOperation);
    } else {
      Serial.print("[MQTT] Error, rc=");
      Serial.print(clientMqtt.state());
      Serial.println("[MQTT] Intentando conexión en 5 segundos");
      delay(5000);
    }
  }
}

void loop() {
  if (!clientMqtt.connected()) {
    reconnect();
  }
  clientMqtt.loop();
    
  if (millis() - temp1 > updateTimeSensors) {
    temp1 = millis();
    
    WindSpeed = 6 * analogRead(PIN_SENSOR_VIENTO) * (5.0 / 1023.0); // Lectura del sensor de velocidad del viento
    LDRValue = analogRead(PIN_SENSOR_LDR); // Lectura del sensor LDR

    float temperature = bme.readTemperature();
    float humidity = bme.readHumidity();
    float pressure = bme.readPressure() / 100.0;

    publishData(mqttPubTopicWindSpeed, String(WindSpeed) + " m/s");
    publishData(mqttPubTopicTemperature, String(temperature, 2) + " °C");
    publishData(mqttPubTopicHumidity, String(humidity, 2) + " %");
    publishData(mqttPubTopicPressure, String(pressure, 2) + " hPa");
    publishData(mqttPubTopicLDR, String(LDRValue) + " lux");

    delay(1000);
  }
}

void publishData(const char* topic, const String& data) {
  Serial.print("[MQTT] Enviando ");
  Serial.print(topic);
  Serial.print(": ");
  Serial.println(data);
  clientMqtt.publish(topic, data.c_str());
}

Los valores del BME280 y del sensor del viento van perfectos, pero el LDR siempre me da valor "0". He probado en diferentes situaciones de luz.

He comprobado las conexiones y son correctas, ya que si subo el siguiente codigo el ESP32 me dan valores buenos:

void setup()
{
Serial.begin(9600);
}
void loop()
{
unsigned int AnalogValue;
AnalogValue = analogRead(26);
Serial.println(AnalogValue);
}

Alguna recomendación?

Muchas gracias!

La verdad que no encuentro el error (si lo hay).
Prueba así

publishData(mqttPubTopicLDR, String(LDRValue, DEC) + " lux"); 

a ver si cambia algo.

Moderador
Movido a Microcontroladores
Por favor, lean las normas y revisen cual es la sección mas adecuada para su consulta.
Todo lo que no es Arduino va en esta sección.

Ya encontré el problema.

Cambié el GPIO al 39 y ya va perfecto!

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.