Código de Pesquisa

Usando um ESP32 como um Cliente HTTP para Enviar Informações via WiFi para um Servidor Remoto

Usando um ESP32 como um Cliente HTTP para Enviar Informações via WiFi para um Servidor Remoto

Neste tutorial, exploraremos como usar o microcontrolador ESP32 como um cliente HTTP para enviar dados a um servidor remoto via WiFi. O ESP32 é uma placa de desenvolvimento poderosa que combina capacidades de WiFi e Bluetooth, tornando-a ideal para aplicações de IoT. Ao final deste tutorial, você será capaz de enviar requisições HTTP com parâmetros definidos pelo usuário e receber respostas de um servidor.

ESP32-38pinos-1

Estaremos utilizando o Arduino IDE para programar o ESP32, e eu irei guiá-lo através dos passos necessários para configurar seu ambiente. Para um guia visual, recomendo que você confira o vídeo associado (no vídeo em :00).

Hardware Explicado

O componente principal deste projeto é o microcontrolador ESP32, especificamente o módulo WROOM32. Este módulo possui 38 pinos que podem ser usados para várias operações de entrada/saída. Opera a 3,3 volts e inclui capacidades integradas de WiFi e Bluetooth. O ESP32 é versátil e pode ser usado em muitas aplicações, graças aos seus pinos GPIO e protocolos de comunicação.

ESP32-3

Além do ESP32, você pode precisar de um conversor USB-serial para programação e depuração. O módulo também contém um regulador de tensão, que garante que o microcontrolador receba uma fonte estável de 3,3V de uma fonte de tensão mais alta. No geral, o ESP32 é um microcontrolador bem equipado, adequado para vários projetos.

Detalhes do Ficha Técnica

Fabricante Espressif Systems
Número da peça ESP32-WROOM-32
Tensão lógica/IO 3,3 V
Tensão de alimentação 5 V (máx)
Corrente de saída (por canal) 12 mA
Corrente de pico (por canal) 160 mA
Orientação sobre frequência PWM 1 kHz
Limites de lógica de entrada 0,3 * VDDbaixo, 0,7 * VDD(alto)
Queda de tensão / RDS(on)/ saturação 0,5 V
Limites térmicos 125 °C
Pacote QFN
Notas / variantes Diferentes tamanhos de flash disponíveis
ESP32-2
  • Garanta níveis de tensão corretos (3,3V) para evitar danificar o ESP32.
  • Use capacitores de desacoplamento apropriados perto dos pinos de potência para operação estável.
  • Implemente dissipação de calor se o módulo operar próximo aos seus limites de corrente máxima.
  • Utilize o WiFi integrado do ESP32 para uma fácil conectividade de rede.
  • Tenha cuidado com as configurações dos pinos GPIO para evitar curtos-circuitos.
  • Teste com esboços simples para confirmar a funcionalidade antes de integrações complexas.

Instruções de fiação

Para ligar o ESP32 para este projeto, comece conectando o pino de terra do ESP32 ao terra da sua fonte de alimentação. Em seguida, conecte a fonte de alimentação de 5V ao pino Vin ou V5 no ESP32, que alimentará o regulador de tensão interno e fornecerá 3,3V ao microcontrolador.

Para a funcionalidade do cliente HTTP, certifique-se de que seu ESP32 esteja conectado a uma rede WiFi. Você precisará conectar os pinos apropriados para quaisquer componentes adicionais que possa usar, como sensores ou LEDs. Por exemplo, conecte um LED ao pino GPIO 2, com um resistor em série para limitar a corrente. O terminal mais longo (ânodo) do LED deve ser conectado ao pino 2, enquanto o terminal mais curto (cátodo) se conecta ao terra.

Exemplos de Código e Passo a Passo

No provided text to translate.mainURL, que contém a URL para a qual estamos enviando a solicitação, euser, que contém informações do usuário. O código também configura o ESP32 para se conectar a uma rede WiFi especificada.

String mainURL ="http://ddas.cc/httpTest/?";
String user="user=ahmad22";

Aqui,mainURLé o ponto final que estamos almejando, enquantousermantém o parâmetro do usuário que será enviado na requisição HTTP.

No textosetup()função, começamos a comunicação serial e configuramos a conexão WiFi. Também nos preparamos para a solicitação HTTP criando uma instância do cliente HTTP.

void setup() {
  Serial.begin(115200);
  WiFi.mode(WIFI_STA);
  WiFiMulti.addAP("Robojax", "Your password");
}

Esta seção inicializa o monitor serial para depuração e conecta-se à rede WiFi. As credenciais são definidas noaddAP()método.

No textoloop()função, verificamos se há uma conexão WiFi bem-sucedida e prosseguimos para enviar a solicitação HTTP GET. Os parâmetros incluem os valores do usuário e da temperatura.

if (http.begin(client, mainURL+user+"&temp="+temperature+"&type="+type)) {
  int httpCode = http.GET();}

Este código constrói a URL completa com parâmetros de consulta e executa a requisição GET. Se bem-sucedido, ele recupera a resposta do servidor.

Demonstração / O que Esperar

Quando o ESP32 é ligado e o programa é executado, ele deve se conectar à rede WiFi especificada e enviar uma solicitação HTTP GET ao servidor. Você pode monitorar a saída no Monitor Serial, onde verá o código de status HTTP e a carga útil de resposta do servidor. Problemas comuns podem incluir credenciais WiFi incorretas ou um servidor inacessível (no vídeo às 12:30).

Marcas de tempo do vídeo

  • 00:00 Início
  • 00:53 Introdução
  • 05:04 pinos 5V e 3,3V
  • 08:38 Recursos explicados
  • 14:03 Pinos na Ficha Técnica
  • 17:00 Exemplo de Piscar
  • 19:14 Exemplo de piscar com LED externo
  • 21:00 Teste de Cliente HTTP

Imagens

ESP32-1
ESP32-1
ESP32-2
ESP32-2
ESP32-3
ESP32-3
ESP32-38pin-1
ESP32-38pin-1
ESP32-38pin-2
ESP32-38pin-2
241-ESP32 HTTP Client code example
Idioma: C++
/*
 * ESP32 HTTP Client example
 * This example is part of Introduction to ESP32 WiFi, Bluetooth Microcontroller board
📚⬇️ Download and resource page https://robojax.com/RJT211
watch full video https://youtu.be/--Fj8QDlGuQ
 * 
 * Updated/Written by Ahmad Shamshiri 
 * On August 25, 2019 in Ajax, Ontario, Canada
 * Watch video instruction for this code:
 * https://youtu.be/--Fj8QDlGuQ
 * 
 * 
 Get this code and other Arduino codes from Robojax.com
Learn Arduino step by step in a structured course with all material, wiring diagrams, and libraries
all in one place. 

If you found this tutorial helpful, please support me so I can continue creating 
content like this. 

or make a donation using PayPal http://robojax.com/L/?id=64

 *  * This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.* 
 * This code has been downloaded from Robojax.com
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <https://www.gnu.org/licenses/>.
 */

#include <Arduino.h>

#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>

#include <ESP8266HTTPClient.h>

#include <WiFiClient.h>

ESP8266WiFiMulti WiFiMulti;
String mainURL ="http://ddas.cc/httpTest/?";
String user="user=ahmad22";
float temperature=45.3;
char type='j';

void setup() {

  Serial.begin(115200);
  // Serial.setDebugOutput(true);

  Serial.println();
  Serial.println();
  Serial.println();

  for (uint8_t t = 4; t > 0; t--) {
    Serial.printf("[SETUP] WAIT %d...\n", t);
    Serial.flush();
    delay(1000);
  }

  WiFi.mode(WIFI_STA);
  WiFiMulti.addAP("Robojax", "YOur password");

}

void loop() {
  // wait for WiFi connection
  if ((WiFiMulti.run() == WL_CONNECTED)) {

    WiFiClient client;

    HTTPClient http;

    Serial.print("[HTTP] begin...\n");
    if (http.begin(client, mainURL+user+"&temp="+temperature+"&type="+type)) {  // HTTP


      Serial.print("[HTTP] GET...\n");
      // start connection and send HTTP header
      int httpCode = http.GET();

      // httpCode will be negative on error
      if (httpCode > 0) {
        // HTTP header has been send and Server response header has been handled
        Serial.printf("[HTTP] GET... code: %d\n", httpCode);

        // file found at server
        if (httpCode == HTTP_CODE_OK || httpCode == HTTP_CODE_MOVED_PERMANENTLY) {
          String payload = http.getString();
          Serial.println(payload);
        }
      } else {
        Serial.printf("[HTTP] GET... failed, error: %s\n", http.errorToString(httpCode).c_str());
      }

      http.end();
    } else {
      Serial.printf("[HTTP} Unable to connect\n");
    }
  }

  delay(10000);
}

Coisas que você pode precisar

Recursos e referências

Arquivos📁

Folha de dados (pdf)