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!