09 - Laravel - Receção e Armazenamento de Dados.

article featured image

Neste tópico, abordaremos o processo de comunicação entre o Arduino e o controlador, com foco na receção e armazenamento de dados. Exploraremos como os dados recolhidos pelo Arduino podem ser enviados para um controlador central, onde são processados e registados na base de dados, permitindo uma gestão eficiente e segura das informações. Este procedimento é essencial para sistemas integrados, onde a troca de dados em tempo real é fundamental para o correto funcionamento e monitorização de dispositivos conectados.

Irei focar apenas o que considero fundamental ao envio de dados por parte do Arduino e, posteriormente, à receção dos mesmos no Laravel.

 

Arduino

Vamos começar por incluir as bibliotecas necessárias ao funcionamento do Ethernet Shield:

  • SPI.h: Esta biblioteca controla a comunicação SPI (Serial Peripheral Interface), que é a interface usada para comunicar com o Ethernet Shield.
  • Ethernet.h: A biblioteca Ethernet contém todas as funções necessárias para que o Arduino se conecte à rede Ethernet e faça pedidos HTTP a um servidor.

Em seguida, definimos o mac que será usado pelo nosso Ethernet Shield:

  • O endereço MAC (Media Access Control) é um identificador único atribuído a cada dispositivo de rede.
  • Aqui, estamos a definir um endereço MAC personalizado para o Arduino. Cada número (como 0xDE, 0xAD) representa um byte do endereço, escrito em hexadecimal. Este endereço ajuda o Arduino a identificar-se na rede, mas pode ser alterado se houver conflitos de endereços duplicados.

Configuramos o endereço de IP que será dado ao nosso Arduíno de forma estática, embora tentaremos que o no endereço seja dado de forma dinâmica através do protocolo DHCP:

  • Este é o endereço IP estático que será atribuído ao Arduino na rede. O IP serve para localizar o Arduino na rede local.
  • O IP 192.168.88.202 deve estar na mesma faixa da rede local e não deve entrar em conflito com outros dispositivos (por exemplo, computadores, impressoras) que já utilizem IPs semelhantes.

Indicamos o endereço do nosso servidor local (Wamp / Xampp):

  • Aqui, definimos o IP do servidor com o qual o Arduino vai comunicar. Neste caso, o servidor está configurado com o IP 192.168.89.124.
  • O Arduino utilizará este endereço IP para enviar pedidos ao servidor, que pode estar a correr, por exemplo, uma aplicação Laravel.

Definimos a porta de comunicação para o servidor, neste caso e como estamos a trabalhar com o Laravel será a 8000:

  • A variável porta define o número da porta que o Arduino vai usar para se comunicar com o servidor. Neste caso, o número da porta é 8000, que é comum para servidores locais em desenvolvimento, como o Laravel.
  • Esta porta precisa estar aberta e configurada no servidor para aceitar ligações do Arduino.

E, por fim, definimos o cliente Ethernet:

  • EthernetClient cria um objeto de cliente que o Arduino usará para se conectar ao servidor.
  • O objeto client permite ao Arduino iniciar a ligação ao servidor e enviar/receber dados através do protocolo HTTP.

 

No void setup(), iremos iniciar a conexão do Ethernet Shield através da função startEthernetShield()

A função startEthernetShield() tenta estabelecer uma conexão de rede para o Arduino usando o Ethernet Shield. Primeiro, tenta atribuir um endereço IP automaticamente através do DHCP. Se falhar, verifica se o hardware Ethernet está presente e se o cabo está conectado. Caso o DHCP não consiga atribuir o IP, a função utiliza o endereço IP definido manualmente.

Por fim, vamos utilizar a função sendEstadoLeds() para enviar os dados para o Laravel:

A função sendEstadoLeds() faz um pedido HTTP GET ao servidor para atualizar o estado dos LEDs de uma divisão específica. Após estabelecer a ligação, envia o pedido, incluindo o idDivisao e o statusLED. Se a ligação for bem-sucedida, o Arduino lê e exibe a resposta do servidor. Se a ligação falhar, uma mensagem de erro é exibida.

 

Laravel

O que precisamos de fazer do lado do Laravel? Como estamos a utilizar uma estrutura MVC, faz todo o sentido seguir essa mesma abordagem de programação. Vamos, então, começar por criar o controlador EthernetController.

php artisan make:controller EthernetController

De seguida, vamos criar a rota que permitirá o acesso a este controlador:

Vontando ao controlador EthernetShield, vamos criar o seguinte método:

Esta atualiza o estado de uma divisão na base de dados com base no valor recebido para o LED (ligado ou desligado) e, em seguida, regista a operação num log, incluindo o ID do utilizador (Arduino), o ID da divisão, a data da operação e o novo estado da divisão.

Ainda no Laravel, temos de editar o ficheiro .env na linha 

alterando-a para:

 

O último passo a dar para que tudo funcione direito é abrir a porta no Firewall do Windows e permitir que dispositivos externos acedam ao seu servidor Laravel, siga estes passos:

Passos para abrir a porta no Firewall do Windows:

  1. Abrir o Painel de Controlo do Firewall do Windows:

    • Clique no ícone de pesquisa ao lado do menu Iniciar (ou pressione Windows + S).
    • Pesquise por "Firewall do Windows" e selecione "Firewall do Windows com segurança avançada".
  2. Criar uma Nova Regra de Entrada:

    • No painel à esquerda, clique em "Regras de Entrada".
    • No painel à direita, clique em "Nova Regra...".
  3. Configurar a Regra para Abrir a Porta:

    • Selecione a opção "Porta" e clique em Avançar.
    • Escolha "TCP" (já que o Laravel usa o protocolo TCP para as suas conexões).
    • Em Portas locais específicas, insira a porta 8000 (ou a porta em que o seu servidor Laravel está a correr). Por exemplo, se estiver a usar a porta 8000, escreva 8000.
    • Clique em Avançar.
  4. Permitir a Conexão:

    • Escolha "Permitir a conexão".
    • Clique em Avançar.
  5. Escolher os Perfis de Rede:

    • Marque as opções "Domínio", "Privado" e "Público" para permitir conexões em qualquer tipo de rede.
    • Clique em Avançar.
  6. Nomear a Regra:

    • Dê um nome à regra, como "Permitir Porta 8000 para Laravel".
    • Clique em Concluir.

 

Agora, a porta 8000 (ou a que você escolheu) estará aberta no firewall e o seu servidor Laravel deverá ser acessível de outros dispositivos na rede.

Corra o seu servidor com o seguinte comando para que ele aceite conexões externas:

Para testar, no dispositivo externo, abra um navegador e insira o IP do seu computador servidor seguido da porta 8000, como:

http://192.168.89.124:8000

 

Espero que tudo tenha corrido conforme o esperado. Cá vos espero na próxima aula.
Até breve...

Post AnteriorPost Seguinte