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 bibliotecaEthernetconté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.202deve 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
portadefine 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:
EthernetClientcria um objeto de cliente que o Arduino usará para se conectar ao servidor.- O objeto
clientpermite 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:
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".
- Clique no ícone de pesquisa ao lado do menu Iniciar (ou pressione
Criar uma Nova Regra de Entrada:
- No painel à esquerda, clique em "Regras de Entrada".
- No painel à direita, clique em "Nova Regra...".
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, escreva8000. - Clique em Avançar.
Permitir a Conexão:
- Escolha "Permitir a conexão".
- Clique em Avançar.
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.
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...