Sistem Konversi Video Otomatis & Pemutar Animasi Monokrom High-FPS untuk Layar OLED I2C berbasis Mikrokontroler.
Project ini menyulap mikrokontroler mungil (ESP32-C3 Super Mini) dan layar OLED 0.96 inch menjadi gantungan resleting tas digital yang bisa memutar video animasi. Karena mikrokontroler tidak bisa memutar file .mp4 secara langsung, project ini menggunakan pipeline konversi di komputer (Python) untuk mengubah video menjadi barisan kode Hexadecimal (Byte Array), lalu menyimpannya di memori Flash ESP32 untuk diputar bagaikan buku flipbook digital yang sangat cepat.
- Automated Video-to-Hex Parsing: Script Python otomatis mengekstrak frame dari video
.mp4, mengubahnya menjadi gambar monokrom 1-bit, dan menyusunnya menjadi kode C++ (frames.h). - Smart Aspect Ratio (Anti-Gepeng): Dilengkapi algoritma Zoom & Crop (Full Screen) atau Pillarboxing agar video dari format apapun (misal 1:1 Instagram) tetap proporsional di layar 128x64.
- Overclocked I2C Playback: Konfigurasi khusus di Arduino IDE (
Wire.setClock(400000)) untuk menembus batas standar I2C, memungkinkan pemutaran video hingga 30 FPS dengan lancar tanpa glitch. - Deep Sleep & Ultra-Portable Ready: Desain kodingan disiapkan untuk penggunaan baterai LiPo 3.7V ukuran mini (cocok untuk modifikasi gantungan kunci/resleting).
Project ini menggunakan kombinasi software dan hardware berikut:
- Microcontroller: ESP32-C3 Super Mini (Dipilih karena ukurannya yang seujung jempol dan memori Flash 4MB yang lega).
- Display: OLED 0.96" SSD1306 (I2C) - Warna Putih.
- Power: Baterai LiPo 3.7V (Kapasitas ~150mAh) + Modul TP4056 Micro-USB.
- Software Converter: Python dengan library OpenCV (
cv2) & Numpy. - IDE: Arduino IDE (dengan library
Adafruit_GFX&Adafruit_SSD1306).
Sebelum menjalankan sistem ini, pastikan Anda memiliki:
- Python 3.x terinstall di komputer untuk menjalankan script converter.
- Library Python: Buka terminal/CMD dan ketik
pip install opencv-python numpy. - Arduino IDE dengan board manager ESP32 yang sudah terinstall.
- Video source dalam format
.mp4(disarankan durasi maksimal 30-60 detik agar muat di memori ESP32).
video_path = 'video_30detik.mp4' # Ganti dengan nama file videomu
fps_target = 30 # Target kecepatan frame