Franzininho WiFi: Explorando as GPIOs com Arduino

Este post faz parte da série Franzininho WiFI - Arduino

Os microcontroladores se comunicam com o ambiente externo por meio de canais físicos, para enviar ou receber sinais elétricos. Nos microcontroladores, a GPIO (General Purpose Input/Output) é o periférico responsável por essa função. Trata-se de um recurso versátil e amplamente utilizado em aplicações de Sistemas Embarcados. A expressão “General Purpose” significa “Propósito Geral” e indica que cada pino pode ser configurado de acordo com as necessidades do projetista.

A Franzininho WiFi possui 35 GPIOs que podem operar em dois modos: OUTPUT e INPUT. É possível usar resistores internos nos pinos configurados como Pull-Up ou Pull-Down.

Neste artigo apresentaremos como utilizar o periférico GPIO na Franzininho WiFi. Nas próximas seções serão descritos os recursos e o código-fonte para cada aplicação proposta. Caso não tenha adicionado a placa Franzininho WiFi no Arduino IDE, confira o artigo de instalação.

API GPIO do Arduino

Nessa sessão conheceremos as funções mais comuns usada no periférico GPIO:

pinMode

Define o modo de operação específico para o pino

void pinMode(uint8_t pin,uint8_t mode);
  • pin : escolher o pino físico será utilizado
  • mode: configura o modo de operação

Os modos de operação para trabalha-se com os pinos são:

  • INPUT : habilita a GPIO como entrada digital
  • OUTPUT: habilita a GPIO como saída digital
  • INPUT_PULLDOWN : GPIO como entrada e habilita resistor interno de pulldown
  • INPUT_PULLUP : GPIO como entrada e habilita resistor interno de pullup

digitalWrite

Seleciona o nível lógico em HIGH ou LOW. Essa função é usada apenas quando o pino é configurado como OUTPUT. 

void digitalWrite(uint8_t pin,uint8_t val);
  • pin : escolher o pino físico a ser utilizado
  • val: configura a saída digital em HIGH ou LOW 

digitalRead

Realiza a leitura do estados lógicos do pino configurado como INPUT

int digitalRead(uint8_t pin);
  • pin : define o pino físico

Materiais necessários

Os materiais necessários para os exemplos propostos são:

  • Placa Franzininho WiFi;
  • Protoboard;
  • Botão táctil;
  • Jumpers;
  • Arduino IDE 

Não tem o Franzininho WiFi? Conheça a simulador Wokwi.

Circuito

Na imagem abaixo apresentamos o circuito proposto neste artigo. Vamos utilizar os LED on-board (GPIO 33 e GPIO 21) e um botão táctil (GPIO 2).

GPIO na Franzininho WiFi

Código

Neste artigo, apresentamos dois projetos que usam o mesmo circuito. No primeiro, controlamos os LEDs por meio de um botão táctil. No segundo, os LEDs alternam entre ligados e desligados (pisca-pisca). Abaixo, disponibilizamos os códigos comentados para ambos os projetos.

Confira esse projeto no Wokwi.

Projeto 1 – Acionamento de LEDs com botão

// Franzininho WiFi - Acionando os LEDs através do botão
// Copyright (C) 2022, Fabio Souza

const byte BUTTON = 1;
const byte LED_YELLOW = 33;
const byte LED_BLUE = 21;


void setup() 
{
 pinMode(LED_YELLOW, OUTPUT);
 pinMode(LED_BLUE, OUTPUT);
 pinMode(BUTTON, INPUT_PULLUP);
}
void loop() 
{
 if(digitalRead(BUTTON)==LOW) // Caso o botão seja pressionado então…
{
   digitalWrite(LED_YELLOW,HIGH);
   digitalWrite(LED_BLUE,LOW); 
 }
 else //Caso contrário então … 
{
   digitalWrite(LED_YELLOW,LOW);
   digitalWrite(LED_BLUE,HIGH);
 }
}

Simule esse projeto no Wokwi:

Projeto 2 – Pisca-Pisca 

/*
 Autor: Equipe Embarcados
*/

const byte BUTTON     =  2;
const byte LED_YELLOW =  33;
const byte LED_BLUE   =  21;


int freq_pisca_pisca_ms = 500;


void setup() 
{
  /*Configurando GPIO saída digital */
 pinMode(LED_BLUE, OUTPUT);
 pinMode(LED_YELLOW, OUTPUT);
 /*Configurando GPIO como entrada digital
   e habilitando o resistor de pullup interno
 */
 pinMode(BUTTON, INPUT_PULLUP);
}
/* Função pisca_pisca : Alterna o acionamento dos LEDs */
void pisca_pisca()
{
 static int64_t last_time; // Guarda o último tempo registrado
 static uint8_t led_state;// Guarda o estado do LED


 if(millis() - last_time > freq_pisca_pisca_ms )
 {
   led_state ^= 0x1; // Realizar uma operação XOR
   digitalWrite(LED_BLUE,led_state); // Aciona o LED_BLUE
   digitalWrite(LED_YELLOW,!led_state);// Aciona o LED_YELLOW
 }
}
void loop()
{
 pisca_pisca();
}

Simule esse projeto no Wokwi – Franzininho WiFi – GPIOs

Desenvolvimento do Código

Nesta sessão entenderemos os códigos dos exemplos apresentados. 

Explicando o Projeto 1 : Acionamento de LEDs com botão

Declarando as constantes com o mapeamento das GPIOs:

const byte BUTTON = 1;
const byte LED_YELLOW = 33;
const byte LED_BLUE = 21;

Configura as GPIOs de acordo com o modo de operação:

 pinMode(LED_YELLOW, OUTPUT);
 pinMode(LED_BLUE, OUTPUT);
 pinMode(BUTTON, INPUT_PULLUP); 

No void loop(), criou-se um laço de condição para ler o estado do botão, caso seja pressionado(LOW), aciona o LED YELLOW e desliga o LED BLUE.

if(digitalRead(BUTTON)==LOW)// Caso o botão seja pressionado então…
{
   digitalWrite(LED_YELLOW,HIGH);
   digitalWrite(LED_BLUE,LOW); 
}

Quando soltar o botão desliga o LED YELLOW e aciona o LED BLUE.

else
{  //Caso contrário então … 
   digitalWrite(LED_YELLOW,LOW);
   digitalWrite(LED_BLUE,HIGH);
}

Explicando o Projeto 2 : Pisca-Pisca Franzininho WiFI

Declarando as constantes com o mapeamento das GPIOs:

const byte BUTTON = 1;
const byte LED_YELLOW = 33;
const byte LED_BLUE = 21;

Configura as GPIOs de acordo com o modo de operação:

 pinMode(LED_YELLOW, OUTPUT);
 pinMode(LED_BLUE, OUTPUT);
 pinMode(BUTTON, INPUT_PULLUP); 

Na função pisca_pisca() é chamada no void loop() para realizar a temporização entre a alternância entre os níveis lógicos de cada LED. Nela utilizamos a função millis() para pegar o tempo corrido em milissegundos, registrar a última vez atendeu a condição do laço de repetição e faz uma operação lógica XOR para escrever no pino. Caso não conheça a função millis(), acesse a documentação.

void pisca_pisca(){
 static int64_t last_time; // Guarda o último tempo registrado
 static uint8_t led_state;// Guarda o estado do LED


 if(millis() - last_time > freq_pisca_pisca_ms )
 {
   led_state ^= 0x1; // Realizar uma operação XOR
   digitalWrite(LED_BLUE,led_state); // Aciona o LED_BLUE
   digitalWrite(LED_YELLOW,!led_state);// Aciona o LED_YELLOW
 }
}

Conclusão

Neste artigo, explicamos o funcionamento básico do GPIO, as funções para configurá-lo (pinMode), acessar seus estados lógicos (digitalRead) e escrever níveis lógicos (digitalWrite). Os projetos apresentados servem como introdução para explorar as diversas possibilidades de uso desse periférico, uma vez que é amplamente utilizado em projetos. Encorajamos você a praticar e modificar os códigos fornecidos para consolidar o conhecimento sobre as GPIOs.

Compre sua Franzininho WiFi (com frete gratis) clicando neste link.

Franzininho WiFI - Arduino

Franzininho WiFi: Primeiros passos na Arduino IDE Franzininho WiFi: Leitura de entradas analógicas com Arduino
Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.
Comentários:
Notificações
Notificar
1 Comentário
recentes
antigos mais votados
Inline Feedbacks
View all comments
Marco Aurelio
Marco Aurelio
11/04/2023 21:39

Oi boa noite, uma pergunta: vejo q você não usou as plavras reservada define aqui.
Pode me explicar o por que e quando devo usá las?

Home » Arduino » Franzininho WiFi: Explorando as GPIOs com Arduino

EM DESTAQUE

WEBINARS

VEJA TAMBÉM

JUNTE-SE HOJE À COMUNIDADE EMBARCADOS

Talvez você goste: