Chegamos ao ponto de acionar LEDs (ou qualquer coisa) remotamente via WiFi. Para quem entrou direto nesse tutorial, vale a pena dar uma sapeada em meus 2 posts anteriores:

  1. Link para o post do Blog: ESP8266 Set-up e Test
  2. Tutorial; ESP8266 como WebServer

A diferença básica aqui, é que ao invés do Arduino criar uma pagina web para enviar as informações capturadas, agora será uma página criada anteriormente em HTML e hospedada em algum sitio web (no nosso caso aqui estará em emu desktop) que enviará os dados. Esta pagina estará recebendo comandos de um usuário enviando-os via WiFi ao Arduino.

O Circuito:

O circuito é bem simples. As conexões do ESP8266 com o UNO são as mesmas dos posts anteriores, apenas acrescentamos os 3 LEDs a 3 GPIOs do UNO:

GPIO 11: LED azul
GPIO 12: LED vermelho
GPIO 11: LED verde

O código HTML:

A Página deve ser gerada em HTML em um editor qualquer e salva no desktop.

A parte principal do codigo HTML abaixo, é a geração dos "botões", no caso "ON" e "OFF". Observe que para cada botão (são 6 no total, 2 para cada GPIO), é gerado um "id" específico. Por exemplo, se o botão "ON" para o GPIO 11 for pressionado, o id será "111", ou seja os dois primeiros dígitos para a identificação do GPIO (no caso "11") e o 3o. dígito para o estado, no caso "1" ou "ON". Se fosse "OFF", o Id sería 110. No caso, na saída digital do pino 11, está o LED azul.

Uma vez gerado o "id" uma função na página se encarrega de enviar-la para para o IP address do ESP8266. Observe que o endereço que aparece no set-up do ESP 8266 tem que ser incluído na linha

==> $.get("http://10.0.1.14:80/", {pin:p});

No monitor serial se pode observar o valor do pin que é gerado pela página. 

As primeiras vezes que testei o programa, tive vários problemas e o mais importante foi que observei que só era possível enviar 5 comandos aos LEDs. Isso porque  a cada envío de informação o ESP8255 considerava uma conexão aberta (CONNECT 0, 1, 2, 3, 4) e o limite é 5.

Observei também que quando fazia um "refresh" na página, o connect, voltava a zero. A solução foi incluir um novo codigo HTML, que forçava o refresh automático da página (código tipo "META"). No caso optei por fazer um refresh a cada 15s para não ficar muito ruim para o usuário. Funcionou sem problemas:

<META HTTP-EQUIV="refresh" CONTENT="15">

 

O código do Arduino:

O código é muito parecido com o do post anterior:

Inicializa, faz o setup das portas, "reseta" e inicializa o ESP8266, etc., usando as mesmas funções definidas no anteriormente. 

A diferença básica está na porção em verde do código contido  no "Loop":

void loop()
{
if(esp8266.available())
{
if(esp8266.find("+IPD,"))
{
delay(1000);

int connectionId = esp8266.read()-48;

esp8266.find("pin=");
int pinNumber = (esp8266.read()-48)*10;
pinNumber += (esp8266.read()-48);
int statusLed =(esp8266.read()-48);
digitalWrite(pinNumber, statusLed)

String closeCommand = "AT+CIPCLOSE=";

closeCommand+=connectionId;
closeCommand+="\r\n";
sendData(closeCommand,1000,DEBUG);
}
}
}

Ao ler o "id", por exemplo "111", o código separa os primeiros dois dígitos e constrói a variável "pinNumber". Com o 3o. dígito, se obtém o "statusLed". A função digitalWrite enviará o status do LED, no caso do exemplo "1" para o GPIO correspondente (ou "pinNumber"), no exemplo 11. 

No vídeo abaixo, pode-se ver um exemplo do acionamento remoto dos LEDs:

Link para o vídeo do acionamento remoto de GPIOs via ESP8266

Para finalizar, no link abaixo deixo o codigo completo para o Arduino e para a pagina em codigo HTML. 

Link para os codigos fonte

É isso aí. Abraço a todos e espero que possa ter ajudado!

Abaixo o link de meu Blog (vale deixar uns "like" por lá ;-)

MJRoBot "Um andarilho no mundo da eletrônica"

Exibições: 2875

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço