Como programar o módulo ESP8266 NodeMCU 70

O módulo Wifi ESP8266 NodeMCU ESP-12E  é uma das placas mais interessantes da família ESP8266, já que pode ser facilmente ligada à um computador e programada com a linguagem Lua e também utilizando a IDE do Arduino. Neste post vamos mostrar como utilizar Lua para programar o módulo.

Módulo wifi ESP8266 NodeMCU

Essa placa possui 10 pinos GPIO (entrada/saída), suportando funções como PWM, I2C e 1-wire. Tem antena embutida, conversor USB-TLL integrado e o seu formato é ideal para ambientes de prototipação, encaixando facilmente em uma protoboard.

Hardware Módulo Wifi ESP8266 NodeMCU 

O módulo Wifi ESP8266 NodeMCU tem dois botões, conforme mostrado na imagem abaixo: Flash (utilizado na gravação do firmware) e RST (Reset).  No mesmo lado temos o conector micro usb para alimentação e conexão com o computador.

Pinagem ESP8266 NodeMCU

No lado oposto, temos o ESP-12E e sua antena embutida, já soldado na placa. Nas laterais temos os pinos de GPIO, alimentação externa, comunicação, etc.

No Windows 7, a instalação e download de drivers foi feita de forma automática, e um dispositivo USB-TTL CH340 foi adicionado ao gerenciador de dispositivos. No nosso caso, foi atribuida a porta COM29:

Gerenciador de dispositivos

Vamos programar o módulo utilizando o Lua, e isso pode ser feito, à princípio, de duas maneiras.

Programando o ESP8266 NodeMCU pela serial

Nesse método, vc pode utilizar um programa de terminal, como o Termite (download), para enviar os comandos diretamente para o módulo. Vamos montar primeiro um pequeno circuito para teste, que servirá para todos os exemplos deste post:

Circuito Arduino Nodemcu

Conecte o módulo ao computador utilizando o cabo USB e entre no Termite (ou outro programa à sua escolha), selecionando a velocidade de 9600. Pressione o botão de reset no módulo e aguarde a exibição das informações sobre o firmware da placa:

Comunicação NodeMCU - Termite

Em seguida, digite no terminal o seguinte comando, que vai definir a porta 5 como saída. Pressione ENTER após cada comando para que ele seja enviado ao NodeMCU:

gpio.mode(1, gpio.OUTPUT)

Para acender o led, envie o comando

gpio.write(1, gpio.HIGH)

Para piscar o led, crie um pequeno loop com essa série de comandos:

while 1 do
gpio.write(1, gpio.HIGH)
tmr.delay(1000000)
gpio.write(1, gpio.LOW)
tmr.delay(1000000)
end

Essa rotina vai fazer com que o led pisque a cada 1 segundo. Você logo vai notar que não é possível parar o programa por meio de comandos, e essa rotina vai rodar continuamente. Para parar o loop e reiniciar o módulo, pressione o botão RST.

Programando o Nodemcu utilizando ESPlorer

Programar o módulo pela serial pode ser interessante, mas podemos melhorar esse processo utilizando um programa como o ESPlorer (download).

Com o ESPlorer você pode abrir diversas abas e programas ao mesmo tempo, salvar os programas em disco, formatar (zerar) o módulo, e muitas outras funções.

Ao abrir o ESPlorer, temos no lado esquerdo uma área onde vamos escrever o(s) programa(s), e na direita o/a console, onde podemos acompanhar em tempo real a comunicação com o NodeMCU:

ESPlorer Tela Principal

Utilizando o exemplo do loop feito anteriormente, copie os comandos para a janela do lado esquerdo da tela, e em seguida clique no botão Send to ESP para enviar a programação para o NodeMCU:

ESPlorer-blink

Agora além de controlar o módulo, você tem a opção de salvar o programa para uso posterior.

Conectando o NodeMCU na rede wireless

Até agora só vimos como acionar as portas do NodeMCU por meio de programas, e já que temos um chip wireless ESP8266 no módulo, nada melhor do que acionar as portas do Nodemcu utilizando a rede sem fio. Para isso, carregue o programa abaixo no ESPlorer, colocando o nome da sua rede wifi e a senha nos campos NOME_DA_REDE e SENHA_DA_REDE, respectivamente:

O programa configura o módulo para o modo station (estação) na linha 5, depois configura a GPIO como saída utilizando o comando gpio.mode. Para acessar a página web, você vai precisar do endereço IP atribuído ao módulo. No nosso caso o IP foi o 192.168.0.25.

Para descobrir o endereço IP, acesse o ESPplorer , selecione a opção =wifi.sta.getip() conforme a imagem abaixo e clique em SEND para que o endereço IP do módulo seja mostrado na console.

 Endereço IP

Acesse então o browser, digite o endereço IP e a página web do ESP8266 será exibida:

NodeMCU - Browser

Gostou ? Ajude-nos a melhorar o blog atribuindo uma nota a este tutorial (estrelas no final do artigo), comente e visite nossa loja FILIPEFLOP!

Posts Relacionados

70 Comentários

  1. Parabens, excelente matéria.

    1. Valeu Claudio, abraço!

      Adilson – Equipe FILIPEFLOP

  2. Este programa ESPlorer é instalado na máquina ou é só executável? É necessário instalar o java antes de instalar o ESPlorer?

    1. Boa tarde Rafael,

      Não é instalado, é só executar o arquivo com extensão BAT. Ele precisa do java instalado na máquina.

      Abraço!

      Adilson – Equipe FILIPEFLOP

  3. Qual a velocidade de comunicação utilizada neste exemplo?

  4. Parabéns. Posso programar este módulo com comandos AT através de um terminal ou tenho que utilizar a Lua?

  5. Parabéns pelo texto, ainda há pouco material sobre a programação do módulo com LUA em português. Vocês tem alguma lista dos comando em LUA que podem ser utilizados com o ESP?

    1. Bom dia Rafael,

      Este link pode te ajudar: http://www.lua.org/manual/5.1/pt/

      Abraço!

      Adilson – Equipe FILIPEFLOP

  6. Olá Adilson,
    parabéns pela excelente explicação sobre com programar o NODEMCU e pelo exemplo de programação em linguagem LUA. Eu tenho alguma experiência em programação em C, ( embora esteja um tanto enferrujado) mas a linguagem LUA, a qual estou tentando aprender, aparenta ter uma sintaxe muito estranha! Seria possível adicionar mais comentários no programa-exemplo detalhando-o melhor?

    Abraços,

    João Roberto Gabbardo

    João Roberto Gabbardo
  7. parabens , deu quase tudo certo , apenas me apareceu este erro , alguem me pode dizer o que e :
    > dofile(‘script2.lua’)
    script2.lua:9: ‘=’ expected near ‘do’
    > =wifi.sta.getip()
    10.0.0.109 255.255.255.0 10.0.0.1

  8. Olá Adilson

    nesse caso eu somente consigo acessar localmente.

    como faço pra controlar o led via internet?

    1. Procure por PortForwarding e redirecionamento de IP que dá pra fazer, já fiz isso aki

  9. Parabens pelo trabalho, gostaria de saber se tem alguma maneira de programar o ESP8266 para WiFi direct(P2P)…. Valeu !

    1. Boa tarde Matheus,

      Você pode configurar um módulo para o modo STA (station), e o outro para o modo AP (access point), com o comando AT+CWMODE, e conectando os dois diretamente… é mais ou menos isso ?

      Abraço!

      Adilson – Equipe FILIPEFLOP

      1. Não meu caro, no datasheet diz que o módulo é compatível com WIfI Direct, que seria comunicação P2P, a maioria dos celulares tem essa tecnologia. O Wi-Fi direct permite que você comunique com outro dispositivos diretamente. Já implementei o Wi-Fi direct em uma aplicação Android, agora falta fazê-la no módulo.

        1. Boa tarde Matheus,

          Pois é. eu não achei nada relacionado à wifi direct nos comandos AT do módulo, o que você tem é o modo AP, o modo STA e o “both”… vou pesquisar mais um pouco e se achar algo posto aqui.

          Abraço.

          Adilson – Equipe FILIPEFLOP

  10. Estou utilizando o ESP8266 NodeMcu V3 e o módulo está ocupando toda a protoboard. Não sobram espaços para conectar os fios. Vocês utilizaram algum modelo especial de protoboard ou o módulo é mais atual e, consequentemente, menor?

    Abs

    1. Bom dia Marcelo,

      Estamos usando a nossa protoboard de 400 pontos, como essa: https://www.filipeflop.com/pd-6b605-protoboard-400-pontos.html

      O nodeMCU fica bem no meio da protoboard, e sobra uma fileira de pinos de cada lado, o que permite a prototipagem. Existe uma versão anterior do NodeMCU (uma placa amarela), que realmente não cabe.

      Abraço!

      Adilson – Equipe FILIPEFLOP

  11. Bom dia,

    Estou tendo uma mensagem de “ERROR” quando tento mandar o comando gpio.mode(1, gpio.OUTPUT) pela serial, sabe qual pode ser o motivo?

    1. Consegui resolver, gravando a firmware mais atualizada do NodeMCU, creio que algumas placas compradas na china não venham com o firmware correto instalado, fica a dica para todos.

  12. Boa noite! Comprei um NodeMcu ESP8266 e começei a testar uns programas nele..Entretanto estou percebendo que toda vez que desligo o módulo e ligo novamente o programa não executa, como se não tivesse sido gravado na memória…Alguém sabe me dizer porque esta acontecendo isso e como resolver? Grato!

    Ivanildo Lima Bandeira
    1. Bom dia Ivanildo,

      O NodeMCU não funciona da mesma maneira que o Arduino, por exemplo. No NodeMCU, você precisa dizer qual dos programas na memória serão executados quando você ligar o módulo, isso você faz criando um arquivo chamado init.lua.

      Ao ligar o NodeMCU, ele procura o init.lua e executa os comandos que estiverem ali dentro. Então se você tem um programa chamado teste_nodemcu.lua que você quer executar toda vez que o módulo liga, você deve criar um init.lua mais ou menos assim:

      function startup()
      print(‘in startup’)
      dofile(‘test_nodemcu.lua’)
      end

      tmr.alarm(0,5000,0,startup)

      O programa acima executa o test_nodemcu.lua depois de 5 segundos do boot do módulo.

      Abraço!

      Adilson – Equipe FILIPEFLOP

      1. Muito bom Adilson.
        Só que no meu teste, usei o código acima e não funcionou, modifiquei, trocando os apóstrofos (‘) por aspas (“) , o código ficou assim:
        function startup()
        print(“in startup”)
        dofile(“test_nodemcu.lua”)
        end

        tmr.alarm(0,5000,0,startup)

        Desta maneira funcionou perfeitamente, estou usando um powerbank na alimentação para testes e posso conectar e desconectar que ele sempre inicia o programa normalmente.
        Muito bom o post.
        Um Abraço.

      2. Boa Noite.

        Sou novo no assunto e tenho uma duvida….onde eu digito estes comando ? Seria na rotina do meu próprio script ?

  13. Para ligaro nodeMcu 12 E , no Arduino mega como devo proceder? eu estava pensando em um CI 4050 que é um buffer inversor para fazer a conexão com o Merga e o nodeMcu 8266. Porque o no arduino mega a pwm é de 0 a 5v e o nodemcu deve ser de 0 a 3.3v
    Ou você tem outra solução para me indicar?

    1. bates mal desse melao…..

  14. Alguém ai sabe me dizer, se tem alguma bateria na voltagem do NODEMCU, ou tenho mesmo que usar um regulador de tensão? E também gostaria de saber qual a amperagem que essa placa precisa no mínimo, pois estou a comprar uma bateria do ALI, http://goo.gl/k329Ah

  15. Bom dia Adilson,

    cara estou com uma dúvida aqui….
    existe alguma maneira de aumentar o número de conexões em um módulo (SOFTAP) ?
    Verifiquei que o nodemcu limita a 4 conexões simultâneas.
    Tens alguma ideia se é possível aumentar este número e como fazer isso?
    Fico no aguardo.

    1. Boa tarde Paulo,

      Bem difícil, a não ser que você pudesse reprogramar o “core” do ESP, mas aí temos outras variáveis como quantidade de memória no módulo, por exemplo.

      A princípio, minha resposta seria: “não é possível”.

      abraço!

      Adilson – Equipe FILIPEFLOP

  16. Ola, Obrigado pela informações !!! Funcionou de primeira.
    Mas agora estou tentando transformar esse código lua para usar na IDE do arduino.
    Poderia me dar uma dica de como ficaria essa parte :

    — Definicoes do Web Server
    srv=net.createServer(net.TCP)
    srv:listen(80,function(conn)
    conn:on(“receive”, function(client,request)
    local buf = “”;
    local _, _, method, path, vars = string.find(request, “([A-Z]+) (.+)?(.+) HTTP”);
    if(method == nil)then
    _, _, method, path = string.find(request, “([A-Z]+) (.+) HTTP”);
    end
    local _GET = {}
    if (vars ~= nil)then
    for k, v in string.gmatch(vars, “(%w+)=(%w+)&*”) do
    _GET[k] = v
    end
    end

  17. Boa noite Adilson!
    Qual o comando para remover todos os arquivos do Esp8266-E12, usando ESPlorer?
    Tipo, deixar ele zerado.

    1. Boa tarde Roberto,

      Utilize o botão “format”, no lado direito do ESPlorer, ao lado da console.

      Abraço!

      Adilson – Equipe FILIPEFLOP

  18. Ola, é possivel usar o modulo nRF24l01 com o nodemcu?

  19. Eu gostaria que alguém pudesse me explicar melhor cada linha dessa parte do código. O brigado!

    — Definicoes do Web Server
    srv=net.createServer(net.TCP)
    srv:listen(80,function(conn)
    conn:on(“receive”, function(client,request)
    local buf = “”;
    local _, _, method, path, vars = string.find(request, “([A-Z]+) (.+)?(.+) HTTP”);
    if(method == nil)then
    _, _, method, path = string.find(request, “([A-Z]+) (.+) HTTP”);
    end
    local _GET = {}
    if (vars ~= nil)then
    for k, v in string.gmatch(vars, “(%w+)=(%w+)&*”) do
    _GET[k] = v
    end
    end

  20. Boa Tarde, estou com uma dúvida quanto a alimentação do ESP8266 NadeMcu, é possível alimenta-lo com uma fonte chaveada de 5V? Minha dúvida esta em relação ao controle de 4 relés, preciso acionar 4 relés com o ESP8266, e preciso fornecer aos relés 5V, GND e o Sinal, isso é possível?

    1. Boa tarde Everson,

      Nesse caso, recomendo usar o módulo relé com fonte externa.

      Abraço!

      Adilson – Equipe FILIPEFLOP

      1. Obrigado Adilson pelo retorno.

        Você poderia me orientar como ligar a fonte externa no modulo relé? Se não me engano o GND da fonte tem que estar ligado no mesmo GND do Arduino (ESP8266) é isso? Porém tem dois GNDs na placa e não sei exatamente qual usar, se da alimentação externa ou o GND no lado dos pinos de Sinal.

        Eu posso alimentar o ESP8266 NodeMcu com uma fonte normal de celular 5V, via mini usb?

        Abç

  21. Waiting answer from ESP – Timeout reached. Command aborted.

    ;(

    1. Não formata.
      Só eu tentar rodar este código abaixo que: “beep”! Mostra esse erro ^^
      while 1 do
      gpio.write(0, gpio.HIGH)
      tmr.delay(10000000)
      gpio.write(0, gpio.LOW)
      tmr.delay(100000)
      end

      1. Mesma coisa tbm mesmo erro, não consigo carregar nada só fica nesse erro!
        Por favor alguém tem ideia de como resolver???

        Timeout reached. Command aborted.

        1. man, o meu da isso direto. Dai eu clico no reset da placa e tudo funciona lindo.

  22. Olá,

    Pra testar, eu criei um código usando a IDE do Arduino, mas agora quero usar Lua.
    Preciso fazer o flash novamente?
    Pq eu conecto na USB e o led fica piscando (código arduino) e quando conecto pelo Esplorer, aparece a mensagem:
    Communication with MCU…
    Got answer! AutoDetect firmware…
    Communication with MCU established.
    Can’t autodetect firmware, because proper answer not received (may be unknown firmware).
    Please, reset module or continue.

    E quando tento enviar um código:
    Waiting answer from ESP – Timeout reached.

    Além disso, nenhum dos comandos funcionam. Sempre retornam Waiting answer from ESP – Timeout reached.

    Obrigado

    1. Infelizmente amigo voce tera de instalar o firmware de novo. Mas tem um programa muito bom pra windows que se chama nodemcu flasher
      tem um tutorial de como usar ele aqui
      http://www.arduinoecia.com.br/2016/05/firmware-nodemcu-esp8266-ESP-01.html

  23. boa noite tenho uma duvida quando tiro o meu nodeMcu do pc e religo ele ele ja perdeu toda programaçao o que eu faço?

    1. resolvido li um pouco mais de seus comentarios e achei a resposta

    2. Boa tarde Tércio,

      Ele não perdeu a programação, provavelmente os arquivos que você criou ainda estão na memória.

      O que você precisa fazer é criar um arquivo chamado init.lua, para chamar o programa desejado durante a inicialização. Dê uma olhada neste artigo, por favor: http://pedrominatel.com.br/esp8266/como-armazenar-e-criar-programas-na-memoria-do-esp8266-com-nodemcu/

      Abraço!

      Adilson – Equipe FILIPEFLOP

  24. ola, e possivel utilizar o nodemcu numa rede externa?

    1. Eu usei o no ip para criar um Host. E no roteador usei o servidor virtual e direcionei para o ip e a porta do nodemcu

  25. Bom dia
    Fiz todos os codigos funcionou perfeitamente e acesso de qualquer lugar, so q precisaria de uma resposta pra saber se realmente meu led acendei. Quando acesso de algum lugar q eu nao tenha contato visual com saber se realmente ligou ou apagou? Ja fiz de tudo e nao consegui slguem tem algima sugestão?
    Obrigado

  26. Estou louco que saia um tutorial do ESP-14
    Descobri que é possível atualizar a bios dele para trabalhar com linguagem C
    Mas o material sobre a Pinagem dele é bem escasso ainda.

  27. Gostaria que voce me ajudasse na comunicação. Nao consigo fazer a comunica de minha placa com o esplorer..

  28. Como ligar esse módulo no rede 220v?

    Vi alguns artigos que mostram que deve ser ligado a um regulador de tensão, alguém recomenda algum? E te algum esquema de ligação?

    1. Voce pode simplismente usar os 5v da porta USB.

  29. Olá Adilson,

    Fiz tudo certo como você descreveu acima, mas quando vou requerir o IP pelo exemplo que você fez nao aparece, tem outra forma de descobrir o IP?

    Somente aparece:
    =wifi.sta.getip()
    =wifi.sta.getip()
    nil
    >

    1. Verifique se seu módulo se conectou a rede. Se estiver conectado e não pegou ip, tente usar um ip estático.

  30. Adilson,
    eu consigo ligar um sensor PIR ou Umidade/temperatura nessa placa e enviar os dados via wifi ?

  31. Bom dia Adilson.

    Gostaria de saber se há como conectar uma antena externa nesta placa para o sinal sempre estar estável.

    Abraços, Mauro .

    1. olá amigo acho q vc deve estar com o mesmo problema que eu , o meu nodemcu perde conexao com a internet direto e nao volta tenho que resetar ele pra continuar, se tiver a resposta me avisa

  32. Olá Adilson, tudo bom?
    Gostaria de saber se o ESP8266 possui algum pino de entrada com interrupção/contador.

    1. Boa tarde Kleber,

      Todos os pinos aceitam interrupção, exceto a GPIO16. Dê uma olhada neste link, por favor: https://github.com/esp8266/Arduino/blob/master/doc/reference.md

      Abraço!

      Adilson – Equipe FILIPEFLOP

  33. Boa tarde,

    Primeiramente parabéns pelo Blog, conteúdo muito interessante e de simples compreensão. Porém, eu trabalho com programação e não intendo muito de eletrônica, e gostaria de programar alguns sensores do esp8266 nodemcu. Eu vi que alguns você pode conectar direto na placa sem o protoboard.

    Segue um que eu vi na internet (RGB SMD LED Module 5050): http://www.ebay.com/itm/181307916806?_trksid=p2060353.m2749.l2649&ssPageName=STRK%3AMEBIDX%3AIT

    Gostaria de saber, o que eu deveria levar em consideração, quando for comprar algum sensor pra conectar direto no esp8266 nodemcu? Somente sensores com 3.3V para a alimentação são possíveis?

  34. Só aparece isto no Termite e não aceita nenhum comando.

    wdt reset
    load 0x40100000, len 27528, room 16
    tail 8
    chksum 0x7f
    load 0x3ffe8000, len 2184, room 0
    tail 8
    chksum 0xa8
    load 0x3ffe8888, len 8, room 0
    tail 8
    chksum 0xfb
    csum 0xfb
    slƒ{lŒŸã„c[0C]þ
    mac 1005

  35. Boa tarde pessoal tudo bem?

    Eu tenho uma placa esp8266 conectada a um modulo j2me via serial, consegui fazer essa placa comunicar com um servidor de socket na internet utilizando comandos AT em seu modulo transparente.

    Bom o problema de utilizar a placa dessa forma é que eu acabo tendo que configurar o ssid e password na mão dentro da midlet , o que para um usuário é extremamente ruim.

    Para contornar esse problema eu carreguei o firmware do nodemcu no esp8266 e montei na linguagem lua um webservice que o usuário vai escolher uma rede disponível e digitar a sua senha via browser, isso ja esta funcionando.

    A minha pergunta é, eu consigo abrir uma conexão socket via comando serial utilizando o nodemcu? Se sim alguém teria algum exemplo para me passar.

    Desde ja agradeço pela atenção dispensada.

  36. No programa ESPlorer o botão ‘Send to ESP’ está oculto, ou seja, não posso cliclar. Há algum procedimento além de colocar o código loop na tela esquerda?

  37. pode me ajudar não consigo programar no meu modemcu ,a porta não abre , sera que tenho que fazer alguma coisa para configura-lá ?
    ainda dá esse erro error: Failed to open COM3

    desde já agradeço !!!

  38. O primeiro código funcionou tudo direito mas o segundo dá sempre erro ao compilar. Ou dá nil ou dá:
    dofile(“ConectarRedeWireless.lua”);
    192.168.137.57 255.255.255.0 192.168.137.1
    ConectarRedeWireless.lua:13: address in use
    stack traceback:
    [C]: in function ‘listen’
    ConectarRedeWireless.lua:13: in main chunk
    [C]: in function ‘dofile’
    stdin:1: in main chunk

  39. galera. Eu consigo enviar os codigos para a placa, pega o ip certinho, eu até consigo pingar na placa.. mas quando acesso via browser nada acontece. Alguma ideia? Só recebo ERR_CONNECTION_REFUSED =/

    1. Bom dia!
      Tb nao consigo mais acessar, vc conseguiu resolver?

  40. Bom dia Adilson. Sou iniciante no NodeMCU, e gostaria de alguns esclarecimentos:
    – para usar o ESPlorer necessito estar com o firmware carregado no ESP8266?
    – quando uso a IDE Arduino, ela compila e grava por cima do endereço do firmware, certo?
    – quando uso o gravador de firmware, existe a possibilidade de gravar em diferentes endereços. o que posso grava além do firmware?
    Desculpe pelo tamanho do questionamento.
    Abraços

  41. Olá, tenho duas duvidas, tem como eu colocar um controle de portao para ser acionado pelo modulo relé? tem outra forma?
    o controle usa 12v preciso ultilizar uma fonte ou pode ser a pilha dele mesmo para alimentalo?

    Rosalvo Da Silva Marcelino

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *