NodeMcu en modo Cliente y Servidor (Peticiones)

Buenas noches gente, estoy trabajando en un proyecto personal y anduve recopilando información sobre el nodemcu en modo cliente y en modo servidor. Encontré un código que me fue útil, pero necesito modificar algo del mismo y no me esta dando resultado.
Código que encontré en modo cliente:

#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>

const char* ssid     = "Jopapa_ESP8266";
const char* password = "";
const char* host = "http://192.168.4.1";
String val="0";
int analog;
const int ANALOG_PIN = A0; // pin analógico con fotoresistencia

HTTPClient http;

void rptaSrv(int httpCode){
  if(httpCode == 200) {
           String payload = http.getString();
           Serial.println(payload);
        } else {
            Serial.print("[HTTP] GET... failed, no connection or no HTTP server\n");
        }
}

void setup() {
  Serial.begin(115200);
  delay(10);
  Serial.print("Conectando a ");
  Serial.println(ssid);
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.println("WiFi conectada"); 
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
}

void loop(){
  analog=analogRead(ANALOG_PIN);
  if (analog < 300){         //hay oscuridad y encenderá el LED rojo del servidor
    val="1";}
   else{
    val="0";
  }

if(WiFi.status() != WL_CONNECTED){
  WiFi.begin(ssid, password);
  delay(500);
}else{
  //HTTPClient http;
        Serial.print("[HTTP] begin...\n");
        // configure server y url
        http.begin("192.168.4.1", 80, "/led/"+val);   //HTTp
        int httpCode1 = http.GET();
        rptaSrv(httpCode1);
        delay(100);
//        http.begin("192.168.4.1", 80, "/led/1"); //HTTP
//        int httpCode2 = http.GET();
//        rptaSrv(httpCode2);
//        delay(1000);
//        http.begin("192.168.4.1", 80, "/read"); //HTTP
//        int httpCode3 = http.GET();
//        rptaSrv(httpCode3);
//        delay(1000);
       
    }
}

Código que encontré como servidor:

#include <ESP8266WiFi.h>

const char WiFiClave[] = "";  //Sin clave
const char AP_Nombre[] = "Jopapa_ESP8266";

const int LED_PIN = 15; // LED rojo
int val;
WiFiServer server(80);

void setup() {
  Serial.begin(115200);
  pinMode(LED_PIN, OUTPUT);
  digitalWrite(LED_PIN, LOW);
  WiFi.mode(WIFI_AP);
  WiFi.softAP(AP_Nombre, WiFiClave);  
  server.begin();
}

void loop() {
  WiFiClient client = server.available();   // ¿Hay un cliente conectado?
  if (!client) { return;}
  String req = client.readStringUntil('\r');  // Lee la primera linea de la petición del cliente
  if (req.indexOf("/led/0") != -1) val=0;
  if (req.indexOf("/led/1") != -1) val=1;
  digitalWrite(LED_PIN, val); 
  client.flush();

Mi problema es que quiero enviar mas de una petición, es decir que lea otro pin y me mande los datos, lo que hice yo fue lo siguiente.

#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#define Digital1 16
#define Digital2 5
const char* ssid     = "Jopapa_ESP8266";
const char* password = "";
const char* host = "http://192.168.4.1";
String val="0";
String val2="0";
int Valor1, Valor2; 
HTTPClient http;

void rptaSrv(int httpCode){
  if(httpCode == 200) {
           String payload = http.getString();
           Serial.println(payload);
        } else {
            Serial.print("[HTTP] GET... failed, no connection or no HTTP server\n");
        }
}

void setup() {
  pinMode(Digital1, INPUT);
  pinMode(Digital2, INPUT);
  Serial.begin(115200);
  delay(10);
  Serial.print("Conectando a ");
  Serial.println(ssid);
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.println("WiFi conectada"); 
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
}

void loop(){
  Valor1 = digitalRead(Digital1);
  Valor2 = digitalRead(Digital2);
  if (Valor1 == 0)
 {        
    val="0";}
   else{
    val="1";
  }
  if (Valor2 == 0)
{        
    val2="0";}
   else{
    val2="1";
  }
if(WiFi.status() != WL_CONNECTED){
  WiFi.begin(ssid, password);
  delay(500);
}else{
  //HTTPClient http;
        Serial.print("[HTTP] begin...\n");
        // configure server y url
        http.begin("192.168.4.1", 80, "/led/"+val);   //HTTp
        int httpCode1 = http.GET();
        rptaSrv(httpCode1);
        delay(100);
        http.begin("192.168.4.1", 80, "/led1/"+val2); //HTTP
        int httpCode2 = http.GET();
        rptaSrv(httpCode2);
        delay(1000);
    }
}

Como pueden ver en el código, lo adapte a mis necesidades de leer dos pines digitales, y luego lo almacene en una variable de tipo String, llamada val2, luego de eso, hice la petición, la cual no se si esta bien formulada. El problema es que la primer petición si la recibe y prende el led cuando llega al servidor (http.begin(“192.168.4.1”, 80, “/led/”+val):wink: pero la segunda petición no llega al servidor.
Código del servidor, para recibir las peticiones del cliente:

WiFiClient client = server.available();   // ¿Hay un cliente conectado?
  if (!client) { return;}
  String req = client.readStringUntil('\r');  // Lee la primera linea de la petición del cliente
  if (req.indexOf("/led/0") != -1) val = 0;
  if (req.indexOf("/led/1") != -1) val = 1;
  if (req.indexOf("/led1/0") != -1) val2 = 0;
  if (req.indexOf("/led1/1") != -1) val2 = 1;
  client.flush();

Cabe aclarar, que definí las variables val y val2 de tipo entero dentro del servidor.
No se si tuve algún error de sintaxis, o me esta faltando algo.
Espero su ayuda, si necesitan mas información sobre el código avisenme. Desde ya muchas gracias.

Moderador
Todo microcontrolador alternativo tiene una sección diferente a Software/Hardware que son exclusivos para productos Arduino o clones.
Movido a Microcontroladores.

Por favor lee el apartado de las normas del foro en el que se pide que se observe en que sección se debe postear. Una simple observación de cada sección es mas que evidente para determinarlo y algunas como Microcontroladores o Proyectos tienen un hilo extra que detalla porque o cuando se debe postear en esa sección.

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