Solicitações HTTP POST no microcontrolador ESP32

Eletrônica

O objetivo deste tutorial é explicar como fazer solicitações HTTP POST usando o suporte ao ambiente ESP32 e Arduíno. Usaremos a biblioteca HTTPClient.h para ocultar os detalhes de implementação de baixo nível.

Portanto, não precisamos nos preocupar em criar o protocolo HTTP sobre uma conexão de soquete, pois teremos métodos disponíveis para lidar com isso. Para enviar solicitações HTTP GET com a mesma biblioteca, verifique este tutorial anterior.

O código
A parte inicial do código será a mesma necessária para as solicitações HTTP GET com o ESP32. Portanto, começaremos incluindo as bibliotecas necessárias, declarando algumas variáveis ​​globais para manter as credenciais da rede WiFi e, na função de configuração do Arduíno, conectar-se à rede WiFi. Se você precisar de um guia detalhado sobre como se conectar a uma rede Wi-Fi com o ESP32, consulte este tutorial anterior.

Importante: No momento da escrita, havia a necessidade de fazer um pequeno atraso antes de chamar a função WiFi.begin , para conectar-se à rede WiFi. Antes de atualizar as bibliotecas ESP32, esse atraso não era necessário. No entanto, isso pode não ser mais necessário quando você testar o código, para poder brincar com esse atraso e verificar se o ESP32 pode se conectar à rede Wi-Fi sem ele. Você também pode precisar aumentá-lo se tiver problemas com a conexão.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
#include 
#include 

const char* ssid = "yourNetworkName";
const char* password =  "yourNetworkPassword";

void setup() {

  Serial.begin(115200);
  delay(4000);   //Delay needed before calling the WiFi.begin

  WiFi.begin(ssid, password); 

  while (WiFi.status() != WL_CONNECTED) { //Check for the connection
    delay(1000);
    Serial.println("Connecting to WiFi..");
  }

  Serial.println("Connected to the WiFi network");

}

Após o código de inicialização, iremos para o loop principal, onde escreveremos o código necessário para fazer as solicitações HTTP POST. Declararemos um objeto da classe HTTPClient , que disponibiliza os métodos necessários para manipular o protocolo HTTP.
Em seguida, chamamos o método begin no objeto declarado anteriormente e passamos como entrada a URL para o site em que queremos fazer a solicitação POST. Usaremos um site falso da API REST online, adequado para testes. Você pode conferir aqui .

1
2
3
HTTPClient http;

http.begin("http://jsonplaceholder.typicode.com/posts"); //Specify destination for HTTP request

Depois disso, chamaremos o método addHeader , que nos permitirá especificar os cabeçalhos de solicitação HTTP .  Nesse caso, definiremos o cabeçalho do tipo de conteúdo , que especifica o tipo de mídia do corpo da solicitação [1] que enviaremos. Vamos especificá-lo como " texto / sem formatação ", pois enviaremos apenas uma mensagem de texto simples, sem nenhum formato específico.
Como pode ser visto abaixo, esse método recebe como primeira entrada o cabeçalho que queremos especificar e como segunda entrada seu valor.

1
http.addHeader("Content-Type", "text/plain"); //Specify content-type header

Agora, para enviar a solicitação HTTP real, chamamos o método POST , passando como entrada o conteúdo do corpo da solicitação. Enviaremos uma mensagem simples apenas para fins ilustrativos. Como contatamos uma API falsa, ela sempre aceita conteúdo.
Este método retornará o código de resposta HTTP, que armazenaremos em uma variável. Observe que se o valor retornado for menor que zero, ocorreu um erro na conexão. Se for maior que zero, é um código HTTP padrão .

1
int httpResponseCode = http.POST("POSTING from ESP32"); //Send the actual POST request

Como armazenamos o código de resposta HTTP, nós o usaremos para tratamento de erros, pois veremos o código abaixo. Se nossa solicitação foi enviada com sucesso, obteremos a resposta HTTP chamando o método getString . Em seguida, imprimiremos a resposta e o código HTTP. Em caso de erro, imprimiremos uma mensagem informativa.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
if(httpResponseCode>0){

    String response = http.getString();  //Get the response to the request

    Serial.println(httpResponseCode);   //Print return code
    Serial.println(response);           //Print request answer

}else{

    Serial.print("Error on sending POST: ");
    Serial.println(httpResponseCode);

}

Por fim, chamaremos o método final em nosso objeto http para liberar os recursos. Essa ligação é importante e não deve ser esquecida. Verifique o código-fonte completo abaixo, que já inclui esta chamada. Também inclui um atraso entre cada solicitação e um bloqueio condicional para verificar se ainda estamos conectados à rede Wi-Fi antes de enviar uma solicitação.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#include 
#include  

const char* ssid = "yourNetworkName";
const char* password =  "yourNetworkPassword";

void setup() {

  Serial.begin(115200);
  delay(4000);   //Delay needed before calling the WiFi.begin

  WiFi.begin(ssid, password); 

  while (WiFi.status() != WL_CONNECTED) { //Check for the connection
    delay(1000);
    Serial.println("Connecting to WiFi..");
  }

  Serial.println("Connected to the WiFi network");

}

void loop() {

 if(WiFi.status()== WL_CONNECTED){   //Check WiFi connection status

   HTTPClient http;   

   http.begin("http://jsonplaceholder.typicode.com/posts");  //Specify destination for HTTP request
   http.addHeader("Content-Type", "text/plain");             //Specify content-type header

   int httpResponseCode = http.POST("POSTING from ESP32");   //Send the actual POST request

   if(httpResponseCode>0){

    String response = http.getString();                       //Get the response to the request

    Serial.println(httpResponseCode);   //Print return code
    Serial.println(response);           //Print request answer

   }else{

    Serial.print("Error on sending POST: ");
    Serial.println(httpResponseCode);

   }

   http.end();  //Free resources

 }else{

    Serial.println("Error in WiFi connection");   

 }

  delay(10000);  //Send a request every 10 seconds

}

Testando o código
O procedimento para testar o código é o mesmo de sempre. Faça o upload do código do ESP32 usando o Arduino IDE e abra o monitor serial para verificar a saída. Você deve obter algo semelhante à figura 1.

Solicitação HTTP POST do ESP32

Figura 1 - Saída do programa para enviar solicitações HTTP POST com o ESP32.

Observe que um código HTTP 201 é retornado, o que corresponde a "criado" [2]. Isso significa que um recurso foi criado no servidor, que é o comportamento simulado esperado, pois estamos fazendo um POST.

Portanto, a resposta inclui um ID, informando o identificador do novo recurso. Como este é um site de teste falso, nada está acontecendo no back-end e esta é uma resposta simulada; portanto, todas as seguintes solicitações POST retornarão o mesmo ID. Além disso, não há verificação da estrutura do conteúdo que estamos enviando.


Fonte

https://techtutorialsx.com

Mais Dicas

[+] Veja todas
© 2012-2021 suadica.com