FVM Learning

Nosso maior compromisso é compartilhar conhecimentos, somos simples, mas não simplórios, astuto, mas não pacóvio, nos posicionamos empenhados em mostrar o caminho para desmistificação do opróbrio em legítima defesa do conhecimento compartilhado. Eng. Jemerson Marques!

terça-feira, 18 de dezembro de 2018

Rede Mesh com ESP8266: Comunicação Direta entre 4 Dispositivos IoT sem Roteador | Tutorial Completo

Comunicação entre 4 ESPs com central ESP sem Roteador - fvml
Comunicação entre 4 ESPs com central ESP sem Roteador

Aprenda a configurar uma rede Mesh com múltiplos ESP8266 sem necessidade de roteador. Tutorial passo a passo com código fonte e dicas práticas

Você já imaginou criar uma rede de dispositivos IoT que se comunicam entre si sem depender de um roteador central? Neste guia completo, vou mostrar como implementar uma rede Mesh utilizando quatro módulos ESP8266, permitindo uma comunicação descentralizada e robusta entre os dispositivos.

Ideal para automação residencial, sistemas de segurança ou protótipos de IoT, este projeto combina simplicidade e eficiência.

Por que usar uma Rede Mesh?

  • Baixo custo: Sem infraestrutura adicional.
  • Escalável: Adicione mais dispositivos conforme necessário.
  • Prático: Controle centralizado via servidor ESP8266.
  • Maior alcance: Ideal para projetos IoT em áreas remotas.
  • Redundância e confiabilidade: Independência de infraestrutura externa.

Material Necessário

  • 4x módulos ESP8266 (NodeMCU recomendado)
  • 1x cabos USB para programação
  • 4x Micro switches
  • 4x LEDs 
  • 4x Resistores: 220Ω (LEDs) e 10kΩ (pull-down para chaves) [[Nota Técnica]]
  • Fonte 5V (recomendado: carregador USB estável), Pode ser alimentado pelo USB do Computador
  • Protoboards e jumpers
  • Computador com Arduino IDE instalado

Preparação do Ambiente

Configuração da Arduino IDE

  • Instale a Arduino IDE mais recente: 
  • Adicione o suporte ao ESP8266:

    • Configure a porta serial correta na IDE Arduino:
    Clique no menu "Ferramentas | Tools" logo abaixo, vá até o menu "Porta | Port", e escolha a porta em que está o seu ESP8266.

    🔌Passo a Passo para a Montagem dos Hardwares na Protoboard

    ⚙️ Montagem dos ESPs na Protoboard!

    Caso você tenha apenas uma única protoboard, montar os módulos pode ser um desafio. O motivo é simples: o NodeMCU não foi projetado para encaixar facilmente em uma protoboard tradicional, o que dificulta o acesso aos pinos.

    ✅ Nossa Dica Prática: Você pode conectar três protoboards em série, conforme ilustrado na Figura 2 abaixo. Isso facilita a montagem dos quatro ESPs e garante espaço suficiente para todos os componentes.
    Rede Mesh com ESP8266: Montando ESP8266 na Protoboard - fvml
    Fig. 2 - Rede Mesh com ESP8266: Montando ESP8266 na Protoboard

    Importante: Se você não possui três protoboards, não se preocupe! O número de pinos utilizados é baixo, então é possível adaptar a montagem com apenas uma ou duas.

    🔧 Montagem dos Módulos Clientes na Protoboard

    A montagem do módulo "Cliente" é bastante simples. O ESP cliente tem 1 LED e uma microchave tátil, tipo botão, ou Micro Switch:

    • LED 1 → Conectado à porta D2 (GPIO 4)

    • Micro Switch → Conectado à porta D5 (GPIO 14)

    Acompanhe o esquema de montagem na Figura 3 abaixo, para entender como cada conexão deve ser feita e evitar erros.

    Rede Mesh com ESP8266 | Montagem do Módulo "Cliente" - fvml
    Fig. 3 - Rede Mesh com ESP8266 | Montagem do Módulo "Cliente" 

    🔧 Montagem do Módulo Central na Protoboard

    A montagem da "Central" é simples. O ESP central tem 3 LEDs:

    • LED 1 → Conectado à porta D2 (GPIO 4)
    • LED 2 → Conectado à porta D3 (GPIO 0)
    • LED 3 → Conectado à porta D5 (GPIO 14)

    Acompanhe o esquema de montagem na Figura 4 abaixo, para entender como cada conexão deve ser feita e evitar erros.

    Rede Mesh com ESP8266 | Montagem do módulo "Central" - fvml
    Fig. 4 - Rede Mesh com ESP8266 | Montagem do Módulo "Central"

    ⚠️Atenção com a Polaridade dos LEDs⚠️

    A polaridade invertida é um erro comum e impedirá que o LED funcione corretamente.

    • O terminal positivo (ânodo) do LED deve estar conectado ao pino GPIO especificado.
    • O terminal negativo (cátodo) deve estar conectado ao GND (terra) do ESP ou da protoboard.

    ✨ Resistores? Nem sempre são necessários!

    Se você já tem experiência com o ESP8266, deve ter notado que não estamos usando resistores externos. Isso acontece por dois motivos:
    • Para os botões (Micro Switch): Usamos o recurso de Pull-Up interno do ESP, que setamos na função Void setup(): pinMode(BUTTON, INPUT_PULLUP);
    • Para os LEDs: As portas GPIO operam com 3,3V, o que é compatível com a maioria dos LEDs comuns de 5mm, que funcionam entre 2,8V a 3,8V, dependendo da cor.

    Dica: Se for utilizar em projetos prontos, que os LEDs serão utilizados por longo período de tempo, não para testes, como o nosso, sempre utilize resistores adequado para isso.! Alguns LEDs podem exigir resistores dependendo do modelo. Você pode está escolhendo o LED ideal, e calculando seguindo nosso artigo completo: 

    ✅ Checklist Final Antes do Upload

    Antes de carregar o código nos seus ESPs, verifique:

    • Conexões dos pinos (GPIO) com os LEDs e botões.
    • Polarização correta dos LEDs.
    • Se a chave está conectada à porta D5 (GPIO 14)

    • Esquema de ligação igual ao código-fonte.

    📥 Download dos Códigos

    Baixe os códigos prontos pelos links diretos abaixo:

    • Opção 1 – Mega

    (Código por: FVMLearning)

    🧠 Atenção: Depois de baixado os códigos, lembre-se, cada ESP cliente deve ter um identificador único, altere no seu código do Cliente essa parte:

    • ESP 01: Const String  ClientType  = "Cliente 01";
    • ESP 02: Const String  ClientType = "Cliente 02";

    • E assim por diante...

    Altere o número no código para refletir corretamente o cliente correspondente.

    💻 Realizando o Upload

    Faça o upload do código em cada ESP individualmente, incluindo o da Central (servidor). Aguarde o carregamento completo antes de prosseguir para o próximo ESP, como exemplificado na Figura 5 abaixo.

    Rede Mesh com ESP8266 | Fazendo Upload dos Clients and Server - fvml
    Fig. 5 - Rede Mesh com ESP8266 | Fazendo Upload dos Clients and Server

    🔍 Testes com o Serial Monitor

    Após o upload:

    1. Abra o Serial Monitor para acompanhar o funcionamento.
    2. Pressione o botão do ESP01 → O LED do ESP01 e o da Central devem acender.
    3. Repita o teste com os demais clientes.

    Você verá no monitor serial da IDE Arduino as mensagens com o estado:

    • 0 = Desligado
    • 1 = Ligado

    Rede Mesh com ESP8266 | Teste de funcionamento no Monitor Serial - fvml
    Fig. 6 - Rede Mesh com ESP8266 | Teste de funcionamento no Monitor Serial

    Você pode personalizar esses nomes no código, desde que altere em ambas as partes: cliente e servidor.

    🚀 Finalizando

    • Energize todos os ESPs com suas fontes 5V.
    • Conecte-os um a um.
    • Faça os testes dos botões.
    • Monitore os estados via Serial Monitor.

    Se tudo estiver funcionando corretamente, você terá a imagem parecida com a da Figura 7 abaixo. Parabéns, o seu sistema está funcionando e pronto para uso em seus projetos!

    Rede Mesh com ESP8266 | Teste de funcionamento Final - fvml
    Fig. 7 - Rede Mesh com ESP8266 | Teste de funcionamento Final

    🎥 Acompanhe o Tutorial em Vídeo

    Se preferir acompanhar esse passo a passo com mais detalhes, assista ao vídeo no nosso canal do YouTube.

    👉 Acesse o Canal FVMLearning

    E por hoje é só, espero que tenhamos alcançado suas expectativas!

    Agradecemos por visitar o nosso blog e esperamos tê-lo(a) novamente por aqui em breve. Não deixe de conferir nossos outros conteúdos sobre tecnologia e assuntos variados.

    Se inscreva no nosso Blog! Clique Aqui — FVM Learning!

    Nos ajude a divulgar nosso trabalho, compartilha nas redes sociais, Facebook, Instagram, nos grupos de WhatsAppuma simples atitude sua, faz com que cresçamos juntos e melhoremos o nosso trabalho!

    Forte abraço!
    Deus vos Abençoe!
    Shalom.

    39 comentários:

    1. Boa tarde!
      Tem como fazer esse mesmo projeto com o modem, seguindo esse mesmo conceito?
      Quero ligar do mesmo jeito, só que com o modem, porque preciso colocar mais de 10 clientes.
      Vou ficar aguardando.
      Obrigado, e parabéns pelo Post, está ótimo.

      ResponderExcluir
    2. Olá!

      Tem sim, e já estamos preparando o nosso tutorial sobre esse tipo de topologia com a comunicação entre ESPs com Modem Roteador.
      Fica ligado, no nosso Blog e também no nosso canal no YouTube.
      Abraços.

      ResponderExcluir
    3. Respostas
      1. Olá
        Estamos finalizando o vídeo da comunicação entre ESPs com Roteador.
        Fica ligado, em nossos canais.
        Forte abraço.

        Excluir
    4. Ola nao consigo baixar os codigos me redireciona pra outros sites

      ResponderExcluir
      Respostas
      1. Olá JUSSARA
        Os sites são patrocínios, você entra neles e aguarda os 5 segundos que eles requerem depois click em SKIP e será redirecionado para o site para baixar, se tiver dúvidas veja essa rápido tutorial.
        https://www.fvml.com.br/2019/04/como-baixar-arquivos-adfly-encurtanet.html
        Forte abraço.

        Excluir
    5. Não consigo fazer download dos códigos poderia enviar por email?

      ResponderExcluir
      Respostas
      1. Olá!!!
        Os links estão funcionando perfeitamente.
        Você precisa aguardar o tempo de 5 segundos do comercial do site, depois click em SKIP na parte superior direito e será redirecionado para baixar os arquivos. Qualquer dúvida, veja essa rápido tutorial.
        https://www.fvml.com.br/2019/04/como-baixar-arquivos-adfly-encurtanet.html
        Forte abraço.

        Excluir
    6. Olá, já tem o código com 10 clientes com roteador ?

      ResponderExcluir
    7. Olá!!!

      Estamos finalizando o nosso material de, comunicação entre ESPs com Roteador.
      E nele você pode colocar quantos clientes quiser.
      Se inscreve em nossos canais, e não perca quando postarmos.
      Forte abraço.

      ResponderExcluir
    8. o link disponível direciona para um dropbox não acessível.

      ResponderExcluir
      Respostas
      1. Olá!!!
        Acabamos de testar o Link, e está funcionando perfeitamente.
        Mas, mesmo assim colocamos outra opção de link para baixar.
        Abraços.
        Boa sorte.

        Excluir
    9. Olá boa tarde, gostaria de usar um sensor ultra-sônico para ligar e desligar ao invés de um botão, poderia me ajudar ?

      ResponderExcluir
      Respostas
      1. Olá Ϟ PATRIK

        Tecnicamente, não tem muito mistério.

        //Primeiro você carrega a biblioteca do sensor ultra-sônico

        #include

        //Depois você define os pinos para o trigger e echo, escolha uma porta vazia que tenha no //seu ESP

        #define Trigger D5
        #define Echo D6

        //Depois você inicializa o sensor nos pinos que já foram definidos
        Ultrasonic ultrasonic(Trigger, Echo);

        void setup()
        {
        Serial.begin(9600);
        }

        void loop()
        {

        float MicroCent; //Aqui criamos ums float para pegar os dados do sensor, que será convertido para centímetro
        long microsec = ultrasonic.timing(); // Recebe os dados do sensor

        MicroCent = ultrasonic.convert(microsec, Ultrasonic::CM); // converte para centímetro


        E depois de tudo convertido, você pode usar o parâmetro de distância para poder acionar a carga com um if, por exemplo:
        if (MicroCent < 20){
        "Coloque o acionamento aqui"
        }
        }

        É isso!!!
        Espero ter ajudado, forte abraço, e boa sorte.

        Se inscreva em nosso site:
        https://draft.blogger.com/follow.g?view=FOLLOW&blogID=5745325357530072225

        Abraços.

        Excluir
    10. AMIGO QUERO COLOCAR DOIS ESP01 PARA RECEBER COMANDO UM DO OUTRO E ACIONAREM OS RELES. ME AJUDA NESSE PROJETO ???

      ResponderExcluir
      Respostas
      1. Olá!!!
        Temos esse projeto já feito, veja nesse endereço do nosso canal no youtube.
        https://www.youtube.com/watch?v=9oHvm6WGhjY
        Aproveita e se inscreve lá também.
        Forte abraço.

        Excluir
    11. Boa noite!
      Esse código funciona com o ESP32?

      ResponderExcluir
      Respostas
      1. Olá @EDMILSON
        Acredito que sim, não testei, pois não disponho de um em nossa bancada, mas o princípio é válido para os dois, o que pode diferenciar, seria a biblioteca, mas o demais são iguais.

        Se possível nos dê o feedback, para que outros possam também tirar suas dúvidas.
        Forte abraço.

        Excluir
    12. Olá, boa noite, sem roteador ficamos presos com apenas 4 ESP ? ou podemos adiconar mais ? Quero trabalhar com 8 ESP.

      ResponderExcluir
      Respostas
      1. Olá @Ϟ PATRIK

        Dê um alhada no nosso outro Post que trata da mesma comunicação, só que com o roteador, ficando assim com bastante ESP para se conectar.
        https://www.fvml.com.br/2019/08/comunicacao-entre-4-esp8266-com-central.html

        Aproveita e se inscreve em nosso Blog.
        Abraços

        Excluir
      2. Olá, boa tarde.
        Eu olhei sim mas não consegui usar o mesmo.
        Como faço para alterar o nome da rede neste sem roteador, pois não estou conseguindo alterar, quando altero o mesmo apresenta erro, pode me ajudar alterar o programa abaixo?
        Nome da rede para SAIVW
        e senha pode ser a mesma.
        char* ESPssid; // NOME DA REDE WIFI
        char* ESPpassword; // SENHA DA REDE WIFI
        String Message; // MENSAGEM A RECEBER DOS CLIENTES "VAGAS"
        #define MAXSC 15 // NÚMERO MÁXIMO DE CLIENTES "VAGAS"
        WiFiServer ESPServer(9001); // SERVIDOR E O NÚMERO DO PORTA
        WiFiClient ESPClient[MAXSC]; // OS CLIENTES "VAGAS" E SERVIDOR


        //------------------------------------------------------------------------------------
        // DEFINIÇÃO DOS PINOS DO ESP8266 NODE MCU

        void setup(){
        lcd.begin (20,4); // CONFIGURAÇÃO DO DISPLAY
        pinMode(CHAVE, INPUT);
        pinMode(LED0, OUTPUT); // WIFI - LUZ DO LED DA PLACA


        //------------------------------------------------------------------------------------
        // HABILITANDO MONITOR SERIAL

        Serial.begin(115200); // CCOMUNICAÇÃO COM COMPUTADOR


        //------------------------------------------------------------------------------------
        // HABILITANDO ACESSO WIFI

        SetWifi("FVMLearning", ""); // CONFIGURA O PONTO DE ACESSO WIFI / WIFI HABILITADO
        }


        //------------------------------------------------------------------------------------
        // ÍNICIO CICLO LOOP SERVIDOR

        void loop()
        {
        AtualizaLCD(); // ATUALIZA INFORMAÇÕES DO LCD
        AvailableClients(); // VERIFICA CLIENTES "VAGAS" DISPONÍVEIS
        AvailableMessage(); // VERIFICA MENSAGENS DOS CLIENTES "VAGAS" DISPONÍVEIS
        }


        //------------------------------------------------------------------------------------
        // CONFIGURANDO ACESSO WIFI

        void SetWifi(char* Name, char* Password)
        {
        WiFi.disconnect(); // PARA QUALQUER WIFI CONFIGURADO ANTERIORMENTE

        WiFi.mode(WIFI_AP_STA); // CONFIGURA MODO WIFI


        //------------------------------------------------------------------------------------
        // DEFININDO O NOME E SENHA DO PONTO DE ACESSO

        ESPssid = Name;
        ESPpassword = Password;

        //------------------------------------------------------------------------------------
        // INICIANDO PONTO DE ACESSO

        WiFi.softAP(ESPssid, ESPpassword);
        delay(500); // AGUARDA 0,5 SEGUNDOS
        IPAddress IP = WiFi.softAPIP(); // OBTENDO O IP DO SERVIDOR


        //------------------------------------------------------------------------------------
        // INICIANDO SERVIDOR

        ESPServer.begin();
        ESPServer.setNoDelay(true);
        }

        Excluir
    13. Respostas
      1. Olá
        Não entendo o que se passa, testei os links novamente "nesse momento" e estão funcionando, um é do Dropbox e o outro é do MEGA, são links diretos.
        Veja eles aqui:
        Dropbox: https://www.dropbox.com/home/FVM's%20Channel/Comunica%C3%A7%C3%A3o%20entre%204%20ESPs8266%20sem%20roteador

        Mega:
        https://mega.nz/#F!n6ZmHCZQ!Xa-IJpHJWA97CYu_i2ylwA

        Veja se seu firewall não está bloqueando, se for a internet de empresa, geralmente você tem que pedir acesso a gerenciador da rede.
        Abraços e boa sorte.

        Excluir
    14. HOW To programming the server for coummunication two clients ضt the same time, each client does a different job.

      ResponderExcluir
      Respostas
      1. Hi @EE
        For this application, you will have to use another type of topology, such as using ESP-NOW communication, will be a good application option for your project.
        We are preparing an ESP-NOW article, and this can be very helpful to you, so subscribe to our site and our youtube channel, as we will post on one of the first two.
        See you later.

        Excluir
    15. We hope that this article"ESP-NOW" is simplified and comprehensive and be at least examples between 3 ESPs .
      I suggest you use some sensors.
      all the best.
      I subscribed to the youtube channel

      ResponderExcluir
      Respostas
      1. Hi @KEE
        Certainly we will bring a simplified form, because our intention is to direct hobbyists, to make their own projects, we give a direction to all of you, and you change to your own projects.
        My best regards

        Excluir
    16. Olá tudo bem?

      A respeito desse projeto, há a possibilidade de repassar as informações desse servidor/AP (liga e desliga de sua respectiva rede de ESPs) para outro ESP isolado? Se sim voce poderia me ajudar no como fazer essa transmissão "ESP central >> ESP separado"?

      ResponderExcluir
      Respostas
      1. Olá
        Certamente pode sim, porém é necessário direcionar porta, ou fazer através de servidor externo, estamos trabalhando, para montar outro projeto com uma central ESP recebendo comandando de ESPs outros ESPs externamente.
        Se inscreve no nosso blog e no nosso canal do youtube, pois estaremos postando "não agora" brevemente esse tipo de comunicação.
        Forte abraço.

        Excluir
      2. certo, obrigado!

        E quanto a deixar o ip fixo tanto para o servidor/AP como os clients/STA, é só fazer um Wifi.config(ip,gateway,subnet) em todos os codigos? a parte de Wifi.softAP não seria um problema, certo?

        Excluir
      3. Olá @RODRIGO1120
        Certamente sim, se colocado devidamente.
        Mas... o IP do server é fixo, 192,168,4,1, é o IP Padrão do ESP, por isso não precisamos utilizar o argumento wifi.config(ip,gatway,subnet),
        A função: IPAddress IP = WiFi.softAPIP(); captura/habilita o ip do server com o ip padrão e fixo.
        Todos os clients utilizam comunicação direta; IPAddress ESPServer(192,168,4,1); para se conectar com o servidor.

        Obrigado por estar conosco.
        Aproveita e se inscreve também em nosso canal do Youtube.
        Forte abraço.

        Excluir
      4. Bom dia @FVML tudo bem?
        Certo, eu nao irei mexer no ip/gateway/subnet da AP. No caso dos clients, eles estao conectando por DHCP, certo? é isso a comunicação direta?

        Me inscrevi no canal do YouTube, obrigado!!

        Excluir
      5. Olá @RODRIGO1120
        O DHCP é um protocolo de comunicação do Host dinâmico, ele só escolhe um IP baseado no IP do AP mudando o 4° octeto, para adequação das conexões, ele continua sendo uma comunicação direta, agora se você está querendo uma comunicação direta sem o ROTEADOR, nós temos aqui no nosso blog, comunicação entre ESPs sem roteador, aí ele vai utilzar o IP/gatway/subnet do AP.
        Qualquer dúvida, que estiver em nossa competência, nós responderemos.
        Forte abraço.

        Excluir
    17. Meu nobre, parabéns. Já me inscrevi lá no seu canal. Muito legal. Meu amigo, eu consigo enviar comandos pela serial de um NODE MCU ESP 8266 para outro NODE MCU ESP 8266? A idéia é ligar uma carga à distância, porém por comando serial. Tem como fazer? Grande abraço meu amigo.

      ResponderExcluir
      Respostas
      1. Olá Amigo
        Não deu para entender exatamente o que você quer, mas vamos fazer um exemplo:
        Se você tem um ESP com o PC e o Serial Monitor aberto e quer enviar uma String com ex. Ligar Motor
        Você pode utilizar esse exemplo para ler a serial monitor

        String DataInput;
        char Characters;

        void setup() {
        Serial.begin(115200);
        }
        void loop() {
        if (Serial.avaliable()) {

        Characters = Serial.read();
        if (Characters == '*') {
        Serial.println(DataInput);
        DataInput = "";
        }
        else DataInput.concat(Characters);
        }
        }
        E node é o acionamento da chave, você pode colocar e fazer um "if" colocando o "char Characters" em comparação se a palavra é "Ligar Motor", Lembrando que para finalizar a frase você deve colocar o " *".
        É bem simples, não estou com tempo hábil para te fazer o código completo, mas... creio que com essa explicação da para realizar.
        Qualquer outra dúvida, se você não consegui, no final de semana tentarei fazer um para você.
        Forte abraço.

        Excluir
    18. Boa noite, cara tem com dar umas dicas, tipo estou fazendo um projeto para a faculdade só que no local onde vai ficar o projeto não tem acesso a internet, então vou deixar um esp8266 em uma estufa fazendo todas as leituras necessárias e guardando as informações em um SD (esse sempre fica ligado e imovel na estufa), tenho outro esp8266 que é conectado ao meu computador pela usb e fiz um software de controle em C#, em resumo... coloco as parametros no computador ele envia via usb para o esp(host) conectado ao meu computador, depois o esp envia os parametros via wifi para o esp da estufa (server), até aqui ta tudo certo, funcionando perfeitamente, o meu problema é a volta, se eu mandar um comando para estufa que peça os dados do cartão SD, queria que esses dados sejam mandados de volta ate que cheguem a tela do computador.
      -----> Meu problema é apenas um como eu posso enviar uma sequencia de string do esp (servidor) para o esp(host) <------- se ficar dificil de entender o que pedi, me avisa que explico de outro jeito, ou caso queria ver os arquivos que estão nos esp para ter uma ideia de como fazer para retornar, posso lhe mandar por e-mail Obrigado pela atenção

      ResponderExcluir
    19. Boa noite, alguém conseguiu fazer esse projeto com o Esp32? To tendo alguns problemas, o servidor inicializa, mas os clientes não conectam.

      ResponderExcluir
    20. Bom dia Jemerson, tudo bem? Acompanho seus videos e tem me ajudado muito nos projetos. Gostaria de sugerir um projeto em que tenho dúvida e que acho que outra pessoas também. Queria usar um ESP32 como server para acionar 16 reles sem uso de roteador... e diversos ESP8266 como client ... Cada ESP8266 teriam 3 ou mais interruptores (NAO push button). Cada interruptor acionaria um relé e cada esp8266 poderia ser configurado como clone do outro também. Assim poderiam ter vários interruptores que acionam o mesmo rele. Grande abraço e parabéns pelo canal!

      ResponderExcluir
    21. ola eu tou com esp01 não tou conseguindo roda o programa no esp dar erro no D1 ou D0 algo assim se poder ajudar ficarei grato.

      ResponderExcluir