Programando para o ESP8266 com o NodeMcu em Lua

Algumas pessoas me perguntaram se é possível programar o ESP8266 da mesma forma que o Arduino. Até hoje a resposta que dou é não, porém existe o NodeMcu, que é uma implementação do interpretador de Lua (Wiki) dentro do ESP. Isso torna possível criar scripts Lua dentro do ESP e facilita a vida de quem está começando, já que existe uma camada de drivers que criam uma certa abstração do HW, ajudando, por exemplo, a controlar GPIO’s de uma forma similar ao Arduino.
Este firmware possibilita, em sua grande parte, escrever scripts na linguagem Lua, sem a necessidade de recompilar o código e fazer o flash do firmware, já que o script é interpretado. Isso possibilita, por exemplo, criar toda a lógica diretamente por meio de scripts.

Hoje, vou mostrar uma breve introdução ao NodeMcu, desde compilar o código fonte, processo de flash e um exemplo básico. Vamos assumir que você instalou o SDK utilizando este processo.

O primeiro passo é fazer o clone do repositório:

git clone https://github.com/nodemcu/nodemcu-firmware.git

Compliar:

make all

Flash do firmware no módulo (lembre-se de colocar o pino GPIO0 em low/aterrado e religar o módulo):

make flash

Se o processo de flash finalizar sem nenhum erro, abra o terminal serial (cutecom ou minicom) em 9600bps 8N1, e a seguinte mensagem deverá aparecer:

NodeMCU 0.9.5 build 20150213 powered by Lua 5.1.4
lua: cannot open init.lua

Para enviar o script, usamos a interface serial, onde enviamos comandos tais como:

No script acima, criamos um arquivo chamado init.lua e escrevemos um simples print “Ola mundo” que será executado toda vez que o modulo iniciar.

Nos próximos posts, irei criar outros exemplos, tais como conexão com o router, web server, controle das GPIO’s e muito mais.

Happy Hacking!

32 Comments

  1. Dimas Crocco

    Muito bom! Onde está o segundo post??? :)

    Reply
    1. pedrominatel

      Dimas, em breve! ;)

      Reply
  2. Cléber Werlang

    Olá!
    Para programar esses
    módulos posso usar o
    próprio Arduíno? Também
    comprei um programador de
    XBee.
    segue link do programador
    http://www.aliexpress.com/
    snapshot/6468020511.html?
    orderId=65565383325636

    Reply
    1. pedrominatel

      Cléber, boa noite.

      Dá sim para enviar comandos via a serial do Arduíno, porém você precisa utilizar uma serial por software para ligar o ESP, caso o Arduino possua apenas uma serial.

      O programador para XBee também funciona e é menos complicado que utilizando o Arduino.

      Abrs,

      Pedro

      Reply
  3. Cléber W

    Ola!

    Estou usando o programador de xBee (chip ftdi) para programar o esp-07! Liguei o vcc e o ch-pd num pino de 3.3 volts que tem no prog xBee mesmo e o gnd no xBee também!
    Não estou usando nenhuma bateria!

    O pino TX do prog xBee que é 5 volts coloquei um regulador de tensão (17-33) para baixar pra 3.3 volts e não danificar o ESP-07e o RX não precisa!
    Feito isso abri o termite(a serial que uso) e configurado em 9600bts coloquei no PC e ele não para de enviar lixo ([00][00] depois yyyyyyyy e não para!). As vezes ele para e quando envio um AT+RST da a mensagem syntax error!

    O que pode ser isso?

    Reply
    1. pedrominatel

      Cléber, dependendo da versão do firmware, a velocidade da serial pode variar. Tenta em 38400, 57600 ou 115200, tudo 8n1.

      Reply
    2. pedrominatel

      Cléber, só pra entender, o regulador está no TX? Caso positivo, acredito que não vai funcionar. Você tem que usar um transistor ou um MOSFET. Para velocidades baixas até um simples divisor de tensão com resistores funciona.

      Reply
  4. Cléber Werlang

    Em 9600 diz version:0.9.2.4
    ready
    e dae começa (00)(00)(00)(00)(00)(00)(00)(00)(00)(00)…

    Em 115200 mostra
    (00)(00)(00)(00)(00)(00)(00)
    ets jan 8 2013, rst cause:4, boot mode:(3,7)

    wdt reset
    load 0x40100000, len 25052, room 16
    tal 12
    e mostra mais alguns dados assim e logo depois
    (00)(00)(00)(00)(00)(00)(00)…

    Reply
  5. Cléber Werlang

    Bom dia!

    Liguei com 5volts direto o pino tx e nao explodiu nada tambem nao me mostrou mais aquele monte de lixo na serial só que quando mando algum comando da erro – nao reconhece os comandos!

    Será que nao deve ser a tensao muito baixa que o rx do prog xbee recebe? Que o esp envia 3.3v para o prog xbee que é 5v fazendo com que ele nao reconheça o nivel alto?

    Daria para fazer um esquema com transistor ativando a base com 3.3v e passando 5v pro rx do prog xbee! Certo?

    Reply
    1. pedrominatel

      Cléber, dá sim pra usar transistor. Eu costumo usar o 2n3904 com 2 resistores de 10k. Assim que possível eu coloco no blog o esquema.

      Reply
      1. Cléber Werlang

        Ok!

        Fui fazer umas mediçoes e os pinos tx e rx do modulo esp-07 sempre estao em 2.9volts, é normal?
        Ate coloquei um led em cada pra ver senao ficava piscando e ficou ligado direto em ambos!

        Reply
  6. Cléber Werlang

    Boa noite!

    Consegui fazer o esp funcionar!

    Vi que voce disse que nao da pra programar ele que nem o arduino, entao quer dizer que qualquer metodo que eu usar, depois de reinicia-lo ele perde a programação?

    Reply
    1. pedrominatel

      Cléber, no nodeMCU, toda vez que você envia um script em LUA sem os comandos de criação e escrita de arquivo, o script fica na memória e se apaga se reiniciar o módulo. Acabei de criar um tópico a respeito. Espero que lhe ajude.

      Reply
      1. adieldelimaAdiel de Lima

        olá Pedro estou com esse problema..como faço pra não apagar qndo reiniciar o modulo?

        Reply
  7. jose luiz figueredo

    pedro meu pc tem porta serial posso usa-la gravar direto no esp8266? jose luiz

    Reply
    1. pedrominatel

      O ESP precisa que a serial seja nível lógico 3.3v, ou seja, serial USART/UART. O PC usa o padrão RS232 que é de 10v.

      Att,

      Pedro

      Reply
  8. jose luiz figueredo

    pedro estou tão confuso rsrs estas materias do esp8266, que gostaria de tirar um duvido de quantos programas eu preciso para gravar o esp?

    Reply
    1. pedrominatel

      José, você precisa basicamente do programa que grava o firmware, ESPTool por exemplo e do terminal ou ESPlorer (se for no caso do nodeMCU).

      Att,

      Pedro

      Reply
  9. jose luiz figueredo

    Pedro obrigado por ser gentil e atencioso,sem querer abusar de sua boa vontade eu gostaria se possivel de mais exclarescimento sobre o esp8266. ex eu ja instalei o luauploader 1.0.2.4 e o nodemcu eu queria acender e apagar um led pelo celular, ja estou criando meu aplicativo pelo app inventor. onde encontro codigo exemplo para esta função? ligar e desligar voce possue algo desta natureza que dispõe?o que voce pode fazer para me ajudar? grato

    Reply
    1. pedrominatel

      José, bom dia

      Vou tentar colocar um exemplo pra você no meu gitHub.

      Pedro

      Reply
  10. jose luiz figueredo

    obrigado pedro pela sua atenção, ficarei aguardando.

    Reply
  11. jose luiz figueredo

    olá Pedro se possivel poder tirar mais uma duvida,te agradeço exemplo quando uso as portas gpio do esp, automaticamente existe comunicação nos pinos tx rx? ou se vou comunicar com o arduino deve se ativar as saidas tx e rx do esp8266?ou nao precisa é automatico. lir suas boas instruções mais não encontrei nada desta natureza. obrigado

    Reply
  12. cleverson.passos@gmail.com

    bom dia,
    preciso saber se consigo substituir o arduino uno e seu motor shield e o xbee pelo nodemcu?

    Reply
    1. pedrominatel

      Cleverson, tudo vai depender do firmware que voce pretende usar. É com o nodeMCU?
      O nodeMCU roda com scripts em Lua, o que deixa o processamento em tempo real, não tão real assim.

      Pedro

      Reply
  13. jose luiz figueredo

    olá pedro sua ajuda é sempre bem vinda! depois de muito trabalho conseguir gravar o esp 01 usando esplorer e conseguir acessar as portas usando meu celular. a minha dificuldade agora é manter o esp gravado pois assim que desligo a fonte de tensão apaga tudo.rsrrs e quando tento gravar de novo o esp nao aceita mais , mesmo aplicando flashin de novo. pode usar suas habilidades para me ajudar?

    Reply
  14. Marcelo

    Ola ! É possivel ligar um rele de 5v na saida gpio do esp8366 , vai funcionar ?

    Reply
    1. Pedro Minatel (Post author)

      Marcelo, é possível ligar o relé mas voce terá que usar um circuito com um transistor e uma fonte de 5v. O relé de 5v não irá funcionar em 3.3v, podendo até a fazer o ESP resetar quando for acionar o relé.

      Obrigado!

      Reply
      1. Marcelo

        Pedro, obrigado pela resposta, ontem liguei meu modulo ESP8266 com a placa FTDI 232RL, rodei o nodemcu flasher for windows e atualizou o firmware conforme tutorial que segui, depois tentei rodar através do esplorer o escript init.lua e deu error “busy”, tem ideia do que pode ser ??

        Reply
  15. Carlos SeLL

    Olá, boa noite.

    Alguém tem experiência com a diferença de pinagem entre o nodemcu AMICA e a outra versão LOLIN (V3)? Por exemplo, o pino Vin (5V) eu não consegui utilizar!

    Obrigado.

    Reply
  16. Celso

    Pedro. Boa noite.

    Estou com o Nodemcu da LoLin V3 e, ao inicializar no ESPlorer a 9600 bps, qdo reseto o modulo vem a mensagem Can´t autodetect firmware, because proper answer not received. O que pode estar ocorrendo.

    Reply
    1. Pedro Minatel (Post author)

      Provavelmente pelo baudrate. Tente com 115200!

      Reply
    2. Celso

      Apresenta a mesma mensagem em todas as opções de baud rate.

      Reply

Deixe seu comentário