ESP8266 e Bancos de Dados – Requisições WEB com PHP

Neste artigo vamos mostrar como enviar dados coletados de sensores e armazená-los em um banco de dados usando ESP8266 através da conexão WI-FI e requisições HTTP com PHP


Nosso projeto de exemplo, vai funcionar da seguinte maneira:

  • A cada 30 segundos o ESP8266 vai ler os dados do sensor e enviá-los através da conexão Wi-Fi a um servidor WEB via requisição HTTP  (GET ou POST);
  • No servidor um script PHP vai receber os dados enviados e gravá-los no banco de dados .

Supõe-se que o leitor tenha conhecimentos básicos sobre a teoria de Bancos de Dados Relacionais e MySQL, bem como sobre requisições HTTP.
No final do artigo relaciono alguns links úteis nesse sentido.

Passo 1: Criação do Banco de Dados

Vamos criar um banco de dados que será usado futuramente para armazenar os dados de uma estação meteorológica. Por isso nossa tabela receberá o nome de weather

Para criar o banco e a tabela, utilizei a ferramenta phpMyAdmin que vem com o uWamp – pacote de instalação do Apache + PHP + MySQL

Crie o banco de dados maker no MySQL e a tabela weather que receberá os dados dos sensores com a seguinte estrutura:

Obs:

  1. O campo wea_id (chave primária) será incrementado automaticamente a cada inserção;
  2. A mesma coisa acontecerá o campo wea_date que guardará a data e hora em que o sinal foi enviado
  3. Os campos wea_temp e wea_humid vão armazenar os dados de temperatura e umidade enviados pelo ESP,

Passo 2: Script PHP

O script PHP ficará encarregado de ler os dados dos sensores enviados pelo ESP por uma requisição GET, fazer a conexão com o banco e gravar os dados através de um comando INSERT.

Vejamos:

Obs: Crie uma pasta weather dentro da pasta www do servidor e coloque esse script com o nome insert_weather.php.

Passo 3: Protótipo ESP8266

Para nosso teste vamos usar o sensor de temperatura e umidade DHT11 e a placa de desenvolvimento NodeMCU, mas você pode usar qualquer placa compatível com a IDE do Arduino como a WEMOS ou a Adafruit Huzzah.

Montagem:

Nodemcu e DHT11
Nodemcu e DHT11

O sketch comentado ficou da seguinte forma:

Obs:

  1. Repare que usamos library SimpleDHT para controlar o sensor DHT11, mas você pode usar a library de sua preferência. Veja aqui as instruções para usar essa biblioteca.
  2. Neste exemplo usamos o servidor de teste da máquina local Windows, o localhost. No entanto, para acesso remoto não deve ser usado o IP 127.0.0.1. Para saber o IP da máquina local para a variável server use o comando ipconfig e observe o valor do ipv4.

Passo 4: Ação

Depois de criar o banco e upar o sketch para o ESP, realize a seguinte sequência de passos para ver tudo funcionando:

  • Startar o servidor através da ferramenta uWamp. O Apache deve ser startado no modo ONLINE;
  • Startar o sketch do ESP8266 e abra o Monitor Serial da IDE para acompanhar as mensagens de log.

Pronto! Para ver o resultado abra o phpMyAdmin e execute o seguinte comando SQL:

SELECT * FROM WEATHER

E então você verá os dados chegando a cada 30 segundos.
Até a próxima!

Referências

15 comentários sobre “ESP8266 e Bancos de Dados – Requisições WEB com PHP”

  1. Poderia passar algum link que mostre um exemplo de como buscar uma informação presente no nomeMCU e apresentá-la numa página WEB, como por exemplo ver o status do led da placa? Obrigado.

  2. Olá José Cintra!

    Onde posso encontrar estas bibliotecas? Poderia deixar um link?
    #include
    #include

    Obrigado!

  3. Bom dia;

    José Cintra, estou com uma dificuldade para conseguir gravar os dados do sensor DHT 11 no bando dos dados (MYSQL) que só me retorna um conjunto vazio no Uwamp. Fiz todas as configurações necessárias que você descreveu no tutorial, mas não deu certo. Só fiquei em dúvida sobre qual endereço de requisição HTTP tenho que colocar nesse campo: (const char http_site[] = “http://mycomputer”;) no lugar de mycomputer?

    Abraços.

    1. Olá Gilielson,!
      Para saber qual o endereço usar no sketch, execute o comando ipconfig do windows.
      Instruções completas enviei no seu email
      Abraço
      José Cintra

  4. Boa noite!
    No meu projeto pretendo coletar dados de sensores pelo ESP8266 Sparkfun e enviá-los para ser exibido na página da minha empresa em forma de gráficos em tempo real. Parabéns pelo tutorial, mas infelizmente no serial monitor tenho essas mensagens de retorno:

    Gravando dados no BD:
    27 *C, 57 %
    /?temp=27&humid=57
    HTTP/1.1 404 Not Found
    Server: Apache
    Content-Type: text/html; charset=iso-8859-1
    Content-Length: 225
    Accept-Ranges: bytes
    Date: Mon, 27 Mar 2017 23:22:20 GMT
    Age: 0
    Connection: close

    404 Not Found

    Not Found
    The requested URL /weather/insert_weather.php/ was not found on this server.

    Gravando dados no BD:
    27 *C, 58 %
    /?temp=27&humid=58
    HTTP/1.1 404 Not Found
    Server: Apache
    Content-Type: text/html; charset=iso-8859-1
    Content-Length: 225
    Accept-Ranges: bytes
    Date: Mon, 27 Mar 2017 23:22:26 GMT
    Age: 107
    Connection: close

    Essa mensagem fica repetindo para sempre.

    Teria alguma dica que eu possa tentar? Fiz exatamente como você ensinou.

    Obrigado!!

    1. Olá Paulo!
      Esse erro ocorre quando a página não foi encontrada na pasta do servidor.
      Verifique no servidor que você instalou qual deve ser a pasta onde ficam os documentos web.
      No servidor que uso essa pasta se chama WWW. Em outras instalações essa pasta pode estar configurada com outros nomes, como ROOT ou HTDOCS.
      Dentro dessa pasta deve ser criada a pasta weather para colocar os arquivos do exemplo:
      /weather/insert_weather.php/
      Verifique qual a porta esta usando também.
      Abraço.

      1. Bom dia José Cintra!

        No meu servidor tenho a pasta httpdocs. Dentro dela coloquei a pasta weather e continuou com o mesmo erro. Tentei adicionar a pasta weather na pasta httpdocs/www.gridenergia.com.br/ que se encontra no servidor, mas continuou com o mesmo erro. Usei a porta 8080 como você descreveu no tutorial e também a porta 80, mas ainda nenhum resultado.

        Esse projeto consiste em um trabalho de tcc que estou desenvolvendo e preciso muito que de certo kkkkkk. Teria como entrar em contato com você por email para que possa me dar uma ajuda ou alguma dica?

        Desde já agradeço sua atenção! Bom dia.

          1. Estou usando seu exemplo contudo estou tendo o seguinte erro

            HTTP/1.1 400 Bad Request
            Server: Apache
            Content-Type: text/html; charset=iso-8859-1
            Content-Length: 226
            Accept-Ranges: bytes
            Date: Fri, 31 Mar 2017 18:02:26 GMT
            Age: 0
            Connection: keep-alive

            400 Bad Request

            Bad Request
            Your browser sent a request that this server could not understand.

            HTTP/1.1 400 Bad Request

  5. Boa tarde,

    Eu consigo inves de mandar dados, fazer com que o ESP8266 pegue a tag de um cartão via leitor RFID e buscar dados em um banco de dados?

    Obrigado

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *