Saludos Amigos, es un placer pertenecer a esta comunidad. Llevo meses dando vueltas a este proyecto y no soy capaz de solucionarlo, a ver si me podeis echar una mano.
Componentes:
-
ESP32 DEVKIT v1
-
DHT11 ( en espera de recibir un DHT22 )
-
Led Tricolor (RGB)
-
(Sensor PIR)
-
(Sensor de monoxido de carbono)
-
Alimentacion: YUROBOT 3,3-5 v.
La idea es saber la temperatura, humedad, y monoxido de carbono del salon, con un pequeño detector PIR ya que hay un pasillo que accede al salon y poder encerder la luz detectando el movimiento. Todo estos datos enviados a un servidor con mosquitto y con Node-Red poder visualizarlo en una Tablet que no utilizaba.
Parece facil pero me he quedado en el punto del RGB. El servidor mosquitto esta funcionando bien ( o eso creo ), y la visualizacion en Web esta bien. Fundamentalmente tengo dos problemas, el primero es la conexion con el servidor que tiene mosquitto ya que utilizo WPA2-Personal y suele perder la conexion. Si conecta, y sin tiempo determinado, deja de emitir los datos ( aunque permanece conectado ), y no actua por lo que tampoco puedo utilizar el encendido de luces ( mosquitto mal configurado ? ).
Como veis estoy bloqueado y necesito un empujon.....
Dejo el codigo que estoy utilizando y a ver que veis vosotros, os fijareis que estaba incorporando el PIR .....
Gracias por todo....
/*****
Vincent Price @ 2018
for all World
*****/
#include <WiFi.h>
#include <PubSubClient.h>
#include "DHT.h"
//Quitar las barras del sensor que corresponda
#define DHTTYPE DHT11 // DHT 11
//#define DHTTYPE DHT21 // DHT 21 (AM2301)
//#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321
//Escribir los datos de conexion
const char* ssid = "XXX";
const char* password = "XXX";
//Incluir la direccion del servidor MQTT
const char* mqtt_server = "192.168.0.101";
// Conectamos como cliente al Servidor
WiFiClient espClient;
PubSubClient client(espClient);
// Pin de entrada para DHT
const int DHTPin = 14;
// Pin luces pasillo
const int lamp2 = 13;
// Pin luces comedor
const int lamp = 23;
//byte sensorPin = 27;
byte indicator = 26;
// Inicializamos DHT sensor.
DHT dht(DHTPin, DHTTYPE);
// Tiempo para las variables
long now = millis();
long lastMeasure = 0;
void setup_wifi() {
delay(10);
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.print("WiFi conectado - ESP IP : ");
Serial.println(WiFi.localIP());
}
void callback(String topic, byte* message, unsigned int length)
{
//Serial.print("Mensajes llegado al topic: ");
//Serial.print(topic);
//Serial.print(". Mensaje: ");
String messageTemp;
for (int i = 0; i < length; i++) {
//Serial.print((char)message[i]);
messageTemp += (char)message[i];
}
//Serial.println();
if (topic == "casa/luces") {
//Serial.print("Comedor: ");
if (messageTemp == "on") {
digitalWrite(lamp, HIGH);
//Serial.print("Encendido");
}
else if (messageTemp == "off") {
digitalWrite(lamp, LOW);
//Serial.print("Apagado");
}
}
if (topic == "casa/luces2") {
//Serial.print("Pasillo: ");
if (messageTemp == "on2") {
digitalWrite(lamp2, HIGH);
//Serial.print("Encendido");
}
else if (messageTemp == "off2") {
digitalWrite(lamp2, LOW);
//Serial.print("Apagado");
}
}
Serial.println();
}
void reconnect() {
pinMode(2, OUTPUT);
while (!client.connected()) {
Serial.print("Intentando conectar a MQTT...");
if (client.connect("ESP32Client")) {
Serial.println("conectado");
digitalWrite(2, HIGH);
client.subscribe("casa/luces");
client.subscribe("casa/luces2");
client.subscribe("casa/magne");
client.subscribe("casa/temp");
client.subscribe("casa/humedad");
} else {
Serial.print("fallo, rc=");
Serial.print(client.state());
Serial.println(" volveremos a conectar en 5 segundos");
digitalWrite(2, LOW);
delay(5000);
}
}
}
void setup() {
//pinMode(sensorPin, INPUT);
pinMode(indicator, OUTPUT);
pinMode(lamp, OUTPUT);
pinMode(lamp2, OUTPUT);
dht.begin();
Serial.begin(115200);
setup_wifi();
client.setServer(mqtt_server, 1883);
client.setCallback(callback);
}
void loop() {
if (!client.connected()) {
reconnect();
}
if (!client.loop())
client.connect("ESP32Client");
now = millis();
if (now - lastMeasure > 5000) {
lastMeasure = now;
float h = dht.readHumidity();
float t = dht.readTemperature();
float f = dht.readTemperature(true);
if (isnan(h) || isnan(t) || isnan(f)) {
Serial.println("Fallo al leer el sensor DHT!");
return;
}
float hic = dht.computeHeatIndex(t, h, false);
static char temperatureTemp[7];
dtostrf(hic, 6, 2, temperatureTemp);
// float hif = dht.computeHeatIndex(f, h);
// static char temperatureTemp[7];
// dtostrf(hic, 6, 2, temperatureTemp);
static char humidityTemp[7];
dtostrf(h, 6, 2, humidityTemp);
float magne = hallRead();
static char magneTemp[7];
dtostrf(magne, 6, 2, magneTemp);
client.publish("casa/temp", temperatureTemp);
client.publish("casa/humedad", humidityTemp);
client.publish("casa/magne", magneTemp);
//byte state = digitalRead(sensorPin);
//digitalWrite(indicator, state);
//if (state == 1)Serial.println("Movimiento");
//else if (state == 0)Serial.println("Nada");
//delay(500);
}
}