A coisa mais simples para começar a programar o NodeMcu é tentar acionar alguns LEDs. Dessa forma, nós podemos entender um pouco sobre a programação em Lua e também sobre o controle das portas digitais. Portanto, neste post, vamos ver como acionar o LED normalmente e com PWM.

Se você ainda não instalou o firmware e o programa necessário para programar, dê uma lida na aula anterior. E nela eu dei um panorama da interface do ESPlorer (software que vamos utilizar para programar). Então, qualquer coisa, reveja o post para se orientar melhor.

Em outros posts, já expliquei um pouco sobre o LED e o PWM. Então, recomendo a leitura caso você não conheça algum dos termos.


Informações interessantes

Na hora de programar, existe um excelente site que explica as funções existentes no NodeMcu. Acesse o link aqui. No menu da esquerda você pode selecionar um modulo para ver as informações. Vale lembrar, como foi dito na aula anterior, que nós construirmos o firmware com apenas alguns dos módulos. Sendo assim, só temos acesso as funções dos módulos que instalamos no firmware.

Alem disso, o site padrão da placa contém códigos de exemplo muito úteis. Esse códigos mostram, de maneira simples, como utilizar algumas das principais funções da placa.

Pinos

Na programação, os pinos obedecem a numeração da placa: 0 é o número associado ao pino D0 e por aí vai. Porém, na minha versão do NodeMcu, o pino D1 e o D2 estão com a mesma marcação, recebendo o nome de D2 (não sei se é algum erro de fabricação). Porém, as portas funcionam seguindo a mesma lógica: pino 0 – D0, pino 1 – ‘D2’, pino 2 – D2, pino 3 – D3 … A imagem abaixo é da minha placa:

nodemcu pinos da minha placa

Programação em Lua

Ao contrário do Arduino, na hora de programar no NodeMcu, nós não temos uma função Setup e uma função Loop. O código roda diretamente nas linhas que você for adicionando. E, para criar um loop infinito, você deve usar um ‘while’.

Como fazer o código executar sozinho

Abaixo, explico como começar a programar no ESPlorer. Porém, preciso fazer uma observação importante antes. Os códigos enviados à placa não são executados automaticamente toda vez que a placa é energizada, igual ocorre no Arduino.

Para fazer isso, você tem que nomear o arquivo do seu codigo de “init”. Nos tópicos abaixo você entenderá melhor.


Conectando o NodeMcu

Iniciar a comunicação com a plaquinha pode ser um pouco complicado. Então, vamos aprender a fazer isso:

Todo o passo a passo será feito na região de comunicação do software, que fica na parte superior direita.

  • Ligue o NodeMcu na porta USB do computador.
  • No programa clique nas setinhas azuis para recarregar os dispositivos conectados.
    • Para saber qual é a porta certa, você pode fazer duas coisas: ou verificar no painel de controle do computador; ou memorizar quais portas apareciam na lista antes de você clicar nas setinhas azuis.
  • Feito isso, clique no botão “Open”
  • Logo em seguida, aperte o botão físico “RST” (reset) do NodeMcu
    • Se tudo de certo, uma série de mensagens irão aparecer logo em seguida (imagem abaixo)
    • Senão, você provavelmente conectou na porta errada ou está usando a velocidade errada. Então tente trocar um dos dois.
    • Repare que a velocidade de comunicação padrão no meu caso foi 115200.

NodeMcu conectando ao ESPlorer

Vai aparecer uma série de mensagens de erro. Se as mensagens se parecem com as da imagem acima está tudo certo. Caso contrário, reveja o passo a passo para saber o que pode ter dado errado.

Pronto, agora já podemos começar a programar.


Acionamento simples

Vamos começar com um simples acionamento de 2 LEDs. De forma que um fica acionado e o outro apagado, e, após um tempo, eles trocam de estado. Ou seja, o estado de um é o oposto do outro e os estados são intermitentes.

Circuito

Circuito NodeMcu acendendo 2 LEDs

Basta ligar o ânodo dos LEDs nos pinos digitais D1 e D2 (ou em pinos da sua escolha). O cátodo deve ser ligado a um resistor (utilizei resistores de 220Ω). E, a outra ponta do resistor deve ser ligada ao GND da placa.

Obs.: No meu caso, como não existe D1, eu liguei no ‘D2’ e D2 (pinos 1 e 2).

Programação

Primeiro, vou começar definindo duas variáveis com o número de cada pino. O procedimento é o mesmo do Arduino, a diferença é que, em lua, não é necessário informar o tipo da variável:

1
2
led1 = 1
led2 = 2

Agora, nós temos que definir os pinos como saída. E, para fazer isso, basta usar o seguinte comando:

gpio.mode(led1, gpio.OUTPUT)

Neste caso, “led1” se refere ao pino que estou configurando; e “gpio.OUTPUT” quer dizer que estou configurando como saída. Para configurar como entrada é só trocar “OUTPUT” por “INPUT”.

Feito isso, é só aprender a controlar o LED. Para isso, existe o seguinte comando:

gpio.write(led1, gpio.HIGH)

Neste caso, “led1” se refere ao pino que estou controlando; e “gpio.HIGH” quer dizer que estou ativando ele (estado de nível alto). Para desativar o pino, é só trocar “HIGH” por “LOW”.

Além disso, para terminar o código, envolvi os comandos em um ‘while true’ para criar um loop infinito. E usei a função delay do NodeMcu:

tmr.delay(tempo)

Dentro do parêntesis, você deve colocar o tempo em microssegundos. No código final eu coloquei 1000*1000 = 1 segundo. Escrevi dessa forma, pois editando o 1º “1000”, posso alterar o tempo em milissegundos.

Por fim, basta clicar no botão “Save & Run” na parte inferior esquerda do programa (salve o arquivo do código antes). Esse botão faz o upload do arquivo para a placa e executa ele. Na parte direta do programa, você pode clicar no botão “Reload” para mostrar os arquivos que estão gravados dentro da placa.

Obs.: Lembre de salvar o arquivo com o nome “init” caso queira que o NodeMcu execute esse código toda vez que ele for energizado.

Código completo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
led1 = 1
led2 = 2

gpio.mode(led1, gpio.OUTPUT) --Definindo pino como saida
gpio.mode(led2, gpio.OUTPUT) --Definindo pino como saida

while true do
gpio.write(led1, gpio.HIGH)--Setando como valor alto
gpio.write(led2, gpio.LOW)--Setando como valor baixo

tmr.delay(1000 * 1000) --Delay de 1 segundo

gpio.write(led1, gpio.LOW)
gpio.write(led2, gpio.HIGH)
tmr.delay(1000 * 1000)
end

Acionamento por PWM

Obs: Me esqueci de criar a build com o módulo do PWM, então tive que fazer tudo de novo: criar outra build e instalar o firmware. 

Vou utilizar o mesmo circuito do acionamento simples. Só que, neste caso, vou ficar apenas com o LED ligado ao pino 1 e tirar o outro. Sendo assim, vamos à programação.

Programação

Para começar a controlar o brilho do LED, precisamos de 2 comandos:

pwm.setup(led1,500,512)

Em relação ao comando acima: “led1” se refere ao pino que você quer controlar; o segundo parâmetro (500 neste caso) diz respeito a frequência do pwm e é dada em Hz; o último valor é o duty cycle e ele pode variar de 0 a 1023. O valor do duty cycle, em %, será em relação ao valor máximo (1023). Por exemplo, 512 é aproximadamente a metade de 1023, então é um caso onde o duty cycle equivale a 50%.

Feito isso, basta iniciar o pwm com o comando:

pwm.start(led1)

É só informar qual pino você está querendo inicializar. Finalmente, clique em “Save&Run” e veja o código funcionando.

Código completo

1
2
3
4
5
led1 = 1

pwm.setup(led1,500,512)

pwm.start(led1)

 

É isso, agora você já deve ser capaz de ver a documentação e explorar os comandos por conta própria. Mas é claro que, nas próximas aulas, vou continuar ensinando os módulos mais importantes. Principalmente os que possuem comandos para comunicar com a internet.

 

Leitura digital/analógica com NodeMcu – Aula 4 – NB