Dados recebidos por wifi como int e não string

Ola pessoal. Preciso receber um pacote via wifi STA, mas preciso tratar como int, pois preciso tratar o pacote byte a byte. Como string não funciona, pois posso receber qualquer dado, como por exemplo o caracter CR (0x0d) e isso bagunça quando é string. Fiz um sketch de teste, se ele funcionar para mim está resolvido. Preciso receber o pacote e gerar seu eco. A grande questão nesse sketch está na linha dado = client.read(); que não funciona.

#include <lwip/priv/tcp_priv.h>

void tcpCleanup()
{
  while (tcp_tw_pcbs != NULL)
  {
    tcp_abort(tcp_tw_pcbs);
  }
}

#include <ESP8266WiFi.h>

const char* ssid = "2.4Gviviane";
const char* password = "24151965";
int dado[20]={0};
WiFiServer server(80);

void setup() {
  Serial.begin(74880);
  IPAddress staticIP(192, 168, 0, 191);
  IPAddress gateway(192, 168, 0, 1);
  IPAddress subnet(255, 255, 255, 0);

  WiFi.config(staticIP, gateway, subnet);
  WiFi.begin(ssid, password);
 
   while (WiFi.status() != WL_CONNECTED) {
    delay(500);   
  } 
  server.begin();   
  Serial.println("Conected");
  Serial.println(WiFi.localIP());

    tcpCleanup();    

}

void loop() {
  
  // put your main code here, to run repeatedly:

  WiFiClient client = server.available();
  if (!client) {
    return;
  }
  
  while (!client.available()) {
    delay(1);  
  }

 // String dado = client.readStringUntil('\r');  
  dado = client.read();  
  //req.toCharArray(dado,17);
  client.flush();
//  Serial.println(req);

  Serial.print(dado);
 
    for (char i=0; i<17;i++)
    {
      client.write(dado[i]);
    }
  
 
}

Olá @mario06763
teste assim:

int myVariavel;
myVariavel= client.parseInt();  

RV mineirin

Olá @ruilviana
Eu vi que parseInt() traz o primeiro caracter válido (long) da serial, correto? Mas eu preciso receber todo o pacote que venha.
Fiz os seguintes testes, sempre enviando pelo client o seguinte pacote em Hexa:
00 01 02 03 0D F0 F1 F2
Aqui no pacote, 0DH é um byte a ser manipulado, e não o caractere CR na tabela ASCII. Client tem que receber de volta exatamente o mesmo pacote.

1o. teste

String req = client.readStringUntil('\r');  
client.println(req);

client recebeu:
01 02 03 0D 0A , ou seja, quando recebeu 0D entendeu como CR, finalizou a string, e ao enviar terminou com CR LF.

2o. teste:

char dado[10]={0};
String req = client.readStringUntil('\r');  
req.toCharArray(dado,7);
    for (char i=0; i<7;i++)
    {
      client.write(dado[i]);
    }
´´´
client recebeu  01  02  03  00  00  00  00
ou seja, aqui depois do byte 0D a string foi zerada.

Prezado @ruilviana
Fiz mais um teste com client.read() , pois esse le byte a byte. Fiz assim:

char dado[20] = {0};
for (char i=0;i<7; i++)dado[i] = client.read();
client.write(dado);

client recebeu 01 02 04 0D , ou seja, parou novamente no 0D. Não sei se o problema é em client.read() ou em client.write() , ou ambos.

Prezado @ruilviana
Consegui resolver. No último exemplo resolvi com client.write(dado, 7). Aí funcionou do jeito que eu preciso. Muito obrigado por sua atenção, forte abraço.

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