Buenas tardes.
Si, gracias.
Esto deberia salir por la consola.
#include <ESP8266WiFi.h>
#include <ESPAsyncTCP.h>
#include <ESPAsyncWebServer.h>
#include <FS.h>
#include "ArduinoJson.h"
#include <Wire.h>
#include <AHTxx.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BMP280.h>
DynamicJsonDocument doc(200); // Tamaño del documento JSON
//
// WiFi Credentials
#define MESH_PREFIX "nodo1"
#define MESH_PASSWORD "somethingSneaky"
#define MESH_PORT 5555
//AHT2x
float ahtValue; //to store T/RH result
float ahtTemp;
float ahtHum;
AHTxx aht20(AHTXX_ADDRESS_X38, AHT2x_SENSOR); //sensor address, sensor type
// SEnsor de humedad tierra soil moisture
// BMP
#define SEALEVELPRESSURE_HPA (1013.3)
Adafruit_BMP280 bmp; // I2C
float presion;
float altura;
//
// SOIL MOISTURE
const int AirValue = 710;
const int WaterValue = 280;
//const int SensorPin = 15;
//
#define RELE1 0 //
#define RELE2 2 //
#define RELE3 14 //
#define RELE4 12 //
int soilMoistureValue = 0;
int soilmoisturepercent = 0;
int sensorh = A0;
bool relay1_status = 0;
// datos recibidos del cliente
String databomba ="";
String dataventi ="";
// IP FIJA
WiFiServer server(8888);
IPAddress ip(192,168,0,192);
IPAddress gateway(192,168,0,1);
IPAddress subnet(255,255,255,0);
//
AsyncWebServer server1(8080);
AsyncWebSocket ws("/ws");
String bomba = "on";
String venti = "on";
//
// Puesta de LED GPIO
const int ledPin = 2;
// Para guardar el estado del LED
String ledState;
// Remplazamos el marcador con el estado del LED
String processor(const String& var){
Serial.println(var);
if(var == "STATE"){
if(digitalRead(ledPin)){
ledState = "ON";
}
else{
ledState = "OFF";
}
Serial.print(ledState);
return ledState;
}
}
int temperature = 20;
int humidity = 50;
int pressure= 980;
int htierra = 0;
//
void setup() {
Serial.begin(115200);
pinMode(RELE1, OUTPUT);
pinMode(RELE2, OUTPUT);
pinMode(RELE3, OUTPUT);
pinMode(RELE4, OUTPUT);
digitalWrite(RELE1, HIGH);
digitalWrite(RELE2, HIGH);
delay(3000);
digitalWrite(RELE1, LOW);
digitalWrite(RELE2, LOW);
delay(3000);
digitalWrite(RELE1, HIGH);
digitalWrite(RELE2, HIGH);
digitalWrite(RELE3, HIGH);
digitalWrite(RELE4, HIGH);
WiFi.mode(WIFI_STA);
WiFi.config(ip, gateway, subnet);
WiFi.begin("****", "*****");
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("Conectado a la wifi");
server.begin();
server1.begin();
Serial.println("servidor iniciado");
Serial.println(WiFi.localIP());
delay(5000);
bool status;
status = bmp.begin(0x77);
if (!status) {
Serial.println("No puedo encontrar el sensor BMP280!");
// while (1);
String errorbmp ="Fallo conexion";
}
//
Serial.println("Me reinicio" );
temperature = aht20.readTemperature();
humidity = aht20.readHumidity();
Serial.print("Humedad:");
Serial.println(humidity);
SPIFFS.begin();
server1.on("/", HTTP_GET, [](AsyncWebServerRequest *request){
request->send(SPIFFS, "/index.html", String(), false, processor);
});
// Ruta para cargar el archivo style.css
server1.on("/style.css", HTTP_GET, [](AsyncWebServerRequest *request){
request->send(SPIFFS, "/style.css", "text/css");
});
// Recibo bomba agua
server1.on("/bon", HTTP_GET, [](AsyncWebServerRequest *request){
databomba = "bomba";
Serial.println("LA BOMBA");
request->send(200,"text/plain", String("OK"));
});
server1.on("/on", HTTP_GET, [](AsyncWebServerRequest *request){
digitalWrite(ledPin, HIGH);
request->send(SPIFFS, "/index.html", String(), false, processor);
Serial.println("Ha pulsado on ");
});
server1.on("/off", HTTP_GET, [](AsyncWebServerRequest *request){
digitalWrite(ledPin, LOW);
request->send(SPIFFS, "/index.html", String(), false, processor);
Serial.println("Ha pulsado off");
});
server1.on("/temperature", HTTP_GET, [](AsyncWebServerRequest *request){
request->send(200,"text/plain", String(temperature));
});
server1.on("/humidity", HTTP_GET, [](AsyncWebServerRequest *request){
request->send(200,"text/plain",String(humidity));
});
server1.on("/pressure", HTTP_GET, [](AsyncWebServerRequest *request){
request->send(200,"text/plain",String(presion));
});
server1.on("/tierra", HTTP_GET, [](AsyncWebServerRequest *request){
request->send(200,"text/plain",String(htierra));
});
server1.on("/bagua", HTTP_GET, [](AsyncWebServerRequest *request){
request->send(200,"text/plain",String(bomba));
});
server1.on("/venti", HTTP_GET, [](AsyncWebServerRequest *request){
request->send(200,"text/plain",String(venti));
});
server1.begin();
ws.onEvent(Mensaje);
server1.addHandler(&ws);
}
void Mensaje(AsyncWebSocket *server, AsyncWebSocketClient *client, AwsEventType type,
void *arg, uint8_t *data, size_t len){
Serial.println("DAtos recibido");
}
void leerdatos(){
temperature = aht20.readTemperature();
humidity = aht20.readHumidity();
soilMoistureValue = analogRead(sensorh);
soilmoisturepercent = map(soilMoistureValue, AirValue, WaterValue, 0, 100);
htierra = map(soilMoistureValue, AirValue, WaterValue, 0, 100);
presion = bmp.readPressure() /100.F;
altura = bmp.readAltitude(SEALEVELPRESSURE_HPA);
htierra = map(soilMoistureValue, AirValue, WaterValue, 0, 100);
Serial.print("Envio al servidor: ");
Serial.println(htierra);
ahtTemp = aht20.readTemperature();
ahtHum = aht20.readHumidity();
if (ahtTemp > 31){
digitalWrite(RELE2, LOW);
venti = "Encendido";
} else {
digitalWrite(RELE2, HIGH);
venti = "Apagado";
}
if (soilmoisturepercent < 30){
digitalWrite(RELE1, LOW);
bomba ="Encendido";
} else {
digitalWrite(RELE1, HIGH);
bomba ="Apagado";
}
}
void loop() {
WiFiClient client = server.available();
leerdatos();
while(client.connected()){
leerdatos();
doc["Htierra"] = htierra;
doc["Temperatura"]= temperature;
doc["Humedad-aire"]= humidity;
doc["Humedad-tierra"]= htierra;
doc["Presion"] = presion;
doc["Altura"] = altura;
doc["Bomba"] = bomba;
doc["Ventilador"] = venti;
String jsondatos;
serializeJson(doc, jsondatos);
Serial.println(jsondatos);
client.println(jsondatos);
delay(10000);
}
client.stop();
Serial.println("");
Serial.println("Cliente desconectado");
delay(10000);
}
Gracias.