Conteúdo


Conhecendo o NodeMCU e sua placa DEVKIT

Instale e inicie a programação desse ambiente de desenvolvimento de IoT de software livre

As placas de desenvolvimento, como Arduino e Raspberry Pi, são opções comuns na criação de protótipos de novos dispositivos IoT. Essas placas de desenvolvimento são essencialmente minicomputadores que podem se conectar e ser programadas por um PC ou Mac padrão. Após terem sido programadas, as placas de desenvolvimento podem, então, se conectar e controlar sensores no campo. É possível ler mais sobre hardware de desenvolvimento de IoT nesse artigo do developerWorks.

Como o "I" em IoT significa Internet, as placas de desenvolvimento precisam de uma maneira de se conectar à Internet. No campo, a melhor maneira de conectar-se à Internet é usando redes sem fio. Entretanto, Arduino e Raspberry Pi não têm suporte integrado para redes sem fio. Os desenvolvedores precisarão incluir um módulo wi-fi ou de celular à placa e gravar um código para acessar o módulo wireless.

Neste artigo, eu apresentarei uma placa de desenvolvimento de IoT de software livre chamada NodeMCU. Um de seus recursos mais exclusivos é o suporte integrado para conectividade wi-fi, que torna o desenvolvimento de aplicativos IoT muito mais fácil.

O que é NodeMCU?

A NodeMCU (Node MicroController Unit) é um ambiente de desenvolvimento de software e hardware livre criado em torno de um System-on-a-Chip (SoC) muito econômico chamado ESP8266. O ESP8266, projetado e fabricado pela Espressif Systems, contém todos os principais elementos de um computador moderno: CPU, RAM, rede (wifi) e até mesmo um moderno sistema operacional e SDK. Quando comprado em grande quantidade, o chip ESP8266 custa apenas 2 dólares a unidade. Isso o torna uma excelente opção para projetos de IoT de todos os tipos.

No entanto, como um chip, o ESP8266 também é difícil de acessar e usar. Você precisa soldar fios, com a voltagem analógica apropriada, em seus PINs para as tarefas mais simples como ligá-lo ou enviar um comando ao "computador" no chip. E você precisa programá-lo com instruções de máquina de baixo nível que possam ser interpretadas pelo hardware do chip. Embora esse nível de integração não seja um problema quando o ESP8266 é usado como um chip controlador integrado em eletrônicos produzidos em massa, ele é um enorme fardo para amadores, hackers ou estudantes que desejam testá-lo em seus próprios projetos de IoT.

Emprestando uma página dos playbooks bem-sucedidos do Arduino ou um Raspberry Pi, o projeto NodeMCU busca simplificar o desenvolvimento do ESP8266. Ele tem dois componentes principais.

  1. Um firmware ESP8266 de software livre que é construído sobre o SDK proprietário do fabricante do chip. O firmware fornece um ambiente de programação simples baseado no eLua (Lua integrado), que é uma linguagem de script muito simples e rápida com uma comunidade de desenvolvedores estabelecida. Para novos usuários, a linguagem de script Lua é fácil de aprender.
  2. Uma placa DEVKIT que incorpora o chip ESP8266 em uma placa de circuito padrão. A placa possui uma porta USB integrada que já está conectada ao chip, um botão de reconfiguração de hardware, antena wi-fi, luzes de LED e pinos GPIO (Entrada/Saída de Propósito Geral) de tamanho padrão que podem ser conectados a uma placa de ensaio. A Figura 1 mostra a placa DEVKIT e a Figura 2 mostra o esquema de seus pinos.
Figura 1. A placa NodeMCU DEVKIT
A Placa NodeMCU DEVKIT
A Placa NodeMCU DEVKIT
Figura 2. O esquema do pino NodeMCU
O esquema de pinos do NodeMCU
O esquema de pinos do NodeMCU

A placa NodeMCU DEVKIT que já vem com o firmware instalado pode ser comprada por $8 dólares a unidade, o que a torna um dispositivo muito econômico para criação de protótipos e até mesmo para uso de produção.

Mas você se pergunta: e o Arduino? O projeto Arduino cria um SDK de software e um design de hardware de software livre para um controlador IoT versátil. Semelhante ao NodeMCU, o hardware Arduino é uma placa de microcontrolador com um conector USB pronto, luzes de LED e pinos de dados padrão. Ele também define interfaces padrão para interagir com sensores ou outras placas. Mas diferente do NodeMCU, a placa Arduino pode ter diferentes tipos de chips de CPU (geralmente um chip ARM ou Intel x86) com chips de memória e uma variedade de ambientes de programação. Na verdade, também há um design de referência do Arduino para o chip ESP8266. No entanto, a flexibilidade do Arduino também significa variações importantes entre diferentes fornecedores. Por exemplo, a maioria das placas Arduino não possui recursos de wi-fi e algumas possuem uma porta de dados serial em vez de uma porta USB. Eu acho que o NodeMCU oferece uma experiência mais consistente e acessível para desenvolvedores de IoT.

1

Introdução ao NodeMCU

Embora este artigo suponha que o usuário use um modelo mais recente do computador Mac OS X, se você usa uma máquina Linux, as instruções são essencialmente as mesmas. Para usuários do Windows, será necessário instalar Python e pip primeiro.

1a

Instale um driver de USB para porta serial

Faça download e instale um aplicativo de driver de USB para porta serial em seu computador. Eu usei um do website Silicon Labs. Esse aplicativo de driver é necessário para que o seu computador se comunique com a placa NodeMCU usando um cabo USB padrão.

1b

Crie seu firmware NodeMCU customizado

Crie seu próprio firmware NodeMCU customizado. Acesse o website NodeMCU Custom Builds e escolha as opções desejadas.

Figura 3. Configure e crie seu próprio firmware NodeMCU
Configure e crie seu próprio firmware NodeMCU

Além das opções padrão, abaixo há algumas opções interessantes que talvez você deseje escolher:

  • ADC: suporte para medir a entrada analógica (nível de voltagem) no pino A0 da placa NodeMCU.
  • HTTP: suporte para gravar códigos para manipular solicitações HTTP.
  • SSL/TLS: suporte para conexões HTTPS seguras.
  • MQTT: suporte para o protocolo MQTT para enviar dados para outros dispositivos ou servidores usando um modelo de publicação/assinatura sobre TCP/IP.
  • Websocket: uma biblioteca de conveniência para acessar serviços da web baseados em soquete da web.
  • DHT: uma biblioteca de conveniência para ler dados da família de sensores ambientais da DHT.
  • Configuração do usuário final: suporta um "portal de captura" para permitir que o usuário insira sua própria senha de wi-fi, sem precisar codificar permanentemente as credenciais de wi-fi no código do aplicativo.

Após o firmware ser criado, o sistema enviará um link por e-mail para que você faça download de seu arquivo binário de firmware. Escolha o build com suporte de número flutuante, a menos que você saiba que seu aplicativo lidará apenas com números inteiros.

1c

Pisque o firmware no dispositivo NodeMCU

Instale a biblioteca esptool do Python e use-a para piscar o firmware que você acabou de transferir por download no dispositivo NodeMCU.

Usando Python e pip, execute o seguinte comando para instalar esptool e todas as suas dependências.

sudo pip install esptool

Conecte o dispositivo NodeMCU ao computador usando um cabo USB. A luz azul no NodeMCU piscará brevemente durante a conexão. Em seguida, execute o seguinte comando para piscar o firmware que você acabou de transferir por download (o arquivo *.bin ) no NodeMCU.

esptool.py --port=/dev/cu.SLAB_USBtoUART write_flash -fm=dio -fs=32m 0x00000 nodemcu-master-10-modules-2017-01-28-02-40-34-float.bin

Em um Mac, a porta é /dev/cu.SLAB_USEtoUART conforme descrito acima; no Windows, a porta pode ser COM8; no Linux, a porta pode ser /dev/ttyUSB0.

1d

Execute algum código Lua

Conecte-se ao seu NodeMCU e execute algum código Lua. Felizmente, quando você instalou esptool, o sistema também instalou o miniterm como uma dependência. Portanto, vá em frente e execute o comando a seguir.

miniterm.py /dev/cu.SLAB_USBtoUART

Agora, pressione o botão RESET na placa NodeMCU e, em seguida, pressione algumas vezes a tecla RETURN no teclado de seu computador. Primeiro, você verá alguns caracteres aleatórios e, em seguida, finalmente você verá um prompt de comandos interativo.

--- Miniterm on /dev/cu.SLAB_USBtoUART  9600,8,N,1 ---
--- Quit: Ctrl+] | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H ---
␒�␁@����␆�G��p��������␟␅]␝bvFD����������
>
>

No prompt de comandos, agora é possível executar scripts Lua. Teste este comando:

print ("Hello World")

Agora, é possível testá-lo. Um bom lugar para iniciar é em fragmentos de código simples da seção "Exemplos" do website do NodeMCU.

Como uma alternativa ao miniterm, é possível usar a ferramenta de GUI ESPlorer. No entanto, será necessário ter o Java instalado em seu computador.

1e

Atualize o script init.lua

Sempre que a placa NodeMCU é ligada ou reiniciada, ela executa o script init.lua . Esse script é o ponto de partida de seu aplicativo. Abaixo há um script init.lua de exemplo, que pisca a luz de LED vermelha na placa a cada segundo.

-- D0 is the LED on the NodeMCU board
lpin = 0
-- timer to run every 1000ms
tmr.alarm(1, 1000, tmr.ALARM_AUTO, function()
    -- Turn on the LED
    gpio.write(lpin, gpio.LOW)
    -- Keep it on for 100ms
    tmr.delay(100000)
    -- Turn off the LED
    gpio.write(lpin, gpio.HIGH)
end)

Use o programa luatool para instalar o script init.lua no dispositivo. É possível fazer download de luatool por meio deste repositório GitHub. Em seguida, execute o seguinte comando na mesma pasta que o arquivo init.lua .

python luatool.py --port /dev/cu.SLAB_USBtoUART --src init.lua --dest init.lua --verbose

De acordo com minha experiência, será necessário executar miniterm primeiro e ver o prompt da linha de comando de Lua. Em seguida, use CTRL-] para encerrar miniterm, em seguida, execute luatool.py. O motivo é que luatool é menos tolerante a ruído na porta serial. Portanto, nós devemos executar miniterm primeiro para limpar o canal.

2

Noções básicas da programação NodeMCU

Até agora, você viu como carregar e executar aplicativos Lua no NodeMCU. Nesta seção, vamos revisar algumas técnicas básicas para executar apps NodeMCU.

2a

Utilizando o wi-fi

Uma funcionalidade importante do NodeMCU são seus recursos de wi-fi simples de instalar. No script init.lua é possível conectar o dispositivo NodeMCU a qualquer rede wi-fi com poucas linhas de código.

-- setup Wifi
wifi.setmode(wifi.STATION)
wifi.sta.config("SSID","password")

Observe que você precisará saber o nome e a senha da rede para poder se conectar. Uma técnica comum é realizar o loop por meio de uma lista de pares conhecidos de nome e senha de rede, caso o dispositivo seja colocado em vários ambientes diferentes.

2b

Conectando-se à Internet

O NodeMCU SDK contém um módulo HTTP para fazer solicitações HTTP pela Internet. Quando você construir seu firmware NodeMCU, precisará selecionar as opções de HTTP para incluir esse módulo. O fragmento de código abaixo mostra como fazer uma solicitação HTTP GET e executar algum código na conclusão dessa solicitação. Na função de retorno da chamada, o argumento code é o valor de retorno de HTTP (por exemplo, 200 indica sucesso e 404 indica que a URL não está acessível) e o argumento data é o conteúdo na mensagem de resposta HTTP.

geturl = "http://www.ibm.com/"
    http.get(geturl, nil, function(code, data)
        -- Turn off the red LED on NodeMCU board
end)
2c

Acessando os pinos GPIO

Os pinos de Entrada/Saída de Propósito Geral (GPIO) são pinos digitais na placa NodeMCU DEVKIT. Cada pino pode ter apenas dois estados: um estado de baixa voltagem e um estado de alta tensão, representando 0 e 1 respectivamente. No aplicativo Lua do NodeMCU, é possível ler o estado de cada pino e, em seguida, configurar o estado.

-- Read the state of GPIO PIN #5. The val value is 0 or 1
gpio.mode(5, gpio.INPUT)
val = gpio.read(5)


-- Set the state of GPIO PIN #5 to be HIGH
gpio.mode(5, gpio.OUTPUT)
gpio.write(5,gpio.HIGH)
2d

Lendo sinais analógicos

Embora os pinos GPIO sejam digitais, alguns sensores de IoT enviam dados como sinais analógicos. Ou seja, a voltagem da conexão de entrada representa os dados. Por exemplo, o nível de voltagem real de um sensor de temperatura pode indicar a leitura da temperatura. Na placa NodeMCU DEVKIT, o pino A0 pode funcionar como um pino ADC (Conversor Analógico Digital). Quando uma conexão de entrada é conectada ao A0, seu nível de voltagem entre 0 a 3,3 V é convertido para um número inteiro entre 0 e 1024. O fragmento de código abaixo mostra como ler um valor analógico do pino A0.

-- Read the voltage level on A0. The v value is from 0 to 1024
adc.force_init_mode(adc.INIT_ADC)
v = adc.read(0)

O pino ADC pode converter a voltagem apenas de 0 a 3,3 V. Se seu sensor produzir uma voltagem analógica fora desse intervalo (como de 0 a 5 V), será necessário incluir um resistor entre a conexão de entrada e o pino A0. É fácil incluir esse resistor quando você conecta a placa NodeMCU DEVKIT a uma placa de ensaio.

Conclusão

Neste artigo, eu apresentei o NodeMCU DEVKIT. Ele é uma solução poderosa, fácil de usar e muito econômica para desenvolvimento de aplicativos IoT. Para os iniciantes em IoT, eu acho que o NodeMCU é uma das melhores opções para ir da criação de protótipos até a produção.

Em meu próximo artigo, eu uso NodeMCU como um exemplo para mostrar como desenvolver uma solução de sensor de IoT completa com serviços MQTT de backend.


Recursos para download


Tema relacionado

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=80
Zone=Internet of Things
ArticleID=1063027
ArticleTitle=Conhecendo o NodeMCU e sua placa DEVKIT
publish-date=09192018