ÍNDICE DE CONTEÚDO
- Franzininho WiFi: Display 7 Segmentos TM1637
- Franzininho WiFi: Primeiros passos na Arduino IDE
- Franzininho WiFi: Explorando as GPIOs com Arduino
- Franzininho WiFi: Leitura de entradas analógicas com Arduino
- Franzininho WiFi: PWM (Pulse Width Modulation) com Arduino
- Franzininho WiFi: Comunicação Serial (UART) com Arduino
- Franzininho WiFi: Servo Motor com Arduino
- Franzininho WiFi: Web Server
- Franzininho WiFi: Display OLED
- Franzininho WiFi: Sensor de temperatura e umidade DHT22
- Franzininho WiFi: Sensor de temperatura DS18B20
- Franzininho WiFi: Display LCD 16×2 com comunicação I2C
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:
Embarcados Experience 2024: Evento Presencial
Participe do Embarcados Experience 2024 em São Paulo. Conhecimento técnico, palestras, workshops e oportunidade de networking com profissionais experientes.
pinMode
Define o modo de operação específico para o pino
1 |
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.
1 |
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
1 |
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
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 |
// 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
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 |
/* 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:
1 2 3 |
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:
1 2 3 |
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.
1 2 3 4 5 |
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.
1 2 3 4 5 |
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:
1 2 3 |
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:
1 2 3 |
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.
1 2 3 4 5 6 7 8 9 10 11 12 |
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?