Interagir com o circuito é quase sempre uma necessidade. E a forma mais fácil de fazer isso é por meio de botões e ou usando um potenciômetro. Sendo assim, vamos aprender a fazer leituras das portas digitais e da porta analógica do esp8266.
Na aula anterior, aprendemos a acionar os pinos digitais do esp.
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 básicas
Antes de sair colocando tensões nos pinos digitais do NodeMcu, é crucial conhecer qual é a tensão máxima de entrada de cada um. No caso, a faixa de valores adequados de tensão para usar nos pinos digitais e analógicos é de 0 a 3,3 V. Entretanto, a real tensão limite para não danificar a placa é 3,6 V.
Assim como foi dito em aulas anteriores, o pino analógico do módulo esp8266 (CI) suporta apenas tensões de 0 a 1 V, mas o divisor de tensão presente no NodeMcu é quem permite a leitura de tensões de 0 a 3,3 V.
Então, temos que tomar muito cuidado se formos ler alguma tensão externa. 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 do esp8266
Para entender a leitura digital, vamos utilizar 2 botões físicos para cada um ser responsável por acionar 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 pull-up 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
Não tem mistério na programação, pois o processo para ler um pino digital é o mesmo feito no Arduino UNO. Primeiro definimos o pino como entrada ativando o pull-up interno:
pinMode(pino, INPUT_PULL_UP);
Em seguida, para ler o pino, é só usar o comando:
digitalRead(pino);
Onde pino é o número do GPIO.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | // Duas formas de definir os pinos: // Pela numeração do NodeMCU: #define LED_1 D0 #define LED_2 D1 #define BOTAO_1 D2 #define BOTAO_2 D3 // Pela numeração do GPIO: //#define LED_1 16 //#define LED_2 5 //#define BOTAO_1 4 //#define BOTAO_2 0 void setup() { // Configura LEDs como saída pinMode(LED_1, OUTPUT); pinMode(LED_2, OUTPUT); // Configura botões como entrada pinMode(BOTAO_1, INPUT_PULLUP); pinMode(BOTAO_2, INPUT_PULLUP); } void loop() { // Leitura do botão 1 if(digitalRead(BOTAO_1) == 0) { digitalWrite(LED_1, HIGH); delay(200); // debounce do botão } else // Se não está pressionado { digitalWrite(LED_1, LOW); } // Leitura do botão 2 if(digitalRead(BOTAO_2) == 0) { digitalWrite(LED_2, HIGH); delay(200); // debounce do botão } else // Se não está pressionado { digitalWrite(LED_2, LOW); } } |
Leitura analógica do esp8266
Para o caso da leitura analógica, vamos utilizar um potenciômetro para variar a tensão que enviaremos à porta analógica. E o valor lido será printado no monitor serial.
Circuito
O circuito é bem simples: ligue o GND em uma extremidade do potenciômetro e o 3,3 V na outra. Por fim, o pino central dele deve ser ligado ao único pino analógico da placa: A0.
Programação
Novamente, o comando é o mesmo que o do Arduino UNO e afins:
analogRead(A0);
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | #define POTENCIOMETRO A0 void setup() { // Inicializa a comunicação serial Serial.begin(115200); } void loop() { // O valor lido varia de 0 a 1023, portanto devemos // usar uma variável de 16 bits uint16_t valor_lido = analogRead(POTENCIOMETRO); Serial.println("Leitura da porta analógica:" + String(valor_lido)); // Delay entre leituras delay(1000); } |