ESP8266 como servidor web y sockets

Buenos dias.
Estoy intentando crear un servidor con un ESP8266 para enviar datos de sensores.
La idea es que por un lado disponga unna pagina web que se activa por el puerto 80 (esto funciona) y por otro lado enviar los datos a una app por el puerto 8888 (tambien funciona) pero el problema viene cuando desde la app envio un comando al ESP y no llega o no sé leerlo.
La app esta programada con appinventor y recibe datos del servidor cuando me conecto. Pero al pusar un boton envio un comando al servidor pero en el servidor no se refleja la llegada del comando.

Utilizo las siguientes librerias:

#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>

Si conecto con la app el servidor lo detecta y monta un registro json y se lo envia a la app:

{"Htierra":35,"Temperatura":18,"Humedad-aire":70,"Humedad-tierra":35,"Presion":1001.691101,"Altura":97.09832001,"Bomba":"Apagado","Ventilador":"Apagado"}

Pero no veo el dato cuando lo envio al servidor:

// Recibo bomba agua
server1.on("/bon", HTTP_GET, [](AsyncWebServerRequest *request){
  databomba = "bomba";
 Serial.println("LA BOMBA");
request->send(200,"text/plain", String("OK"));
});

¿Cual seria el comando para detectar que he recibido datos?.

Gracias.
Javier

Moderador:
Por favor, lee las Normas del foro y edita tu código/error usando etiquetas de código.
Ve a edición, luego selecciona todo el código que has publicado, lo cortas y click en (<CODE/>)


Publica todo el código por favor!.

Tu dices que esto

Serial.println("LA BOMBA");

No sale por el Monitor Serial?

No olvides que esta condicionado a que hagas una requerimiento a tu server primero pero con la ruta /bon

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.

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