Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🐧 Dasai Mochi Linux Clone (SDL3)

Um port nativo para Linux do projeto Dasai Mochi. Este projeto permite rodar as animações do "Mochi" (o assistente de robô fofo) diretamente no seu desktop Linux, sem necessidade de hardware ESP32, utilizando a biblioteca moderna SDL3 para renderização de alta performance.

Screenshot 1 Screenshot 2

✨ Funcionalidades

  • Nativo: Roda diretamente no kernel Linux (X11 ou Wayland).
  • Engine SDL3: Utiliza a versão mais recente e performática da Simple DirectMedia Layer.
  • Zero Dependência Externa: Ferramentas de conversão reescritas em C puro (adeus Wine!).
  • Compatibilidade Arduino: Possui uma camada de emulação (pgmspace.h) que permite usar exatamente os mesmos arquivos de dados (gift_muka.h) do projeto original de hardware.
  • Leve & Escalável: Consumo mínimo de RAM e janela redimensionável (Zoom configurável).

🛠️ Estrutura do Projeto

mochi_linux/
├── data/            # Contém os dados da animação (convertidos de GIF)
│   └── gift_muka.h  # Arquivo original do Arduino (NÃO PRECISA EDITAR)
├── img/             # Imagens e Screenshots do projeto
├── src/             # Código Fonte do Player
│   ├── main.c       # Lógica principal e loop de renderização SDL3
│   └── pgmspace.h   # Camada de compatibilidade (Emula Arduino PROGMEM)
├── tools/           # Ferramentas Nativas
│   ├── gif2code.c   # Código fonte do conversor de GIFs (C Puro)
│   └── gif2code     # Binário do conversor (gerado após compilação)
├── build.sh         # Script de compilação rápida
├── CMakeLists.txt   # Configuração profissional para CMake
└── README.md        # Documentação

🚀 Instalação e Dependências

Este projeto requer a biblioteca SDL3. Como ela é muito recente, deve ser compilada manualmente na maioria das distribuições.

1. Instalar Dependências (Debian/Ubuntu)

sudo apt update
sudo apt install cmake build-essential git

2. Compilar e Instalar SDL3

cd /tmp
git clone [https://github.com/libsdl-org/SDL.git](https://github.com/libsdl-org/SDL.git)
cd SDL
mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -j$(nproc)
sudo make install
sudo ldconfig

🏗️ Como Compilar e Rodar o Player

Opção A: Script Rápido (Recomendado)

chmod +x build.sh
./build.sh
./mochi_app

Opção B: Via CMake (Para IDEs)

mkdir build
cd build
cmake ..
make
./mochi_app

🎨 Como Adicionar Novas Animações

O projeto inclui uma ferramenta nativa (tools/gif2code) para converter qualquer GIF para o formato hexadecimal compatível.

1. Compile a Ferramenta (Apenas na primeira vez)

Você precisa compilar o conversor C. Ele usa a biblioteca stb_image (header-only).

cd tools
# Baixa a dependência necessária (stb_image.h) se não tiver
wget [https://raw.githubusercontent.com/nothings/stb/master/stb_image.h](https://raw.githubusercontent.com/nothings/stb/master/stb_image.h)

# Compila o conversor
gcc gif2code.c -o gif2code -lm
cd ..

2. Converta seu GIF

Encontre um GIF (preferencialmente preto e branco) e execute:

# Sintaxe: ./tools/gif2code <entrada.gif> <saida.h>
./tools/gif2code img/gifs/angry.gif data/gift_muka.h

Isso irá sobrescrever o arquivo de dados atual.

3. Atualize o Player

Recompile o projeto para que ele carregue a nova animação:

./build.sh
./mochi_app

🧠 Como Funciona (Técnico)

O projeto original armazena frames na memória Flash do ESP32 usando a diretiva PROGMEM. O Linux não usa essa arquitetura de memória Harvard.

Para resolver isso sem reescrever milhares de linhas de arrays hexadecimais, criamos um cabeçalho falso (src/pgmspace.h) que intercepta as chamadas do Arduino:

// No Linux, PROGMEM é ignorado e pgm_read_byte é apenas uma leitura de ponteiro
#define PROGMEM
#define pgm_read_byte(addr) (*(const uint8_t *)(addr))

Isso permite que o código C compile os dados do Arduino como se fossem arrays nativos do PC.

🗺️ Roadmap / Ideias de Melhorias

Caso queira expandir o projeto em futuras sessões, aqui estão algumas ideias interessantes:

  • Troca Interativa de Animações: Compilar múltiplos arrays de animações e alternar entre as expressões (ex: feliz, bravo, com sono) utilizando teclas numéricas do teclado (1, 2, 3, etc.).
  • Carregamento Dinâmico de GIFs: Modificar o player para decodificar e carregar qualquer arquivo .gif diretamente da linha de comando (ex: ./mochi_app img/gifs/happy.gif), eliminando a necessidade de conversão estática para .h.
  • Menu / Interface de Usuário: Criar uma interface gráfica ou menu simples em tela para selecionar a animação ativa.

Controles

  • ESC: Fechar a aplicação.

About

Um port nativo para Linux das animações do robô Dasai Mochi, desenvolvido em C com SDL3. Inclui ferramenta nativa para converter GIFs em arrays compatíveis com displays OLED.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages