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






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?