Hello!
I'm trying to program a DIY weather station on a ESP-WROOM-32 (38 pins) with different sensors, who sends MQTT data:
- Wind sensor
- LDR sensor
- BME280 sensor
The code is this one:
#include <WiFi.h>
#include <PubSubClient.h>
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
#include "settings.h"
#define PIN_SENSOR_VIENTO 36 // Wind sensor pin
#define PIN_SENSOR_LDR 33
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, 2));
publishData(mqttPubTopicTemperature, String(temperature, 2));
publishData(mqttPubTopicHumidity, String(humidity, 2));
publishData(mqttPubTopicPressure, String(pressure, 2));
publishData(mqttPubTopicLDR, String(LDRValue));
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());
}
When I connect all the sensor except the wind sensor, the first mqtt message shows "0", that it's correct, but after the second message and the others, random data shows on wind sensor (remember, nothing plug in in the gpio 36!):
First message:
Following message
I couldn't connect yet with the wind sensor (missing a part), should the data show "0"?
What's happening?
It's a problem with the gpio? Should I try others?
Thanks in advance!