Controle remoto WiFi com ESP8266

Em projetos de robótica, automação ou mesmo de brinquedos, as vezes queremos controlá-los de forma remota, sem nenhum fio no caminho. Algumas alternativas envolvem radio controle, seja de frequências abaixo de 1GHz ou superiores, como no caso do WiFi.

Soluções prontas, de prateleira, costumam custar muito e são pouco customizáveis.

Neste projeto, vamos criar um controle remoto utilizando dois ESP8266, um como o cliente (controle remoto) e outro como o servidor (receptor), sem a necessidade de usar um roteador, já que a conexão ocorre diretamente entre os módulos.

O projeto vai demonstrar a criação do controle remoto, que pode ser customizado para diversas aplicações.

Diagrama

A figura abaixo ilustra o funcionamento do exemplo criado, onde um botão e um LED foram adicionados no controle. O botão controla o LED-A localmente, e simultaneamente envia um sinal via WebSocket para o servidor.

esp_remotecontrol

No servidor, temos o LED-B, que será controlado remotamente e o LED de status, que sinaliza quando o controle se conectar ao servidor.

Protocolo

Para facilitar o uso e a adaptação para outros fins, criei um simples protocolo para o envio dos comandos.

O protocolo tem um pacote de tamanho fixo, 5 bytes, e é composto pelos seguintes campos

  • byte 0: Cabeçalho fixo “0xaa”
  • byte 1: GPIO a ser controlada
  • byte 2: Modo de operação
  • byte 3: Valor a ser enviado
  • byte 4: Rodapé fixo “0x55”

Exemplo:

No código de exemplo, controlamos a GPIO5, utilizando o protocolo da seguinte forma:

  • byte 0: “0xaa”
  • byte 1: “0x05”
  • byte 2: “0x00”
  • byte 3: “0x01”
  • byte 4: “0x55”

O byte 1 corresponde ao GPIO5, o byte 2 corresponde a0 GPIO modo OUTPUT e o byte 3 é o valor HIGH para a GPIO.

Vale lembrar que para funcionar corretamente o protocolo, as GPIOs precisam ser configuradas no setup() antes.

Código

Abaixo seguem os códigos de exemplo do cliente e do servidor, desenvolvidos com o PlatformIO:

Servidor

Remoto

Projeto completo: Github – esp8266-remote-control

Configuração e Ambiente

O projeto foi feito utilizando o platformIO, que pode ser conferido pelo seguinte link.

Para o projeto funcionar corretamente na compilação, faz-se necessária a instalação de duas bibliotecas pelo platformIO, sendo elas:

WifiManager e WebSockets

Para instalar por linha de comando (CLI), entre com os seguintes comandos:

platformio lib install 567
platformio lib install 549

Demonstração

O projeto usa a biblioteca WiFiManager, que transforma o controle remoto em um AP para a configuração do servidor (receptor). Isso ajuda muito quando um único controle remoto pode ser utilizado em outros projetos.

Abaixo segue um vídeo para demonstrar o funcionamento.

 

Conclusão

Com o uso deste exemplo, fica possível criar projetos controlados remotamente (não pela Internet) com um baixo custo de investimento e com uma flexibilidade infinita.

O alcance do controle remoto pode ultrapassar facilmente os 100 metros em campo aberto, como demonstra esse video.

 

Happy Hacking!