Fala meus mestres engenhoqueiros, como vão? Nós voltamos, e desta vez vamos mostrar como utilizar o controlador ESP32 para outro tipo de conexão, diferentemente da última postagem a placa será um ciente HTTP, ou seja, estaremos utilizando o mesmo protocolo, mas desta vez o embarcado estará do “outro lado”, utilizamos tal recurso pois assim é possível enviar e receber dados de um servidor mais facilmente, e por falar em servidor iremos configurar este “na mão” também (afinal de contas, somos quase-engenheiros 😉). Neste laboratório utilizaremos um servidor instalado localmente com as aplicações Apache, o servidor web de código aberto mais popular do mundo, rodando a linguagem PHP, uma linguagem também de código aberto e muito popular para executar aplicações em servidores web e o sistema de banco de dados relacional MySQL, também open source e gratuito que utiliza a linguagem SQL para a criação e administração de suas estruturas de dados. Novamente dizemos para não se preocuparem muito com o que diz respeito a tópicos específicos de computação em nossos artigos, aqui será passado apenas o necessário para que o objetivo seja concluído, porém caso queiram obter mais conhecimento na área, disponibilizaremos links de recursos extras sobre os assuntos abordados, além de disponibilizarmos todos os scripts para download caso esta não seja mesmo a sua praia.
Como eu já disse anteriormente nós faremos todo o processo em um servidor web instalado localmente, ou seja, em nosso próprio computador, para isto utilizaremos a aplicação XAMPP, que se trata de uma stack AMP (Apache, MySQL e PHP), que possui versões para qualquer um dos sistemas operacionais mais utilizados, o processo de instalação desta ferramenta não será abordado aqui, caso você queira faze-lo mas não saiba como, recomendamos este tutorial detalhadíssimo do site wikiHow.
Obs.: caso tenha conhecimento sobre, qualquer tipo de servidor web poderá ser utilizado, o tutorial citado é para o sistema Windows e na hora de escolher os critérios de instalação, apenas Apache, MySQL, PHP e phpMyAdmin são necessários para a aplicação que desenvolveremos.
A seguir criamos uma pasta com um seguinte arquivo PHP inserida em um diretório dentro da pasta de páginas web do servidor (seu caminho ficou “C:\xampp\htdocs” no caso do XAMPP), apenas para fins de teste.

Após isso usamos o comando “ipconfig” no prompt de comando do windows para descobrir o IP de nosso computador.
E executamos o seguinte código no ESP32, que envia uma requisição HTTP ao servidor e escreve a resposta desta no monitor serial.


Observe a linha “olá esp aqui é o servidor” que havíamos escrito no script PHP, no conteúdo da mensagem de resposta. Agora vamos a algumas considerações sobre esta aplicação.
Observe que, aqui nós ainda estamos utilizando a mesma biblioteca que o laboratório passado a <WiFi.h>, e esta utiliza uma estrutura de rede sem fio para enviar pacotes por protocolo TCP, e este é um protocolo da camada de transporte utilizado pelo protocolo HTTP que é da camada de aplicação, ou seja, como fizemos a requisição no código, nós estamos, escrevendo nossa própria aplicação de cliente na mão diretamente sobre a camada de transporte, novamente da maneira mais “raiz” possível, de fato, com um pouco mais de estudo poderíamos até criar protocolos, ainda que simples, de camada de aplicação.
Obs.: existe uma biblioteca de cliente HTTP para o ambiente Arduino, mas nós escolhemos esta implementação pela camada de transporte pois a achamos mais interessante e didática.

Para um servidor conectado a internet, é possível substituir o endereço IP pelo nome de domínio deste, bastando alterações como as abaixo.

Resumindo basicamente como uma requisição HTTP funciona, tomando como base o código acima, este usa o método GET, método do protocolo geralmente utilizado para requisitar dados de um servidor; em seguida é inserida a URI de onde estão os recursos requisitados, uma URI nada mais é que o caminho após a raiz da aplicação, ou simplificadamente a parte do fim de uma URL, por exemplo, olhando na barra de endereço do seu navegador agora, tudo o que estiver após “codenpizzas.wordpress.com” é a URI desta página; tudo após o ponto de interrogação “?” da URI são os parâmetros GET estes geralmente são usados para especificar ao servidor quais recursos daquela página estamos pedindo, e se tratam de uma maneira bem simples de enviar dados a um servidor, que utilizaremos logo mais, observando o caso do Google o parametro “q” se trata dos termos pesquisados na página “search”, caso existissem mais parâmetros estes devem ser separados por um “&”; depois é especificado o protocolo e versão utilizados “HTTP/1.1” e por último, na linha de baixo é especificado o host a ser acessado, este recurso foi adicionado na versão 1.1 do protocolo HTTP devido ao fato de que atualmente um servidor físico pode conter indeterminados servidores virtuais com aplicações distintas, portanto apenas o endereço IP ou nome de domínio não é necessário para acessar um recurso específico.
Ufa isso isso foi bastante conteúdo não é mesmo? Mas ainda não acabamos, agora iremos criar um banco de dados bem básico para receber os dados do sensor DHT11, novamente deixamos claro o intuito deste post não é ensinar desenvolvimento de software e todos os códigos utilizados aqui estarão disponíveis para download.
Para acessar a interface de gerenciamento de banco de dados, com o servidor local rodando, abra um navegador de internet e entre no endereço “localhost/phpmyadmin/” e em seguida clique em “SQL” na barra superior da página para gerenciar os bancos de dados utilizando código na linguagem SQL, insira o seguinte script e clique em “Executar”.

Veja que agora na lista de bancos de dados à esquerda do aplicativo apareceu o banco recém criado.
Clique nele e depois novamente em “SQL” e execute o seguinte código para fazer uma inserção de teste na tabela.

Agora clique no nome da tabela abaixo do banco de dados na aba a esquerda para ver a estrutura da tabela com os dados acima inseridos nela.
E pronto! Quer dizer, quase 😬, nós já conseguimos conectar o ESP a uma aplicação web e criar o banco de dados que utilizaremos, mas ainda não “unimos os pontos”, ou seja, integramos a uma aplicação com este banco para poder popular o banco, e ainda vamos colocar tudo isto na internet para acessarmos de qualquer lugar, porém não foi possível para nós realizar tudo isso em apenas um laboratório 😢, mas certamente o conseguiremos no próximo, até por que a parte mais complicada para nós já se passou, até lá fiquem no aguardo e nos perguntem qualquer coisa que precisar, até mais. 👋
Saiba mais sobre:
PHP: https://www.w3schools.com/php7/
Requisições HTTP: https://medium.com/clebertech/como-funciona-uma-requisição-http-cf76f66fe36e
Bancos de dados SQL: https://pt.khanacademy.org/computing/computer-programming/sql
Fontes: