NodeMCU: Lua para o ESP8266

O NodeMCU é um firmware e kit de desenvolvimento que permite a programação de protótipos para a Internet das Coisas (IoT). O firmware utiliza o paradigma event-driven para facilitar o desenvolvimento de aplicações que necessitem acesso à Internet. Além disso, integra módulos de GPIO, 1-Wire, I2C, SPI, PWM, ADC, entre outros, para facilitar o manuseio de módulos baseados no chip ESP8266.

Na verdade, o NodeMCU é mais que um firmware, é a empresa por trás do NodeMCU Dev Kit, que além do firmware, disponibiliza uma placa de desenvolvimento baseada no ESP8266.

O paradigma event-driven (ou programação assíncrona) consiste em um estilo de programação em que o fluxo de execução é determinado por eventos disparados por callbacks. Uma callback é uma função que é invocada quando algo acontece. Por exemplo, ao pressionar um botão um evento é disparado e a callback efetuará uma ação para esse evento. Se você já utilizou Javascript ou Node.JS você está bem habituado em usar. Abaixo é possível observar um exemplo de código de um servidor HTTP simples para o NodeMCU no estilo event-driven.

O NodeMCU é baseado no eLua, uma versão do Lua 5.1 para sistemas embarcados e seu sistema de arquivos é o SPI Flash File System (SPIFFS). O firmware substituiu algumas bibliotecas padrões do Lua por versões específicas para o ESP8266. Além dessas mudanças, algumas bibliotecas, como math e debug, foram completamente removidas para diminuir o consumo de memória do dispositivo.

Fazendo Flash do seu ESP8266

Inicialmente vamos fazer o download do firmware. O NodeMCU pode ser encontrado nas versões Float e Integer (menor consumo de memória). Se você preferir, também pode compilar a sua própria versão, apenas com os módulos que necessita, através de builds customizadas.

Tendo o .bin em mãos, vamos baixar a ferramenta que fará o upload. Existem duas bem populares, o NodeMCU Flasher, para Windows, e o esptool, multiplataforma. Se você possui o Python e o Pip instalado em sua máquina basta executar pip install esptool para baixar o pacote e instalá-lo, este é o método mais aconselhado de instalação.

Para fazer o flash do ESP8266, é necessário colocá-lo em modo de programação. Isto varia de modelo para modelo, sendo assim eu sugiro a leitura do artigo Primeiros passos com o ESP8266 para um melhor entendimento.

NodeMCU Flasher

Telinhas são sempre agradáveis aos usuários finais, e o NodeMCU Flasher não é diferente. Você deve se preocupar com duas abas apenas, a Operation e a Config.

Escolha a porta COM onde está seu ESP. Em seguida na aba Config escolha o .bin que acabamos de baixar. O firmware sempre fica no offset 0x00000.

Volte para a aba Operation e aperte Flash.

Se tudo ocorrer bem, a barra de progresso irá andar com o passar dos segundos, além de aparecer os endereço MAC do dispositivo. Se não funcionar, os possíveis problemas são: O ESP não está em modo de programação ou falta os drivers de comunicação do seu controlador UART.

esptool

O esptool é um programa que executa em linha de comando, que é do universo unix-like (Linux, BSD, etc), já está habituado com isto. Sendo assim, vamos executar o comando:

./esptool.py write_flash 0x00000 nodemcu-firmware.bin

Se tudo ocorrer bem, você verá uma mensagem dizendo que N bytes foram gravados no endereço 0x00000. Se não funcionar, os possíveis problemas são: O ESP não está em modo de programação, você pode precisar de permissão root para acessar a porta serial ou falta os drivers de comunicação do seu controlador UART.

Considerações finais

Tudo funcionou perfeitamente, mas você está se perguntado, o que faço agora? Bem, eu recomendo a instalação do ESPlorer, uma mini IDE para desenvolvedores que usam o ESP8266.

ide_esplorer

Como o ESPlorer você pode programar em LUA, executar comandos diretamente no seu ESP, ou ainda gravar arquivos no sistema de arquivos dele. É uma mão na roda, e o melhor, multiplataforma. 🙂

Se você ainda está procurando onde comprar seu ESP, eu recomendo a FILIPEFLOP. Na FILIPEFLOP você pode encontrar vários modelos de ESP, como o ESP-01, o ESP-07, o ESP-12, o ESP201 e o NodeMCU Dev Kit.

Espero que vocês tenham gostado. Nos próximos artigos mostrarei como programar o ESP usando o firmware NodeMCU.

Este artigo é uma adaptação da monografia BUSTRACKER: Sistema de rastreamento para transporte coletivo de Alexandre Vicenzi e o texto na íntegra pode ser encontrado aqui.

  • elton

    comando linux (testado Debian 8.5):
    aptitude install python-pip
    pip install pyserial
    pip install esptool
    cd
    esptool.py –port /dev/ttyUSBX write_flash 0x00000 nodemcu_firmware.bin
    com X sendo numero da porta

  • Alberto Leite

    Olá! Tentei executar pelo ESPlorer, as rotinas LUA do projeto do BusTracker e fiquei com dúvida no procedimento do wpa.conf e mqtt.conf. Poderia enviar o passo a passo do procedimento para gerar o firmware no NodeMCU. Fiz uma adaptação do projeto usando o GPS mas sempre que tento gerá-lo para gravar o firmware – aparece o erro PANIC: unprotected error in call to Lua API e cannot unit.lua.
    Poderiam me ajudar?