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:
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:
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):
192.168.89.124
.Definimos a porta de comunicação para o servidor, neste caso e como estamos a trabalhar com o Laravel será a 8000:
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.E, por fim, definimos o cliente Ethernet:
EthernetClient
cria um objeto de cliente que o Arduino usará para se conectar ao servidor.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.
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:
Abrir o Painel de Controlo do Firewall do Windows:
Windows + S
).Criar uma Nova Regra de Entrada:
Configurar a Regra para Abrir a Porta:
8000
, escreva 8000
.Permitir a Conexão:
Escolher os Perfis de Rede:
Nomear a Regra:
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...