Como fazer requisições HTTP usando Arduino para IoT

Uma etapa essencial no desenvolvimento de aplicativos de Internet das Coisas (IoT) é configurar a comunicação entre os dispositivos IoT e um servidor ou serviços web.

Os dispositivos IoT se comunicam com um servidor web, serviço ou API por meio de solicitações HTTP. Uma solicitação HTTP é uma mensagem enviada por um cliente a um servidor no contexto da World Wide Web. Isso permite que dispositivos inteligentes atuem como clientes web, trocando dados e informações com servidores via Internet. Muitos projetos de IoT são construídos usando Arduino e placas compatíveis com Arduino. Arduino é atualmente a plataforma de microcontrolador mais popular para prototipagem de aplicações embarcadas típicas, incluindo IoT.

Neste artigo, discutiremos como o Arduino e placas compatíveis são configurados e programados para “conversar” pela Internet. A comunicação pode ocorrer graças a solicitações HTTP.

O que é uma solicitação HTTP?
Uma solicitação HTTP é uma mensagem enviada por um cliente a um servidor no contexto da World Wide Web. É a maneira padrão pela qual os clientes da Web (navegadores da Web e outras entidades conectadas à Web, como dispositivos IoT) solicitam dados de servidores ou enviam dados aos servidores.

Essas solicitações são a base da comunicação de dados na web e operam como parte do Hypertext Transfer Protocol (HTTP) — um protocolo da camada de aplicação no conjunto de protocolos da Internet.

Uma solicitação HTTP inclui as seguintes partes.

1. Linha inicial: contém três elementos: o método HTTP, o destino da solicitação e a versão HTTP. O método HTTP indica a ação a ser executada no recurso como GET, POST, PUT DELETE, etc. O destino da solicitação é uma URL ou o caminho para o recurso no servidor. A versão HTTP especifica a versão do protocolo HTTP, como HTTP/1.1.

2. Cabeçalhos: contêm metadados sobre a solicitação, como host, agente do usuário, tipo de conteúdo e outras informações sobre o cliente ou os dados que estão sendo enviados.

3. Linha vazia: o final da seção do cabeçalho e o início do corpo opcional (solicitação HTTP) são indicados por uma linha vazia.

4. Corpo: não está presente em todas as solicitações (como na maioria das solicitações GET), mas quando está, contém os dados a serem enviados com a solicitação. Isso é típico em solicitações POST em que dados de formulário ou uploads de arquivos são enviados ao servidor.

Sempre que você navega em uma página da web, preenche um formulário ou chama uma API de um aplicativo da web, o cliente envia uma solicitação HTTP. Após receber a solicitação, o servidor a processa e responde com uma resposta HTTP que inclui os dados solicitados, o status da solicitação e, às vezes, um corpo contendo dados adicionais solicitados ou os resultados da operação.

Métodos HTTP
O método HTTP indica a ação a ser executada no recurso. Existem vários métodos HTTP, incluindo GET, POST, PUT, DELETE, HEAD, CONNECT, PATCH, TRACE, OPTIONS, LINK, UNLINK, etc.

  • O método GET solicita dados de um recurso.
  • O método POST envia dados para serem processados ​​para um recurso especificado.
  • O método PUT atualiza um recurso especificado com os dados fornecidos.
  • O método DELETE remove ou exclui um recurso especificado.

GET e POST são os métodos HTTP mais comuns usados ​​para a World Wide Web e IoT. Ao contrário da sua definição, o método GET pode obter e enviar dados para um servidor web.

Solicitações Arduino e HTTP
As placas Arduino devem se conectar através de Ethernet ou WiFi para fazer solicitações HTTP e se comunicar com um servidor web. Um escudo Ethernet é necessário para configurar a comunicação entre o Arduino e a Internet via Ethernet. O escudo WiFi do Arduino é necessário para permitir que o Arduino acesse uma rede WiFi.

Algumas breakout boards permitem que o Arduino se conecte a redes WiFi. Várias placas Arduino agora também vêm com funcionalidade WiFi integrada, incluindo Arduino Uno WiFi Rev2, Arduino Nano 33 IoT, Arduino MKR WiFi 1010, Arduino MKR1000 WiFi, Arduino Portenta H7, Arduino Yun, Arduino Yun Mini e Arduino Yun Rev2.

ESP8266 e ESP32 são placas microcontroladoras alternativas compatíveis com Arduino com funções WiFi e Bluetooth integradas. Se uma placa Arduino não tiver funcionalidade WiFi integrada, será necessária uma blindagem Ethernet ou WiFi para se conectar à Internet.

Como o Arduino se comunica
Quando um dispositivo IoT construído usando Arduino ou qualquer microcontrolador se comunica com um servidor web, serviço ou API, ele opera como um cliente web. O servidor web, serviço e API são recursos identificados por uma URL. A comunicação ocorre através de solicitações HTTP para a URL do recurso especificado. Também pode conter uma string de consulta contendo as variáveis ​​ou dados a serem comunicados ao recurso especificado. Em seguida, o recurso especificado envia uma resposta HTTP. O dispositivo IoT (Arduino ou qualquer microcontrolador) recebe e analisa a resposta HTTP.

As bibliotecas do Arduino
Existem diversas bibliotecas disponíveis para envio de solicitações HTTP do Arduino. As bibliotecas simplificam o processo, especialmente ao usar módulos de rede como ESP8266 ou ESP32, que possuem recursos WiFi integrados ou escudos Ethernet.

As bibliotecas Arduino comumente usadas para fazer solicitações HTTP são as seguintes.

Biblioteca Ethernet: para placas Arduino que se conectam à Internet usando um escudo Ethernet. Ele permite executar todas as tarefas de rede via Ethernet.

Wi-Fi.h: para placas Arduino com suporte WiFi nativo, como Arduino Nano 33 IoT. É usado para gerenciar conexões WiFi e enviar solicitações HTTP.

Biblioteca WiFiNINA: projetado para placas com o módulo u-blox NINA WiFi, como Arduino MKR WiFi 1010, Arduino MKR VIDOR 4000 e Arduino UNO WiFi Rev.2.

Biblioteca ESP8266WiFi: é para o módulo ESP8266 e é frequentemente usado para gerenciar conexões WiFi e executar tarefas de rede, incluindo o envio de solicitações HTTP.

Biblioteca WiFi ESP32: semelhante ao ESP8266WiFi, mas projetado para o módulo ESP32. Ele permite que você se conecte a uma rede WiFi e envie solicitações HTTP.

Biblioteca ESP8266HTTPClient: para ESP8266, fornecendo funcionalidade adicional especificamente para criar solicitações HTTP e lidar com respostas.

Biblioteca HTTPClient: para ESP32, fornecendo funcionalidade adicional especificamente para criar solicitações HTTP e lidar com respostas.

Biblioteca Ethernet
A biblioteca Ethernet permite conexão de rede com LAN ou Internet usando o shield Arduino Ethernet. A biblioteca fornece funcionalidades de cliente e servidor. Ela também se conecta a uma rede DHCP local e resolve DNS. A biblioteca é compatível com todas as arquiteturas da plataforma Arduino.

Esta biblioteca pode ser usada com Arduino Ethernet Shield, Arduino Ethernet Shield 2, Leonardo Ethernet e outros dispositivos baseados em W5100/W5200/W5500. Ele pode configurar uma placa como um servidor aceitando conexões de entrada ou um cliente fazendo conexões de saída. Suporta até oito ou quatro conexões simultâneas. O escudo Ethernet faz interface com o Arduino através do barramento SPI.

A biblioteca é importada em um esboço usando estas instruções:
#incluir
#include

A biblioteca oferece seis aulas:

1. Classe Ethernet
2. Classe endereço IP
3. Classe de servidor
4. Classe de cliente
5. Classe EthernetUDP
6. Classe UDP

Para fazer solicitações HTTP usando Arduino, métodos da classe client são usados ​​no esboço abaixo. O cliente Ethernet é inicializado usando o método EthernetClient , criando um cliente que se conecta a um endereço IP e porta de Internet especificados, conforme definido na função client.connect .

Possui o seguinte protótipo.
Cliente Ethernet

O método não requer parâmetros. Um exemplo válido de inicialização do cliente Ethernet é o seguinte.
Cliente EthernetClient;

A classe cliente da biblioteca Ethernet fornece os seguintes métodos…

cliente.connect : conecta-se a um endereço IP e porta especificados. Ele também oferece suporte a pesquisas de DNS ao usar um nome de domínio. O valor retornado pelo método indica o sucesso ou falha de uma conexão.

Tem esta sintaxe:
cliente.connect
cliente.connect(ip, porta)
cliente.connect(URL, porta)

É necessário um IP e uma porta, ou um URL e uma porta, ou pode não exigir nenhum argumento. IP é o endereço IP ao qual o cliente se conectará, representado por uma matriz de 4 bytes. Porta é a porta à qual o cliente se conectará.

Para solicitações HTTP, a porta normalmente é 80. URL é o nome de domínio ao qual o cliente se conectará. A função retorna 1,-1,-2,-3 ou-4, onde 1 indica SUCESSO, -1 TIMED_OUT, -2 INVALID_SERVER, -3 TRUNCATED e -4 INVALID_RESPONSE.

cliente.conectado : detecta se o cliente Ethernet está conectado. Um cliente é considerado conectado mesmo se a conexão tiver sido fechada, mas ainda houver dados não lidos.

Tem esta sintaxe:
cliente.conectado

O método não aceita argumentos e retorna “true” se conectado; caso contrário, retornará “falso”.
cliente.localPort : retorna o número da porta local à qual o cliente está conectado.

Tem esta sintaxe:
cliente.localPort

cliente.remoteIP : retorna o endereço IP do cliente.

Tem esta sintaxe:
cliente.remoteIP

cliente.remotePort : retorna a porta do host que enviou o pacote de entrada atual.

Tem esta sintaxe:
cliente.remotePort

cliente.setConnectionTimeout : define o tempo limite para client.connect e client.stop . O valor inicial é 1000 ms, que pode ser reduzido para tornar o programa mais responsivo.

Tem esta sintaxe:
client.setConnectionTimeout (milissegundos)

cliente.write : grava dados no servidor ao qual o cliente está conectado. Esses dados são enviados como um byte ou uma série de bytes.

Tem esta sintaxe:
cliente.write(val)
cliente.write(buf, len)

O método usa um valor de byte ou um buffer contendo uma matriz de bytes como argumento.

imprimir : imprime dados no servidor ao qual um cliente está conectado. Ele imprime números como uma sequência de dígitos – cada um deles um caractere ASCII.

Tem esta sintaxe:
cliente.print(dados)
cliente.print(dados,BASE)

O método leva os dados a serem impressos como argumento. Também permite especificar a base dos números indicados como DEC para decimais, OCT para octal e HEX para hexadecimal.

client.println : imprime dados seguidos por um retorno de carro e uma nova linha no servidor ao qual o cliente está conectado. Também imprime números como uma sequência de dígitos – cada um como um caractere ASCII.

Tem esta sintaxe:
cliente.println
cliente.println(dados)
cliente.print(dados,BASE)

cliente.disponível : retorna o número de bytes disponíveis para leitura do servidor conectado.

Tem esta sintaxe:
cliente.disponível

cliente.read : lê o próximo byte recebido do servidor ao qual o cliente está conectado.

Tem esta sintaxe:
cliente.ler

cliente.flush : interrompe tudo até que todos os caracteres de saída no buffer tenham sido enviados.

Tem esta sintaxe:
cliente.flush

cliente.stop : desconecta do servidor.

Tem esta sintaxe:
cliente.stop

Fazendo solicitações GET HTTP usando a biblioteca Ethernet
Para enviar uma solicitação HTTP GET do Arduino usando a biblioteca Ethernet, você precisará de um Arduino com um escudo Ethernet ou recursos Ethernet integrados, como Arduino Portenta H7 ou placas baseadas em ESP8266/ESP32.

Componentes

  1. Placa Arduino
  2. Blindagem Ethernet
  3. Cabo Ethernet
  4. Um servidor para receber a solicitação GET

Para demonstração, enviaremos uma solicitação HTTP GET para httpbin.org. Para fazer isso, conecte o shield Ethernet à placa Arduino e conecte o shield a um roteador usando o cabo Ethernet. Em seguida, conecte o Arduino ao seu computador e carregue o seguinte sketch.

Lembre-se de substituir o array MAC pelo endereço MAC da sua blindagem Ethernet, que normalmente está impresso em um adesivo na blindagem. A matriz de servidores deve conter o nome de domínio do servidor para o qual você está fazendo a solicitação. Carregue o esboço no Arduino e observe a saída no Serial Monitor do Arduino IDE.

Fazendo solicitações POST HTTP usando a biblioteca Ethernet
Para enviar uma solicitação HTTP POST do Arduino usando a biblioteca Ethernet, você precisará do Arduino com um escudo Ethernet ou recursos Ethernet integrados.

Componentes

  1. Placa Arduino
  2. Escudo Ethernet
  3. Cabo Ethernet
  4. Um servidor para receber a solicitação POST

Para demonstração, enviaremos uma solicitação HTTP POST para httpbin.org. Conecte a blindagem Ethernet à placa Arduino e conecte a blindagem a um roteador usando o cabo Ethernet. Em seguida, conecte o Arduino ao seu computador e carregue o seguinte esboço.

Lembre-se de substituir o array MAC pelo endereço MAC da sua blindagem Ethernet, que normalmente está impresso em um adesivo na blindagem. A matriz de servidores deve conter o nome de domínio do servidor para o qual você está fazendo a solicitação.

Na variável postData, coloque os dados que deseja enviar no formato application/x-www-form-urlencoded, que é o formato padrão para dados POST em formulários web. Cada par de valores-chave é separado por um E comercial (&) e cada chave é separada de seu valor por um sinal de igual (=).

Carregue o esboço no Arduino e observe a saída no Serial Monitor do Arduino IDE. Quando este esboço for executado, ele tentará postar os dados em httpbin.org/post, que ecoa os dados postados no formato JSON.

Deve-se observar que o envio de solicitações HTTP usando Arduino simples e escudo Ethernet é adequado para aplicações básicas, mas para uma comunicação mais segura pela Internet, considere o uso de HTTPS. Não é automaticamente suportado no Arduino, mas pode ser usado com bibliotecas e hardware adicionais, como o Arduino MKR1000 ou ESP8266/ESP32.

contenido relacionado

Regresar al blog

Deja un comentario

Ten en cuenta que los comentarios deben aprobarse antes de que se publiquen.