ESP32 + RoboEyes: Como Criar Olhos Animados para seu Robô com Display OLED


Robô desenvolvido com ESP32 exibindo olhos animados em um display OLED SSD1306 utilizando a biblioteca RoboEyes da FluxGarage.
Projeto de robô utilizando ESP32 e display OLED SSD1306 com a biblioteca RoboEyes. Com poucas linhas de código, é possível criar olhos animados, piscadas automáticas e diferentes expressões para tornar o robô mais interativo.

Os olhos são um dos elementos que mais dão personalidade a um robô. Mesmo um projeto simples se torna muito mais interessante quando parece olhar ao redor, piscar e demonstrar emoções.

Nos vídeos anteriores do RodRobot, utilizamos o driver DRV8833, os motores N20 e um display OLED SSD1306 para construir nosso robô. Agora chegou a hora de dar vida a ele.

Neste artigo vamos conhecer a biblioteca RoboEyes, desenvolvida pela FluxGarage, que permite criar olhos animados de forma simples e com poucas linhas de código.


O que é a RoboEyes?

A RoboEyes é uma biblioteca para Arduino e ESP32 que desenha olhos animados em displays OLED.

Com ela é possível criar diversas animações automaticamente, como:

  • 👀 Movimento dos olhos
  • 😉 Piscadas automáticas
  • 😀 Expressão feliz
  • 😴 Expressão cansada
  • 😠 Expressão brava
  • 😐 Expressão normal

Tudo isso praticamente sem precisar programar animações manualmente.


Hardware utilizado

  • ESP32
  • Display OLED SSD1306 128×64 I2C
Diagrama de ligação do ESP32 ao display OLED SSD1306 utilizando comunicação I2C para exibir olhos animados com a biblioteca RoboEyes.
Ligação entre o ESP32 e o display OLED SSD1306 utilizando a interface I2C. Neste projeto, os pinos GPIO21 (SDA) e GPIO22 (SCL) são utilizados para controlar a biblioteca RoboEyes e criar olhos animados para o robô.

Ligações

OLEDESP32
VCC3,3 V
GNDGND
SDAGPIO 21
SCLGPIO 22

Instalando a biblioteca

A instalação é muito simples.

Acesse o GitHub da biblioteca:

https://github.com/FluxGarage/RoboEyes

Clique em:

Code → Download ZIP

Será baixado o arquivo:

RoboEyes-main.zip

Depois abra a Arduino IDE e escolha:

Rascunho
    ↓
Incluir Biblioteca
    ↓
Adicionar Biblioteca .ZIP

Selecione o arquivo RoboEyes-main.zip e aguarde alguns segundos até a instalação ser concluída.


Abrindo o exemplo

Após instalar a biblioteca, abra:

Arquivo
    ↓
Exemplos
    ↓
FluxGarage RoboEyes
    ↓
I2C_SSD1306_Basics

Esse exemplo já funciona muito bem, mas fiz algumas modificações e acrescentei comentários para facilitar o entendimento.


Entendendo o código

Primeiro incluímos todas as bibliotecas necessárias.

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <FluxGarage_RoboEyes.h>

Cada uma possui uma função específica.

  • Wire realiza a comunicação I2C.
  • Adafruit GFX fornece as funções gráficas.
  • Adafruit SSD1306 controla o display OLED.
  • FluxGarage RoboEyes cria as animações dos olhos.

Depois configuramos nosso display OLED.

#define SCREEN_WIDTH    128
#define SCREEN_HEIGHT    64
#define OLED_RESET       -1

Aqui informamos que o display possui resolução de 128 × 64 pixels.


Agora criamos o display.

Adafruit_SSD1306 display(
  SCREEN_WIDTH,
  SCREEN_HEIGHT,
  &Wire,
  OLED_RESET
);

Em seguida criamos o objeto da biblioteca RoboEyes.

RoboEyes<Adafruit_SSD1306> roboEyes(display);

É através desse objeto que controlaremos todas as animações.


Escolhendo a expressão

Uma das grandes vantagens da biblioteca é poder alterar a expressão do robô modificando apenas uma linha.

//#define EXPRESSAO HAPPY      // 😀 Feliz
// #define EXPRESSAO DEFAULT   // 😐 Normal
// #define EXPRESSAO TIRED     // 😴 Cansado
#define EXPRESSAO ANGRY        // 😠 Bravo

Basta comentar as demais linhas e deixar ativa apenas a expressão desejada.

As expressões disponíveis são:

ExpressãoResultado
DEFAULT😐 Normal
HAPPY😀 Feliz
TIRED😴 Cansado
ANGRY😠 Bravo

Inicialização

No setup() iniciamos a comunicação I2C.

Wire.begin(21,22);

Depois inicializamos o display OLED.

display.begin(SSD1306_SWITCHCAPVCC,0x3C);

Em seguida iniciamos a biblioteca.

roboEyes.begin(128,64,100);

O último parâmetro representa a taxa máxima de atualização da animação.

Quanto maior esse valor, mais suave será o movimento.


Abrindo os olhos

Esta linha faz o robô acordar.

roboEyes.open();

Definindo a emoção

Depois aplicamos a expressão escolhida.

roboEyes.setMood(EXPRESSAO);

Piscadas automáticas

Esta função faz o robô piscar sozinho.

roboEyes.setAutoblinker(true);

Não é necessário criar temporizadores ou utilizar delay().


Movimento automático

Outra função interessante é:

roboEyes.setIdleMode(true);

Ela faz os olhos olharem para diferentes direções de maneira automática, deixando o robô muito mais natural.


Loop principal

O loop possui apenas uma função.

roboEyes.update();

Ela atualiza continuamente todas as animações.

Por isso ela deve permanecer sendo executada durante todo o programa.


Código completo

Como o código é pequeno, você pode copiá-lo diretamente daqui.



/*****************************************************************************************
 * Projeto   : RoboEyes - Seleção de Expressões
 * Autor     : RodRobot
 * Plataforma: ESP32 + Display OLED SSD1306 128x64 I2C
 *
 * Biblioteca : FluxGarage RoboEyes
 * Referência : https://www.fluxgarage.com
 *
 * Display OLED SSD1306
 * SDA -> GPIO21
 * SCL -> GPIO22
 * Endereço I2C -> 0x3C
 *
 * Descrição:
 * Demonstra como selecionar facilmente a expressão dos olhos.
 * Basta alterar a constante EXPRESSAO abaixo.
 *
 *****************************************************************************************/

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <FluxGarage_RoboEyes.h>

//=============================================================================
// Configuração do Display
//=============================================================================
#define SCREEN_WIDTH    128
#define SCREEN_HEIGHT    64
#define OLED_RESET       -1

Adafruit_SSD1306 display(
  SCREEN_WIDTH,
  SCREEN_HEIGHT,
  &Wire,
  OLED_RESET
);

//=============================================================================
// Objeto RoboEyes
//=============================================================================
RoboEyes<Adafruit_SSD1306> roboEyes(display);

//=============================================================================
// ESCOLHA A EXPRESSÃO DO ROBÔ
//=============================================================================

//#define EXPRESSAO HAPPY      // 😀 Feliz
// #define EXPRESSAO DEFAULT  // 😐 Normal
// #define EXPRESSAO TIRED    // 😴 Cansado
#define EXPRESSAO ANGRY    // 😠 Bravo

//=============================================================================
// Setup
//=============================================================================
void setup()
{
  Wire.begin(21,22);                     // SDA, SCL

  if(!display.begin(SSD1306_SWITCHCAPVCC,0x3C))
  {
    while(true);                         // Erro ao iniciar display
  }

  roboEyes.begin(128,64,100);            // Inicializa RoboEyes

  roboEyes.open();                       // Abre os olhos

  roboEyes.setMood(EXPRESSAO);           // Define a expressão

  roboEyes.setAutoblinker(true);         // Pisca automaticamente

  roboEyes.setIdleMode(true);            // Movimento aleatório
}

//=============================================================================
// Loop Principal
//=============================================================================
void loop()
{
  roboEyes.update();                     // Atualiza animações
}


Conclusão

A biblioteca RoboEyes facilita muito a criação de robôs mais expressivos. Em poucos minutos é possível transformar um simples display OLED em um rosto animado, capaz de piscar, olhar para diferentes direções e demonstrar emoções como felicidade, cansaço ou bravura.

Este foi apenas o primeiro contato com a biblioteca. Nos próximos projetos do RodRobot, vamos explorar outros recursos, como novas animações, integração com sensores e reações em tempo real, tornando o robô ainda mais interativo.

Se este artigo foi útil para você, compartilhe com outros makers e acompanhe o canal RodRobot para não perder os próximos projetos com ESP32, robótica e eletrônica prática. 🚀


🔧 Acompanhe o RodRobot

Projetos maker com ESP32, Arduino, eletrônica e programação.

RodRobot – Projetos maker, eletrônica e programação na prática.

Comentários

Postagens mais visitadas deste blog

ESP32-C3 Super Mini: Características, Vantagens, Pinagem, Matter.

ESP32 para Iniciantes: Projeto LED Piscando Passo a Passo

ESP32 Botão Touch: Como Usar o Sensor Touch (Tutorial com LED e Relé)