Interagir com o circuito é quase sempre uma necessidade. Mas interagir usando a comunicação serial pode ser uma coisa complicada, ainda mais quando precisamos que o circuito funcione desacoplado do computador. Sendo assim, vamos aprender a fazer leituras das portas digitais e da porta analógica do NodeMcu.
Na aula passada, vimos que o modulo GPIO do NodeMcu é bem tranquilo de usar. As funções foram bem parecidas com as do Arduino, e, para leitura digital, não será diferente.
Recomendo este post que explico um pouco da teoria por trás da leitura digital. Além disso, vamos utilizar um potenciômetro em um dos circuitos, então, se você quiser conhecer melhor sobre esse componente, leia este post.
Informações importantes
Antes de sair colocando tensões nos pinos digitais do NodeMcu, é crucial conhecer qual é a tensão máxima de entrada de cada um. Tanto para os pinos digitais quanto para os analógicos, a tensão pode variar entre 0 e 3.3V. A tensão limite para não danificar a placa é 3.6V.
Então, temos que tomar muito cuidado se formos ler alguma tensão externa. Caso contrário, é mais tranquilo, porque a placa já funciona com 3.3V. Portanto, não tem como ter uma tensão maior que isso. Vale dizer que, em algumas versões da placa, todos os pinos possuem proteção contra sobretensão. Mas não é bom arriscar, né?
Leitura digital
Para entender a leitura digital, vamos utilizar 2 botões físicos para, cada um, comandar 1 LED.
Circuito
A ligação dos LEDs é a mesma que vimos na aula anterior. No caso dos botões, é bem simples: basta ligar o GND em uma ponta e conectar a outra ponta em uma porta digital do NodeMcu. Tem que ser no GND, pois vamos acionar o resistor de pullup interno do NodeMcu
Os LEDs estão sendo controlados pelos pinos D0 e D1. E os botões estão sendo lidos pelos pinos D2 e D3.
Programação
Assim como na aula anterior, começamos criando variáveis para nossos pinos de acordo com o circuito:
1 2 3 4 | led1 = 0 led2= 1 bot1 = 2 bot2 = 3 |
Agora, configure os LEDs como saída (vimos na aula passada) e os botões como entrada. O comando é o mesmo:
gpio.mode(bot1, gpio.INPUT, gpio.PULLUP)
A diferença é que, no segundo parâmetro, utilizei INPUT, e adicionei um terceiro parâmetro. O fator gpio.PULLUP serve para acionar a resistência de pull-up interna do NodeMcu. Como queremos uma leitura estável, temos que acioná-lo.
E, para fazer a leitura das entradas digitais, temos o seguinte comando:
gpio.read(bot1)
Ele retorna o estado do pino: 1 ou True se o pino receber sinal de nível alto; 0 ou False se o pino receber sinal de nível baixo.
Por fim, basta comandar os LEDs a partir dos botões. Para isso, vou usar o comando gpio.write e o parâmetro de acionamento vai receber o próprio gpio.read():
gpio.write(led1, gpio.read(bot1))
O acionamento do botão fica dependente do estado do pino. Quando apertamos o botão, gpio.read() lê 0 e o LED é apagado. A última parte da programação é envolver os comandos em um while true e adicionar um delay. Se não houver delay, o código pode dar erro. Confira o código completo abaixo.
Código completo
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | led1 = 0 led2 = 1 bot1 = 2 bot2 = 3 gpio.mode(led1, gpio.OUTPUT) -- Configura os leds como saida gpio.mode(led2, gpio.OUTPUT) gpio.mode(bot1, gpio.INPUT, gpio.PULLUP) -- Configura os botoes como entradas gpio.mode(bot2, gpio.INPUT, gpio.PULLUP) while true do -- Loop infinito gpio.write(led1, gpio.read(bot1)) -- O led 1 recebe o valor lido pelo botão 1 gpio.write(led2, gpio.read(bot2)) -- O led 2 recebe o valor lido pelo botão 2 tmr.delay(500*1000) --Delay de 500ms end |
Leitura analógica
Para o caso da leitura analógica, vamos utilizar um potenciômetro para variar a tensão que enviaremos à porta analógica.
Circuito
O circuito é bem simples: ligue o GND em uma extremidade do potenciômetro e o 3.3V na outra. Por fim, o pino central dele deve ser ligado ao único pino analógico da placa: A0.
Programação
Para fazer a leitura da porta analógica é bem direto, pois só existe uma. Basta usar o seguinte comando:
adc.read(0)
O parâmetro ‘0’ é justamente o pino para leitura. Como só existe 1 pino, é só deixar do jeito que está. E, para saber qual valor que está sendo lido, vamos apenas printar no console. Fazemos isso usando o comando:
print(leitura)
Agora é só envolver os códigos em um loop e adicionar um delay. Pronto, com esse código você já pode ver quais valores a placa está lendo.
Código completo
1 2 3 4 5 6 7 | while true do -- Loop infinito val = adc.read(0) -- Variavel com a leitura analógica print(val) -- Printa no console tmr.delay(500*1000) -- Delay de 500ms end |
NodeMcu-Executar duas funções ao mesmo tempo – Aula 5 – NB
Estou utilizando o NodeMCU na IDE Arduino. Porém não estou conseguindo fazer uma leitura usando o sensor de corrente ACS 712, poderia me ajudar?
Claro. É difícil saber seu problema sem alguma ideia do que está acontecendo exatamente. Mas vou fazer algumas observações que podem te ajudar:
O sensor ACS 712 tem uma saída que representa a corrente em forma de tensão, sendo que cada 66mV corresponde a um acréscimo de Ampère. E a faixa de medição é de -30A a 30A, logo você teria que fazer um mapeamento dos valores pelo que entendi.
Se seu problema for em relação ao procedimento de leitura, pelo que li a respeito (não cheguei a programar o NodeMcu pela IDE do Arduino), o procedimento é o mesmo que o de alguma placa do Arduino, ou seja, utilizando o comando analogRead(A0).
E lembre-se que a leitura de corrente é feita em série.
Enfim, se o seu problema não estiver dentre o que falei acima ou você não conseguir resolvê-lo, me mande uma imagem do circuito (no email: mundoprojetado@gmail.com) e uma descrição do problema para eu poder te ajudar com mais precisão.
Em cima do circuito de leitura digital, gostaria de criar um HTML através do meu wifi/roteador para ler o estado em que estão os dois LEDs (LOW/HIGH).
Olá, Diego. As aulas 6 e 7 te dão um direcionamento sobre como fazer isso.