Biblioteca para fazer consultas HTTP com módulo WiFi ESP8266 e Arduino

Biblioteca para fazer consultas HTTP com módulo WiFi ESP8266 e Arduino

Biblioteca para fazer consultas HTTP com módulo WiFi ESP8266 e Arduino

Uma maneira simples de enviar informações de e para um microcontrolador é centralizá-las em um servidor web. Embora não seja um método tão eficiente como, por exemplo, acessar diretamente um banco de dados, é bastante eficaz, principalmente se considerarmos um projeto baseado em um microcontrolador, e agregarmos as vantagens da ubiquidade (dados na nuvem) e da simplicidade (é podem ser tratadas como informações de texto e pedidos). O envio de informações através deste sistema pode consistir em fazer solicitações HTTP POST e recebê-las analisando o conteúdo da resposta a uma solicitação HTTP GET.

Tabela de conteúdos

    El Módulo WiFi ESP8266 É uma opção muito econômica, com desempenho muito adequado para uso com microcontroladores e muito fácil de usar trabalhando com comandos AT.

    Para sistematizar seu uso com solicitações HTTP, desenvolvi uma pequena biblioteca que suporta as necessidades do meu projeto de dispositivo de gerenciamento de sono (que chamei de SleepManager), pois baseia sua infraestrutura em um servidor web que permite sua extensão a um objeto. Internet das coisas como serviço na nuvem. Não é difícil adicionar outros serviços como solicitações UDP à biblioteca, por exemplo, para sincronização de tempo sobre NTP embora, como explico no texto vinculado, não seja crítico para minhas necessidades e posso resolvê-lo de forma aceitável com uma solicitação HTTP para uma página web preparada para esse fim, como mostro em um exemplo de uso desta biblioteca.

    O funcionamento da biblioteca baseia-se no envio de comandos AT quando o dispositivo está disponível e na sua repetição (com um pequeno atraso) em caso de erro, o que é interpretado como indisponibilidade (com sucesso, por teste) por exemplo a partir de um ponto de acesso WiFi ou servidor que está sendo consultado.

    A biblioteca aproveita o fato do módulo WiFi ESP8266 retornar um código +IPD como aviso de recepção de dados para preencher um pequeno buffer com as informações retornadas pelo servidor. Para o projeto do dispositivo de gerenciamento de sono, preciso analisar muito poucos dados retornados do servidor, portanto, para economizar, o buffer e o ponteiro que passam por ele são especialmente pequenos; Esta será uma das primeiras coisas que você terá que mudar para reutilizar a biblioteca para processar um volume maior de dados.

    As funções expostas como públicas permitem (1) saber o estado do módulo: se está conectado ou não, se há dados no buffer e quantos e se o módulo ESP8266 concluiu a operação que foi solicitada; (2) conectar-se a um ponto de acesso WiFi em uma rede com um servidor DHCP e (3) fazer solicitações HTTP GET e POST embora, como você verá, o código seja projetado para facilitar a adição de outros.

    Quanto ao funcionamento interno, primeiramente são construídas duas matrizes, uma com as ordens de AT e outra com as respostas esperadas para acerto e erro; Então, o programa que usa a biblioteca deve chamar a função de tempos em tempos enviar que se encarregará de enviar os pedidos ao módulo caso estejam disponíveis e não ocupados e à função recibir que processará as respostas do módulo ESP8266 (e do servidor HTTP através dele, se aplicável)

    Como existe a possibilidade do módulo ser desconectado por perda de sinal, o programa principal pode verificar se o módulo ESP8266 está conectado ao ponto de acesso WiFi (com a função conectado) e tente conectar de outra forma (com a função conectar_wifi)

    Para saber se a operação solicitada foi concluída, o programa pode utilizar a função operação_concluída e nesse caso enviar outro ou usar os dados resultantes para os quais a função é usada read_buffer, que retorna o conteúdo do buffer que foi preenchido com os dados que chegaram ao módulo ESP8266 até a conclusão da operação, e a função comprimento_buffer que informa a quantidade desses dados que o servidor avisou que iriam ser enviados (para que as informações do próprio módulo possam ser descontadas)

    O exemplo abaixo utiliza a biblioteca de consultas HTTP com o módulo WiFi ESP8266 para enviar dados ao servidor (uma porcentagem obtida na leitura de uma entrada analógica) a cada determinado intervalo de tempo. Como não espera receber nenhuma resposta, não utiliza o buffer e é suficiente para que a operação seja concluída corretamente. Este sistema é o que utilizo em meu projeto de dispositivo de gerenciamento de sono para armazenar os resultados das leituras dos sensores no servidor.

    O exemplo a seguir usa uma consulta HTTP GET para consultar a hora do servidor e sincronizá-la com a hora do dispositivo microcontrolado adicionando o tempo de resposta estimado; Na verdade, ele adiciona mais 4 a 6 segundos para garantir que a hora do dispositivo seja maior que a hora do servidor e para verificar facilmente se a hora do relógio em tempo real que faz parte do dispositivo está correta ou foi perdida devido ao download .bateria.

    Depois de muitos testes verifiquei que este sistema de Sincronização de tempo com módulo WiFi ESP8266 É preciso o suficiente para minhas necessidades; na pior das hipóteses, com um erro inferior a 10 segundos, o que é um tanto irrelevante no meu caso.

    Como pode ser visto no código, é necessário primeiro consultar o comprimento do buffer, pois a leitura o reinicia para que fique disponível para armazenar novos dados.

    Uma vez lido o conteúdo do buffer, neste exemplo ele é processado para obter a hora. Primeiro, o texto entre chaves é selecionado (o servidor responde usando o comando PHP echo “{“.time().”}”) lo transforma en un “objeto tiempo” y de él obtiene en formato humano la fecha y la hora.

    O programa de exemplo a seguir, inspirado na consulta de um usuário, é usado para encontrar o endereço IP público usando o serviço Verificar IP AWS (Amazon Web Services) a cada cinco minutos.

    Tal como nos exemplos anteriores, são feitas uma série de suposições que deverão ser alteradas dependendo da configuração de rede utilizada (192.168.1.X, no exemplo), do SSID e da chave WiFi... A forma de encontrar o O endereço IP não é muito elegante, assume que é a última linha da resposta à solicitação HTTP GET embora possa haver uma API para fazê-lo de uma forma mais ortodoxa.


    você pode baixe a biblioteca ESP8266 para consultas HTTP com Arduino Uno (sem console) e daqui você pode baixe a biblioteca de consulta HTTP ESP8266 para Arduino que utiliza um console, ou seja, precisa implementar uma porta serial por software ou usar como hardware, por exemplo, uma placa-mãe Arduino Mega o Arduino Leonardo.

    Postar Comentário

    Você pode ter perdido