\ Projeto IoT: Integrando o Arduino ao PHP e ao MySQL

Projeto IoT: Integrando o Arduino ao PHP e ao MySQL


Recentemente adquiri o livro Criando Projetos com Arduino para a Internet das Coisas, da editora Novatec, autor Adeel Javed. Fiquei entusiasmado com livro, de fato, o livro é "um guia para o entusiasta de Arduino ávido por aprender" como diz na capa. Os projetos desenvolvidos no livro, se bem explorados, abre um leque de possibilidades à criação de novos projetos: é um aprendizado muito interessante e gostaria de compartilhar com vocês essa experiência.

Assim como no projeto da Campainha elétrica com o XBee, tive que fazer adaptações. É muito raro conseguir desenvolver um projeto de um livro traduzido; às vezes, faltam componentes eletrônicos específicos, ou, até mesmo, aplicativos específicos; e, aí, chega o momento de fazer adaptações a fim de produzir o efeito desejado. O projeto desenvolvido aqui foi o do capítulo 8 do livro, mas no que consiste? Consiste na construção de um sistema de monitoramento de temperatura. No projeto do livro foi usado o sensor de temperatura TMP36 - esse sensor já foi usado no Projeto: usando um sensor de temperatura com o Arduino, entretanto, para o projeto desse artigo utilizarei o sensor DS18B20 - esse também já usamos em um projeto recente: Tutorial: Display LCD I2C e sensor de temperatura

Outra mudança feita no projeto original foi a não utilização do módulo Wifi; uma pena que esse módulo parou de ser produzido (descontinuado); infelizmente quase todos os projetos do livro são feitos com ele. Como eu tinha o módulo Ethernet W5100, acabei utilizando ele, e, deu super certo! Para o desenvolvimento do projeto precisaremos de um servidor PHP (instalado no seu computador ou hospedado) e um servidor MySQL (também instalado ou hospedado); o autor utilizou ambos hospedados, nesse projeto, faremos tudo localmente.

Para esse artigo não ficar muito longo, pois, mostrarei em detalhes todo o desenvolvimento do projeto,  irei dividi-lo em 8 etapas; com as etapas: um (instalação) e dois (utilização do módulo Ethernet) em links para outras páginas;
Figura 1: Edite o arquivo httpd-vhosts.conf conforme o esquema para evitar problemas.
  • Configuração do Módulo Ethernet W5100 com Arduino;
  • Criação da tabela de dados no MySQL (servidor Maria DB);
  • Desenvolvimento dos códigos na linguagem PHP;
  • Teste de conexão do Arduino com o servidor;
  • Materiais utilizados e Esquema de Ligação; 
  • Código do projeto principal;
  • Projeto funcionando.

Depois de instalado e configurado o servidor WAMP SERVER e de saber utilizar o módulo Ethernet no Arduino partiremos para a terceira etapa do projeto.


Criação da tabela de dados no MySQL (Servidor MariaDB)

As tabelas foram criadas no servidor MariaDB (que é compatível com o MySQL em protocolos, estruturas e interfaces); ele pode ser acessado no endereço http://localhost/phpmyadmin/. Por padrão, o usuário é "root" e não há senha configurada (sem senha). No lado direito da janela, clicamos no botão novo. Digite o nome do banco de dados e clica em criar (Figura 2). Digite o nome da tabela e clica em criar tabela, escolha o número de colunas 3 e clique em executar (Figura 3). Utilizamos os nomes "bdtemperaturas" o nome do banco de dados e "tb_sensords18b20" o nome da tabela. Esses nomes precisam ser guardados porque serão utilizados nos códigos em breve. 

Figura 2: Criação do banco de dados.

Figura 3: Criação da tabela.

Criamos 3 variáveis para o projeto - nessa ordem: uma variável ID do tipo inteira auto-incrementada (chave primária); uma do tipo timestamp e outra do tipo double chamada TEMPERATURA (essa variável vai guardar as leituras do sensor). As Figuras 4 e 5 exibem detalhes de configuração dessas variáveis.  
 
Figura 4: detalhes das variáveis criadas para o projeto. 

Figura 5: estrutura das varáveis criadas para o projeto.

Assim concluímos essa etapa do projeto. Seguimos adiante.


Desenvolvimento dos códigos na linguagem PHP

A primeira coisa a se fazer aqui é criar uma pasta para seu projeto. A pasta precisa ser inserida em C:\wamp64\www (usei o sistema Operacional WINDOWS). Aliás, todos os projetos que produziremos precisam estar inseridos nesta pasta. Criei uma pasta chamada "temp-monitor" e dentro dela coloquei os códigos em PHP. Esses códigos poderão ser escritos no bloco de notas do Windows, particularmente, gosto muito de usar o Visual Studio Code para digitá-los (fica a dica). Iremos criar três códigos: o primeiro de conexão com o servidor do banco de dados (conexao.php); o segundo para fazer a  comunicação com o sensor de temperatura (add.php); e, o terceiro, o index.php que utiliza o script dojo que cria o painel de temperatura (fiz uma pequena alteração no código do autor para alterar a aparência do painel.)

O primeiro código conexao.php. Observe que estamos utilizando o servidor local (localhost), colocamos o usuário root, sem senha (null), o banco de dados que criei (bdtemperaturas), e, utilizamos o Charset utf8 (para exibição de caracteres especiais). Logo abaixo, usamos a função mysqli para abrir uma conexão com o servidor. Fazemos a conexão com banco de dados e verificamos se ocorre algum erro; se sim, ele retornará uma mensagem "[erro]: conexão falhou!". 

Figura 6: código de conexão.

No código add.php foi utilizado a função include (incluímos o arquivo de conexão). Em seguida, utilizamos o método GET para extrair dados do sensor de temperatura - tentamos inserir o valor de temperaturas na tabela "tb_sensords18b20" alterando a variável "TEMPERATURA". Se os dados forem inseridos corretamente, ele retorna uma mensagem (essa mensagem será exibida no monitor serial do Arduino) de sucesso. 

Figura 7: código add.php (insere dados do sensor no banco de dados)

O terceiro código foi o index.php. Utilizamos o código do livro que pode ser obtido aqui. Só fizemos algumas adaptações relacionadas ao banco de dados e às tabelas criadas. Alterei a escala para Celsius, diminuir o intervalo da apresentação dos dados (no eixo vertical). Além disso, traduzimos os textos dos eixos dos gráficos de temperaturas e alteramos um pouco o loyalty do painel (as cores). Todos os arquivos utilizados no projeto estão disponíveis aqui.


Teste de conexão do Arduino com o servidor 

Na hora de executar um projeto, é, de suma importância, ir fazendo a verificação do funcionamento de partes deles. Por exemplo, o teste de comunicação do Arduino com o servidor é algo que vale a pena ser feito (por enquanto, não iremos ligar o sensor de temperatura ao Arduino). Para testar essa comunicação utilizei o código abaixo. O arquivo "testedeconexao.ino" foi escrito no IDE do Arduino. Dividi ele em duas partes para melhor entendimento (Usei o VSCode para apresentar o código). 

Na primeira parte do código incluímos duas bibliotecas: a SPI e a Ethernet; ambas já pré instaladas na IDE do Arduino, bastando incluí-las ao código. Definimos o endereço MAC na variável mac[ ] e adicionamos um cliente. Definimos o endereço do servidor na variável server[ ]. Esse endereço pode ser obtido abrindo a linha de comando do Windows (Prompt de Comando) e digitando: ipconfig. Trata-se do Endereço Ipv4; o meu endereço foi o 192.168.1.7 (muito cuidado porque esse endereço pode ser alterado ao reiniciar o roteador, por exemplo). Em seguida, declaramos a porta que faremos a comunicação e algumas variáveis que utilizaremos no nosso teste. Na função void setup inicializamos o monitor serial e fazemos a conexão do módulo Ethernet com a Internet; se a conexão for bem sucedida, o endereço IP será exibido.

Figura 8: código que testa a conexão do Arduino com o servidor (primeira parte). 

A partir da linha 24 construí a função transmissaodedados() - o objetivo dela é a de fazer a comunicação com o servidor usando HTTP. A função encapsula todos os detalhes da preparação da solicitação para o método GET, conectando ao servidor e enviado a solicitação. Em uma solicitação que utiliza o método GET, os dados são enviados como parte do URL em um formato nome/valor, como, por exemplo: http://192.168.1.7/temp-monitor/teste.php?temperatura=10. O exemplo mostra a variável temperatura recebendo o valor 10 (faremos algo semelhante com o sensor para enviar dados de temperaturas). Por fim, transmite-se a solicitação HTTP para o servidor usando o método client.println(). Este método enviará os comandos ao servidor pela rede e então receberá qualquer resposta do servidor. 

No nosso exemplo, fazemos o incremento de uma unidade à variável Contador para cada solicitação HTTP GET enviada. Observe o código teste.php (Figura 10): ele é acionado toda vez que a linha transmissaodedados() é lida na função loop() com um atraso de 5s. 
 
Figura 9: código que testa a conexão do Arduino com o servidor (segunda parte). 

Figura 10: código em php  

Carregue o código testedeconexao.ino na IDE do Arduino. O download dos arquivos para realização dos testes podem ser baixados aqui. Se obteve sucesso, a resposta no Monitor Serial  será semelhante ao da Figura 11 abaixo. Se conseguiu, agora partiremos para a montagem do circuito real do nosso projeto.

Figura 11: teste de conexão método HTTP GET - valores de temperaturas sendo incrementadas.


Materiais utilizados e Esquema de Ligação 

Materiais utilizados no projeto

Um Arduino UNO R3;
Um módulo Ethernet;
Um sensor de temperatura DS18B20;
Um resistor de 4,7 KOhm;
Fios Jumpers.

Esquema de Ligação

Conecte o módulo Ethernet ao Arduino. E ligue o sensor conforme o esquema.

Figura 12: Esquema de conexão do sensor DS18B20 ao módulo Ethernet e ao Arduino.


Código do projeto principal


O código foi construído baseado em tudo que foi discutido até o momento. Lembra que usamos o sensor de temperatura DS18B20, se tiver dúvidas em relação a sua utilização de uma lida no artigo: Projeto: usando um sensor de temperatura com o Arduino.      


Projeto funcionando


Inicialize seu servidor WampServer e carregue o sketch acima no Arduino. Abra o Serial Monitor, se tudo transcorrer bem, será exibido algo semelhante ao da Figura 13. Para verificar se funcionou, aguarde até que pelo menos 30 temperaturas sejam inseridas no banco de dados e abre http://localhost/temp-monitor/ para verificar o resultado. A Figura 14 exibe o gráfico das temperaturas passadas pelo sensor DS18B20. 

Figura 13: Temperaturas sendo adicionadas no banco de dados através do método HTTP GET.

Figura 14: Resultado final  do projeto integrando o Arduino ao PHP e ao MySQL.


Resultado final do projeto em vídeo. Se gostou deixe um comentário ou compartilhe.



5 Comentários

  1. Muito bom. Parabéns pelo conteúdo e por compartilhar conosco.
    Vai ajudar muito.
    Grande abraço.

    ResponderExcluir
  2. Olá,
    Como seria, para caso na página PHP enviasse um comando (ler sensor, acender algo) para o arduino?

    ResponderExcluir
  3. Leandro Paludo Casiraghi25 de setembro de 2022 às 05:44

    olá amigo, consegue me ajudar?

    ResponderExcluir
  4. valeu adorei a matéria, tava precisando muito aprender sobre isso

    ResponderExcluir

Postar um comentário

Postagem Anterior Próxima Postagem