Neste post vamos mostrar como realizar a comunicação entre módulos Wifi ESP8266, mais especificamente os módulos ESP01, baratos e muito fáceis de encontrar, e com eles você pode facilmente montar projetos de controle via rede sem fio (wireless), muito usados em projetos de IoT (Internet das Coisas) e automação residencial.

No nosso projeto usamos o ESP-01, mas você pode adaptar o código para outras placas e módulos da linha ESP, como o NodeMCU ESP-12.

A programação dos módulos ESP8266 será feita via IDE Arduino.

Projeto comunicação Wifi com módulos ESP8266

Para este projeto vamos usar o seguinte material:

Como material opcional, você pode usar um Adaptador Protoboard para ESP-01 para montar o seu projeto de forma semelhante ao que eu fiz na imagem de capa deste post.

Basicamente o que vamos ter é um ESP-01 funcionando como Server (servidor), que vai receber um comando de um outro ESP-01 que estará no modo Client (Client).

Ao pressionar o botão conectado ao ESP-01 Client, um comando será enviado para o Server, que por sua vez vai ligar ou desligar seu led onboard.

Como mencionamos anteriormente, você pode usar o mesmo princípio e fazer adaptações no projeto, acionando por exemplo um relé ou uma válvula solenóide.

Conexão ESP-01 modo Client

Para montar o ESP-01 que funcionará no modo cliente, use o esquema de conexão abaixo, composto pelo ESP8266 ESP-01, um push-button e o resistor de 10K:

Circuito ESP8266 ESP-01 Client comunicação módulos ESP

Um detalhe importante sobre a alimentação do circuito: use uma fonte de 3.3V que possa fornecer pelo menos 500mA de corrente. Esse foi o valor mínimo que funcionou aqui nos testes. Não recomendo usar o pino de 3.3V do Arduino pois a corrente não será suficiente para alimentar o projeto.

Para facilitar a alimentação do circuito que montamos, usamos uma fonte ajustável para protoboard. Não se esqueça de alterar os jumpers da fonte para 3.3V, ok?

O ESP-01 que vai funcionar no modo Server não exige circuito, então vamos agora direto para a parte de programação do ESP8266 usando a IDE do Arduino.

Programação do ESP8266 usando IDE Arduino

Para usar o ESP8266 ESP-01 com a IDE Arduino vamos primeiro realizar algumas configurações na IDE, começando por incluir no menu Arquivo -> Preferências -> URLs Adicionais para Gerenciadores de Placas a seguinte URL:

http://arduino.esp8266.com/stable/package_esp8266com_index.json

Em seguida, acesse o menu Ferramentas -> Placa -> Gerenciador de placas, coloque ESP8266 na caixa de busca e selecione o esp8266 by ESP8266 Community, clicando em seguida em Instalar:

Instalação placas ESP8266 IDE Arduino

Isso faz com que as placas da linha ESP8266 fiquem disponíveis no menu Ferramentas -> Placas. Agora basta você selecionar o Generic ESP8266 Module, conforme imagem abaixo:

Selecionando módulo ESP8266 na IDE Arduino

Para realizar a programação, conecte o Adaptador Programador USB para ESP8266 ESP-01 na porta USB do seu computador e envie os programas normalmente. O adaptador vai alternar sozinho entre o modo “normal” (modo de operação) e o modo de programação.

Programas Server e Client ESP8266

O primeiro módulo que vamos programar é o Server, que contém as configurações do SSID (nome da rede Wifi) na linha 9 e a porta HTTP do servidor (porta 80) na linha 15. Uma variável chamada estado_led recebe o valor 0 ou 1, acendendo ou apagando o led onboard do ESP-01.

Mensagens de controle são enviadas para o Serial Monitor, caso você precise depurar o programa. Se tudo estiver ok o ESP8266 Server envia de volta para o cliente a mensagem “Pronto!” (linha 27) para indicar o sucesso da transmissão.

//Programa: Comunicação entre dois ESP8266 ESP-01 - Modulo Server
//Autor: Arduino e Cia

#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>

//Define o SSID do ESP8266 Server
const char* ssid = "ESP01_SVR";

//Variavel para alternar o estado do led
bool estado_led = 0;

//Port de conexao TCP
ESP8266WebServer server(80);

void handleRoot()
{
  //Alterna o estado do led
  estado_led = !estado_led;

  //Aciona o led onboard de acordo com a variavel estado_led
  digitalWrite(LED_BUILTIN, estado_led);

  //Resposta da requisicao
  String s = "\r\n\r\n  <!DOCTYPE HTML>\r\n<html><h1>Comunicacao com Esp8266</h1> ";
  s += "<p>Pronto!</html>\r\n\r\n";

  //Envia resposta ao cliente
  server.send(200, "text/html", s);

  //Mostra o estado do led no Serial Monitor
  Serial.print("Botao pressionado! Estado: ");
  Serial.println(estado_led);
}

void setup()
{
  delay(200);
  Serial.begin(115200);

  //Define o estado do led onboard do server como saida
  pinMode(LED_BUILTIN, OUTPUT);

  //Inicializa o wifi no modo AP (Access Point)
  WiFi.softAP(ssid);

  //Verifica o IP atribuido ao Server (geralmente o 192.168.4.1
  IPAddress myIP = WiFi.softAPIP();

  //Mostra o endereco IP atribuido no Serial Monitor
  Serial.print("Endereco IP do Server (AP): ");
  Serial.println(myIP);

  //Verifica conexao
  server.on("/Led", handleRoot);

  //Inicializa o servidor
  server.begin();
  Serial.println("Servidor iniciado!");
}

void loop()
{
  //Verifica se o client se conectou. Na primeira conexao altera o estado do led
  server.handleClient();
}

Agora vamos programar o Client. Logo no inicio do programa (linha 8) colocamos o IP do Server, no caso 192.168.4.1.

Dentro do setup, definimos que o ESP-01 ficará em modo Station (linha 22) e fazemos a conexão com o SSID do Server na linha 25. O programa então aguarda o endereço IP fornecido pelo Server e mostra no Serial Monitor as informações da conexão.

Finalmente dentro do loop o programa verifica se o botão foi pressionado e realiza a conexão com o Web Server, enviando o comando \Led que vai alterar o estado do led no programa que está dentro do Server.

//Programa: Comunicação entre dois ESP8266 ESP-01 - Modulo Client
//Autor: Arduino e Cia

#include <ESP8266WiFi.h>
#include <WiFiClient.h>

//Coloque aqui o IP do modulo ESP-01 Server
const char* host = "192.168.4.1";

//Pino de conexao do Push Button (GPIO2)
int pino_botao = 2;

void setup()
{
  Serial.begin(115200);
  delay(10);

  //Define o pino do botao como entrada
  pinMode(pino_botao, INPUT);

  //Coloca o ESP-01 em modo Station
  WiFi.mode(WIFI_STA);

  //Conecta com o SSID do Server
  WiFi.begin("ESP01_SVR");

  //Aguarda o endereco IP fornecido pelo server
  while (WiFi.status() != WL_CONNECTED)
  {
    delay(500);
    Serial.print(".");
  }

  //Mostra as informacoes no Serial Monitor
  Serial.println("");
  Serial.println("WiFi conectado!");
  Serial.println("Endereco IP do client: ");
  Serial.println(WiFi.localIP());
}

void loop()
{
  //Verifica se o botao foi pressionado
  if (digitalRead(pino_botao) == 0) {
    Serial.print("Conectando com ");
    Serial.println(host);

    //Conexao com o server
    WiFiClient client;
    const int httpPort = 80;
    if (!client.connect("192.168.4.1", httpPort))
    {
      Serial.println("Conexao falhou!");
      return;
    }

    //Requisicao para que o server acione o led
    client.print(String("GET ") + "/Led" + " HTTP/1.1\r\n" +
                 "Host: " + host + "\r\n" +
                 "Connection: close\r\n\r\n");
    delay(10);

    //Aguarda a resposta do Server e mostra os dados no Serial Monitor
    while (client.available())
    {
      String line = client.readStringUntil('\r');
      Serial.print(line);
    }

    Serial.println();
    Serial.println("Conexao encerrada!");
  }
}

Para testar a comunicação entre os módulos ESP8266, você pode montar o ESP8266 ESP-01 Client em uma protoboard, como mostramos na imagem do início do post. O ESP que funciona como Server pode permanecer conectado no adaptador USB que você usou para programar.

Gostou? Confira outros posts usando ESP8266 aqui mesmo no Arduino e Cia!

4.8/5 - (17 votes)