Acionamento de LED com Web Socket

Web Socket

ÍNDICE DE CONTEÚDO

Neste tutorial será apresentado como controlar dois Leds conectados ao Arduino, via rede ethernet local, usando Web Socket.

Obs.: Este exemplo pode ser utilizado para qualquer projeto que você queira desenvolver com Arduino, e os códigos estão disponíveis para download aqui.

Requisitos

  • Uma placa Arduino (neste exemplo foi utilizado o Arduino Mega 2560);

  • Um módulo de rede ethernet ENC28J60;

  • Biblioteca UIPEthernet.h para o módulo de rede;

  • Instalar servidor XAMPP e IDE do Arduino;

  • Cabo USB;

  • Cabo Rede;

  • Infraestrutura de rede local.

Conexões

LEDS X Arduino:

LED Verde

ARDUINO

LED Vermelho

ARDUINO

GND

GND

GND

GND

VCC

Pino digital 11

VCC

Pino digital 12

 

Módulo X Arduino:

Módulo

Arduino

INT

Pino digital 2

SO

Pino digital 50

SCK

Pino digital 52

RESET

RESET

GND

GND

VCC

3.3V

CS

Pino digital 53

SI

Pino digital 51

Conexões Prontas:

Acionamento de LED com Web Socket: Conexão com Arduino
Acionamento de LED com Web Socket: Circuito completo com arduino

Procedimentos

Passo 1: Instalação do Servidor WEB

Para que os serviços web funcionem, ou seja, as requisições enviadas através da Interface web (index.html) para o socket (arduino.php) e do socket para o Arduino, será necessário instalar os servidores que fornecem esses serviços, ou seja, Apache e PHP. Para facilitar essa instalação, sugiro o XAMPP que se trata de uma ferramenta que une esses serviços em apenas uma instalação.

  • Faça o download do XAMPP aqui e instale-o;

  • Após a instalação, clique na opção Start da coluna Action na linha do serviço Apache;

  • Após inicializar o serviço Apache, o XAMPP pode ser minimizado.

Passo 2: Entendendo os Códigos

  • controleLed.ino – Esse arquivo contém o código que deverá ser gravado no Arduino, e possui comentários referentes às funções utilizadas;

  • Insira o endereço IP de acordo com a faixa utilizada em sua rede e, é claro, um endereço que esteja disponível.

Código para acionamento de LED com Web Socket
  • arduino.php – Esse arquivo contém a criação do web socket e possui comentários referentes às funções utilizadas.

arduinoPhp - Acionamento de LED com Web Socket
  • index.html – Esse arquivo contém a estrutura da interface web.

Página principal do servidor - Acionamento de LED com Web Socket

Passo 3: Enviando os códigos para o servidor web e gravando código no Arduino

Tendo os códigos criados, será necessário envia-los para o servidor, ou seja, os mesmos precisam existir no servidor para que os serviços web façam a integração entre a interface web e o Arduino.

  • Crie uma pasta e copie os arquivos index.html e arduino.php para dentro dessa pasta. Dê o nome que preferir para pasta, nesse caso, a nomeei como socket. Junto com os arquivos dos códigos para download, há uma pasta chamada js, copie-a também para dentro da pasta que você criou, pois, a mesma possui a biblioteca do CSS que estamos utilizando para alinhar os botões no arquivo index.html;

  • Copie a pasta, maximize o XAMPP e clique no botão Explore na coluna de botões localizada à direita da tela do mesmo;

  • A pasta htdocs abrirá automaticamente, com isso, cole a pasta que você criou para dentro dela;

  • Conecte o Arduino ao seu computador através do cabo USB, conecte o cabo de rede no módulo de rede e no seu modem ou roteador;

  • Abra o arquivo controleLed.ino, e execute a gravação do código para o Arduino;

  • Aguarde a gravação concluir.

Passo 4: Testando a aplicação

Se os procedimentos foram realizados e concluíram sem erros, a aplicação está pronta para ser testada.

Interface do usuário do projeto para acionamento de LED com Web Socket
Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

Receba os melhores conteúdos sobre sistemas eletrônicos embarcados, dicas, tutoriais e promoções.

Arduino, Software
Comentários:
Notificações
Notificar
guest
29 Comentários
recentes
antigos mais votados
Inline Feedbacks
View all comments
Sanson
Sanson
08/01/2020 08:15

Excelente post parabéns.

Dúvida : O servidor apache está local e o Ip de arduino ( 10.1.52.46 ), corresponde a uma faixa válida da sua rede local e do seu servidor, caso quisesse publicar esse código na web, logo esse ip não seria mais válido. Qual seria o procedimento para conseguir me comunicar com o arduino ?

Talvez um recurso de DDNS / NO-IP ?

Obrigado.

Nilton
Nilton
01/11/2019 22:44

Boa noite Ricardo,
segui todos os passos do tutorial.
Fiz o projeto com Arduino Mega ADK, Shield Eternet w5100, Módulo relé 16 canais.
Liguei quatro lâmpadas, com os pinos (7, 9, 11, 13).
Ao carregar o código Arduino, a lâmpada do pino13 dispara a piscar e depois ficam todas as quatro ligadas. Ao executar o botão de cada uma na página index.html (Não acontece nada).
Tanto o código html e o php estão abrindo sem nenhum erro.
Uso o servidor Wampserver, tudo funciona perfeitamente.
O que pode ser, não chega nenhum comando no Arduino.

Jean Delgado
31/10/2018 11:21

Os arquivos ainda estao disponiveis para download?!

Marcos André de Souza Santos
Marcos André de Souza Santos
19/10/2017 16:21

Boa tarde amigo como eu reproduziria esse exemplo em asp.net mvc?

Italo Souza
Italo Souza
21/09/2017 18:42

Amigo, quando li o anunciado do artigo imaginei que veria uma aplicação cliente / servidor, tendo o PHP como servidor e o Arduino como cliente, mantendo uma conexão sempre ativa através de websockets (ws://), mas não me parece que seja isso que está sendo feito… IMHO, há uma certa diferença entre websockets e sockets.

Ricardo Júnior Abreu da Silva
Ricardo Júnior Abreu da Silva
Reply to  Italo Souza
24/09/2017 14:11

Olá Italo!
Exato, existem diversos modos de se trabalhar com websocket, e essa aplicação é um modo, porém, nesse caso o servidor é o Apache, como citado anteriormente apenas para conectar os códigos “web”. O Arduino é apenas um terminal esperando receber os comandos da interface, e seria um servidor se o código fosse baseado em RTOS contendo um “serverStart” por exemplo. Com certeza há, e no artigo falamos sobre websocket pois os dados trafegam pela rede e não locais no mesmo projeto. Me mantenho a disposição, grande abraço!

Alex Santos
Alex Dalzoto Santos
06/07/2017 11:07

Bom dia Ricardo, tudo tranquilo? Muito bom seu código, criei um servidor apache no meu Desktop com Ubuntu e fiz algumas alterações no código para que funcionasse com o modulo W5100 (alterei para a biblioteca Ethernet.h), também alterei a pagina html para controlar 2 Arduínos que estariam em locais diferentes, basicamente dupliquei os botões em 2 diferentes e criei um segundo arquivo “arduino.php” com os dados do 2º arduino, está funcionando quase que perfeitamente, o único problema é quando eu alterno entre um Arduíno e outro da um delay de 15 segundos mais ou menos para que o comando seja… Leia mais »

Ricardo Júnior Abreu da Silva
Ricardo Júnior Abreu da Silva
Reply to  Alex Dalzoto Santos
11/07/2017 17:38

Boa tarde Alex!
Desculpe a demora para o retorno, porém, estou em um treinamento nesta semana.
Então, de primeiro momento, o que me vem em mente, é que você possa ter esquecido de inserir no fim dos códigos em php o header(“Location: index.html”);, ou então, pode ser pelo fato que estamos utilizando delay e não um código como funciona um RTOS para escalonar os eventos gerados através da interface web.
Você poderia me mandar seus códigos? Meu e-mail é [email protected]
Aguardo seu retorno, grande abraço!

Alex Santos
Alex Dalzoto Santos
Reply to  Ricardo Júnior Abreu da Silva
12/07/2017 10:20

Bom dia Ricardo, estou enviando o código já com algumas atualizações, agora estou tentando implementar a função de webclient para que o arduino envie e receba informações, mas por enquanto sem sucesso.
Abraços.

Ricardo Júnior Abreu da Silva
Ricardo Júnior Abreu da Silva
Reply to  Alex Dalzoto Santos
12/07/2017 17:57

Boa tarde Alex!
Certo amigo, vou analisar seu código e vamos tentar resolver sim, fica tranquilo.
Conta comigo!

Yan Freitas de Oliveira
Yan
Reply to  Ricardo Júnior Abreu da Silva
09/03/2018 20:11

Boa noite Ricardo. Estou com esse mesmo problema. Teve alguma solução?

Renato Augusto Silva
Renato Augusto
09/06/2017 11:47

Amigo bom dia, Consigo também fazer leituras do Arduino para o PHP? Se puder me ajudar ficaria muito feliz pois estou iniciando os testes e não achei nada realcionado. Obrigado

Ricardo Júnior Abreu da Silva
Ricardo Júnior Abreu da Silva
Reply to  Renato Augusto
11/06/2017 20:15

Boa Noite Renato! Tudo Joia?
Então, de que modo você gostaria de utilizar PHP com o Arduino? Em Socket ou gravar um código PHP no Arduino?

Renato Augusto Silva
Renato Augusto
Reply to  Ricardo Júnior Abreu da Silva
12/06/2017 19:32

Estou criando uma página web que pode ser acessada por outros dispositivos além do computador. Preciso receber valor analógicos de temperatura, vazão e nível na tela feita em php. Consigo enviar comandos para o Arduino, porém não consigo enviar os valores de temperatura, vazão nem o nível para a tela em php.

Ricardo Júnior Abreu da Silva
Ricardo Júnior Abreu da Silva
Reply to  Renato Augusto
13/06/2017 08:21

Bom dia Renato!
Perfeito, entendi, há possibilidade sim, porém, através de um socket.
Se você já está conseguindo fazer com que as informações sejam enviadas pelo Arduino, para ler com o PHP basta criar o socket, e utilizar a função socket_read para receber e armazenar as informações em variáveis.

Algo assim:

$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_connect($sock,”192.168.0.100″, 3030);
sensor = socket_read($sock);
echo $sock;
socket_close($sock);

Utilizando o link abaixo, consegui montar o exemplo desse tutorial, acredito que seja útil pra vc também:
https://secure.php.net/manual/pt_BR/book.sockets.php

Qualquer dúvida estou a disposição!

Grande abraço!!

Ricardo Júnior Abreu da Silva
Ricardo Júnior Abreu da Silva
26/07/2016 09:50

Valeu pela dica Marcelo!

Marcelo Campos
Marcelo Campos
25/07/2016 21:42

Não esquecer de habilitar o “sockets” no server Apache: cickar em “Config” e selecionar “PHP(php.ini)” procurar pela linha “;extension=php_sockets.dll” e descomentar ela retirando o ‘;’

Ricardo Júnior Abreu da Silva
Ricardo Júnior Abreu da Silva
19/05/2016 14:29

Olá Guilherme! Que bom que você gostou!
Então amigo, eu criei esse tutorial justamente porque não encontrei exemplos específicos do que gostaria de implementar… Se você deseja utilizar esse modelo de conectividade entre a web e o hardware, te recomendo focar bastante em sockets com PHP, e o resto é teste mesmo… Se precisar de ajudar faça contato, estou a disposição!

Um abraço!

Guilhermelirio
Guilherme Lirio Tomasi de Oliv
Reply to  Ricardo Júnior Abreu da Silva
13/10/2016 23:29

Eu possuo um Shield Eternet w5100. É o mesmo jeito a conexão?

Ricardo Júnior Abreu da Silva
Ricardo Júnior Abreu da Silva
Reply to  Guilherme Lirio Tomasi de Oliv
14/10/2016 07:51

Bom dia Guilherme!
Infelizmente não amigo, a conexão é diferente.
No link abaixo, há um bom exemplo e explica como conectar no MEGA e no UNO.

Guilhermelirio
Guilherme Lirio Tomasi de Oliv
Reply to  Ricardo Júnior Abreu da Silva
14/10/2016 13:05

Não achei o link! =/

Ricardo Júnior Abreu da Silva
Ricardo Júnior Abreu da Silva
Reply to  Guilherme Lirio Tomasi de Oliv
14/10/2016 13:18
Talvez você goste:

Séries

Menu

EVENTO ONLINE

Simplificando seus projetos de Internet das coisas com o iMCP HT32SX Sigfox

DATA: 18/05 às 15:00h