Primeiros passos com o ESP8266 NodeMCU – Utilizando sinais PWM

Até agora nós já aprendemos a realizar as leituras das portas de entrada analógica e digital do nosso módulo ESP8266 NodeMCU e também vimos como devemos proceder para poder acionar dispositivos que funcionam baseados em um comportamento ON/OFF por meio das portas de saída digital existentes no mesmo. Para completar este ciclo, nós devemos apenas falar sobre a utilização das portas de saída analógica fictícias existentes no NodeMCU visando a manipulação de dispositivos externos, portanto, neste tutorial, nós vamos discutir o que são sinais PWM, o que eles tem a ver com as eventuais saídas analógicas citadas e como utilizá-los.

Confira aqui o nossos tutoriais para iniciantes no mundo do ESP8266 NodeMCU:

  • O que é ESP8266 – A Família ESP e o NodeMCU 
  • Primeiros passos com o ESP8266 NodeMCU – Lendo um potenciômetro
  • Primeiros passos com o ESP8266 NodeMCU – Lendo o estado de um botão
  • Primeiros passos com o ESP8266 NodeMCU – Ligando e desligando um led

[toc]

kit robotica educacional com Arduino ESP ou Microbit

Simulando saídas analógicas com PWM

Apesar de possuir uma porta para realizar a leitura de variáveis analógicas, o módulo ESP8266 NodeMCU não conta com pinos que possam ser usados para fornecer sinais de tensão cujos módulos fazem parte dos valores intermediários do intervalo que vai de 0V e 3,3V. Entretanto, é possível utilizarmos as portas de saída digital para simularmos portas de saída analógica por meio do uso do PWM, que por sua vez, é uma técnica através da qual podemos obter resultados analógicos por meios digitais.

Este recurso consiste na geração de uma onda quadrada, na qual, controla-se a porcentagem do tempo em que a onda permanece em nível lógico alto. Esta porcentagem é chamada de Duty Cycle e sua alteração provoca mudança no valor médio da onda, indo desde 0V (0% de Duty Cycle) a 3,3V (100% de Duty Cycle) no caso do ESP8266 NodeMCU. O Duty Cycle a ser definido no projeto corresponde a um número inteiro, que é armazenado em um registrador 10 bits. Sendo assim, seu valor vai de 0 (0%) a 1023 (100%).

Figura 1 – Sinais PWM

Mãos à obra – Efetuando a leitura de um potenciômetro

Componentes necessários

Montando o projeto

Figura 2 – Hardware utilizado.

Programando

Este é o código que utilizaremos no desenvolvimento deste tutorial.

int pwm;

void setup() 
{ 
  pinMode(D1,OUTPUT);
  Serial.begin(115200);
}

void loop() 
{ 
       analogWrite(D1,pwm);
       Serial.print("O valor do pwm é: ");
       Serial.println(pwm);
       pwm = pwm +100;
       delay(1500);
       if(pwm>1023)
       {
            pwm = 0;
       }
}

Colocando para funcionar

Após compilarmos o código apresentado, nós teremos o seguinte resultado:

Figura 3 – Resultado obtido

Entendendo a fundo

Software

– Definindo as configurações iniciais

Dentro da função setup() nós vamos primeiramente definir o modo de operação do pino que nós vamos utilizar, de modo que, como nós queremos manipular um led, devemos fazer com que o pino em questão seja uma saída digital, desta forma, nós vamos recorrer à função pinMode() para fazermos com que o pino D1 seja a saída digital desejada. Posteriormente, nós iniciaremos a conexão com o Serial Monitor através da função Serial.begin() (passando como parâmetro o valor da taxa de transmissão de dados (como sugestão, utilize este valor)).

void setup() 
{ 
  pinMode(D1,OUTPUT);
  Serial.begin(115200);
}

– Utilizando os sinais PWM

A primeira coisa que nós devemos fazer para gerar um sinal PWM em uma determinada porta do nosso módulo ESP8266 NodeMCU será recorrer a função analogWrite(), que por sua vez, é responsável pelo sinal em questão. Esta função possui dois parâmetros, de modo que, o primeiro deles diz respeito ao pino que queremos utilizar e o segundo à magnitude do sinal PWM gerado.

 analogWrite(D1,pwm);

Em seguida, nós utilizamos as sentenças Serial.print() e Serial.println() para escrever no Serial Monitor a frase “O valor do pwm é:” seguido do valor utilizado no acionamento do nosso led.

Serial.print("O valor do pwm é: ");
Serial.println(pwm);

Após estes procedimentos, nós incrementamos o valor da variável pwm em 100 unidades para que no próximo ciclo este seja utilizado aumentando o brilho do led em questão.

pwm = pwm +100;

Sendo assim, terminamos adicionando a função delay() para determinar o intervalo de tempo entre duas incrementações de brilho e também colocamos uma estrutura condicional if() para que quando a variável pwm atingir um valor maior do que 1023, o valor zero deve ser atribuído a ela.

delay(1500);
if(pwm>1023)
{
   pwm = 0;
}

Veja como ficou a nossa função loop().

void loop() 
{ 
       analogWrite(D1,pwm);
       Serial.print("O valor do pwm é: ");
       Serial.println(pwm);
       pwm = pwm +100;
       delay(1500);
       if(pwm>1023)
       {
            pwm = 0;
       }
}

 


Considerações finais

Neste tutorial, nós demonstramos como você pode fazer para utilizar sinais pwm para acionar dispositivos através de um módulo ESP8266 NodeMCU. Esperamos que continue nos acompanhando e sinta-se à vontade para nos dar sugestões. Lembre-se de deixar suas dúvidas nos comentários abaixo.

Privacy Preference Center