Go Down

Topic: POST do modulo wifi 8266 para servidor (Read 245 times) previous topic - next topic

andresilva

Estou usando o modulo esp-01 com arduino uno para fazer um post em um servidor na rede para testes, acompanhei o log do apache e vi que esta dando erro 400, fiz o post para o mesmo endereço e mesma configuração do header usando o Postman do navegador Chrome e deu certo, inclusive copiei o código do header e substitui no código do meu arduino para testar mas continua com problema, dai não sei se é algo no código do header, comando que estou usando para fazer o post pelo modulo 8266 ou se é outra coisa.

A função que faz o post esta assim:
Code: [Select]

#include <SoftwareSerial.h>

String ssid ="andre";
String password="senha";

SoftwareSerial esp(6, 7);// RX, TX

String data;

String server = "192.168.1.7";

String uri = "climatempo/index.php";

/*

RESTANTE DO CODIGO OMITIDO

*/

void loop () {
 
  dat[0] = 70;
  dat[2] = 20;
 
  // convert the bit data to string form
 
  hum = String(dat[0]);
 
  temp= String(dat[2]);
 
  data = "temperature=" + temp + "&humidity=" + hum; // dados que são enviados por post
 
  httppost();
 
  delay(1000);

}

// faz o post
void httppost () {

  esp.println("AT+CIPSTART=\"TCP\",\"" + server + "\",80");//start a TCP connection.

  do {
    if( esp.find("OK")) {
      Serial.println("TCP connection ready");
      tcpConnect = true;
    } else {
      Serial.println("TCP connection not ready..."+server);
    }
    delay(1000);
  }while(tcpConnect==false); 


  String postRequest =
  "POST " + uri + " HTTP/1.1\r\n" +
  "Host: "+server+"\r\n" +
  "Accept: *"+"/"+"*\r\n" +
  "Content-Length: " + data.length() + "\r\n" +
  "Content-Type: application/x-www-form-urlencoded\r\n" +
  "Cache-Control: no-cache\r\n" +
  "\r\n"+data;
 
  String sendCmd = "AT+CIPSEND=";//determine the number of caracters to be sent.

  esp.print(sendCmd);
 
  esp.println(postRequest.length() );
 
  delay(500);
 
  if(esp.find(">")) {
    Serial.println("Sending..");
   
    esp.print(postRequest);
 
    if( esp.find("SEND OK")) {
      Serial.println("Packet sent");
      delay(1000);
//      while (esp.available()) {
       
        String tmpResp = esp.readString();
       
        Serial.println(tmpResp);

//      }

      // close the connection
     
      esp.println("AT+CIPCLOSE");
   
    }

  }
}


Comentei a linha que tem while (esp.available()) pois não estava passando na validação, dai já fico na duvida se estou fazendo certo pois as veze ele também não passa na validação de conexão TCP.

Sera que tem algo a ser melhorado no header ( variavel postRequest) ou na forma como esta sendo feito ??


bubulindo

Não falta aí um carriage return no final dos dados??
This... is a hobby.

andresilva

O problema com o POST eu consegui resolver, estava faltando um "/" na URL rsrs!

O  "carriage return" seriam uma quebra de linha depois que executa um comando para o ESP ?
Se for, estou fazendo assim:

Code: [Select]

esp.println("AT+CIPCLOSE");
esp.print("\r\n");


Fazendo isso tive a impressão que as coisas ficaram um pouco melhor, mas como não tenho certeza ....!

Go Up