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:
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.
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
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.