Want Nazarome Chupale on a tiny 0.96" SSD1306 OLED? This project plays a 150-frame mono loop with Adafruit SSD1306 — the same export style as the other song builds on this site, with its own timing and sketch file.
⬇ Free download — Nazarome Chupale OLED code
Full main.ino with all PROGMEM frames · ZIP or git clone
Parts list
- Board: ESP8266 NodeMCU / Wemos D1 Mini or ESP32 (recommended)
- Display: 0.96" SSD1306 I2C OLED, 128×64, usually
0x3C - 4 Dupont wires (VCC, GND, SDA, SCL)
- USB cable + Arduino IDE
Connection / wiring
The sketch comment lists Uno pins (SDA A4, SCL A5). Use an ESP board for this frame count.
| OLED pin | Arduino Uno / Nano | ESP8266 (NodeMCU) | ESP32 |
|---|---|---|---|
| VCC | 5V (or 3.3V if module requires) | 3.3V | 3.3V |
| GND | GND | GND | GND |
| SDA | A4 | D2 (GPIO4) | GPIO21 |
| SCL | A5 | D1 (GPIO5) | GPIO22 |
On ESP8266, call Wire.begin(4, 5) before display.begin() if default I2C pins fail.
If the screen stays black, try address 0x3D and read
OLED blank screen fixes.
Libraries
- Arduino IDE → Tools → Manage Libraries
- Install Adafruit SSD1306
- Install Adafruit GFX Library
- Select your ESP board, a flash size of at least 1MB, and the correct COM port
How the player works
Frames live in const uint8_t PROGMEM frameN[1024]. loop() steps the index every 147 ms:
void loop() {
static uint8_t frameIdx = 0;
static unsigned long lastMs = 0;
const uint8_t* frames[] = { frame0, frame1, /* ... */ frame149 };
const uint8_t numFrames = 150;
if (millis() - lastMs >= 147) {
lastMs = millis();
display.clearDisplay();
display.drawBitmap(0, 0, frames[frameIdx], 128, 64, SSD1306_WHITE);
display.display();
frameIdx = (frameIdx + 1) % numFrames;
}
}
Change 147 to speed the loop up or down. A smaller number is a higher frame rate
(example: 100 ≈ 10 fps).
Upload & run
- Open nazaromechupale → download ZIP or clone
- Arduino IDE requires the folder name to match the file. Rename the unzipped folder to
main, then openmain.ino - Install Adafruit GFX + SSD1306
- Pick ESP8266 or ESP32, flash size ≥ 1MB, and the COM port
- Click Upload
- Watch Serial at 115200 — if you see
SSD1306 allocation failed, fix power, wiring, or the I2C address
Ready to flash?
Get the complete Nazarome Chupale main.ino from GitHub now.
Make your own song animation
This sketch was exported from oledanimationmaker.com:
- Open the free tool in Chrome or Edge
- Go to Import and drop a short clip (up to 200 frames)
- Tune threshold and dither, then check the live OLED preview
- Click Get the Code → Adafruit SSD1306 Arduino
- Save the sketch and push it to your own GitHub repo
Related guides: GIF to OLED, Video to OLED, PROGMEM flash limits.
Troubleshooting
- Sketch too big — use ESP8266/ESP32 with a larger flash size, or fewer frames
- Blank OLED — 3.3V on ESP, check SDA/SCL, try
0x3D - Folder name error — the file is
main.ino, so the folder must be namedmain - Slow / laggy — raise the 147 ms delay if the panel cannot keep up; use solid USB power
- Does not play sound — this build is pictures only. Add a speaker on a separate project if you want audio
FAQ
Is the Nazarome Chupale OLED code free?
Yes — github.com/itzmeAshish/nazaromechupale.
Does it play audio?
No. This is a visual OLED animation. Pair a speaker on its own circuit if you need the song audio.
Can I change the clip?
Yes. Import a different GIF or video into OLED Animation Maker and export a new sketch.
Build more OLED song & GIF animations
Pixel editor, video import, WebSerial live preview, Arduino & MicroPython export — free in the browser.
Open OLED Animation Maker →What the nazaromechupale sketch contains
The repo is itzmeAshish/nazaromechupale.
The song title on this page is Nazarome Chupale. The OLED side of that
title is a silent 150-frame loop. main.ino holds frame0
through frame149, each a 1024-byte PROGMEM bitmap, plus the
Adafruit player that draws them at 0x3C on a 128×64 SSD1306. There is no
sample of the recording and no line of lyric text in the file. If the panel is doing
its job, you see pictures only.
The sketch file is main.ino, so the folder has to be named main.
GitHub’s ZIP often lands as nazaromechupale-main. Rename that directory
before you double-click the file. Opening it from the long folder name makes the IDE
offer to move the sketch, and people sometimes accept a copy that is missing the rest
of the download. This is the main layout, the same rule Thangamaana uses,
not the code.ino layout used by Kalayani or Ganesha Day 7.
setup() starts Serial at 115200 and the display. loop() is
the 147 ms walker already shown above: clear, drawBitmap of the current
pointer at 128×64, display(), then wrap with numFrames equal
to 150. No buttons, no brightness, no one-shot mode.
Speed table for the 147 ms player
Stock speed is 147 ms, about 6.8 fps. One pass is 150 × 147 ms = 22,050 ms, about 22.1 seconds. That is close to Thangamaana’s 149 ms step, but this loop is 50 frames shorter, so the cycle ends about eight seconds sooner. It is much slower than the 67 ms Ganesha and Khayalon players, which is why a default I2C clock is usually enough here.
| Delay | Approx. fps | 150-frame pass | Why you would pick it |
|---|---|---|---|
| 200 ms | 5 | 30 s | Each bitmap stays up long enough to see across a room |
| 147 ms (stock) | ~6.8 | ~22.1 s | The published Nazarome Chupale timing |
| 100 ms | 10 | 15 s | A quicker loop that still clears a 100 kHz transfer |
| 67 ms | ~15 | ~10 s | Only if you also raise the I2C clock, or accept that display() sets the pace |
The 22 second figure is the number to check with a watch. If a pass lands near 22 seconds, the stock delay is really in the binary you uploaded. If it lands near 10 seconds, the sketch on the board is not this file’s 147 ms constant anymore.
Pins the comment lists, and the pins you should use
The comment lists Uno wiring: SDA A4, SCL A5. That legend is accurate for a classic Uno or Nano, and many modules will run from 5V because they carry a regulator. It is the wrong board for this binary. Flash the ESP and follow the ESP column.
- ESP8266 NodeMCU: 3.3V, GND, SDA on D2 (GPIO4), SCL on D1 (GPIO5).
Wire.begin(4, 5)if the core’s default pins are not those two. In Tools, a flash size of at least 1MB is the floor this page already names. A 4MB module is the one that will not surprise you. - ESP32: 3.3V, SDA GPIO21, SCL GPIO22. Select an ESP32 board entry, not the NodeMCU entry, even if the dupont colors are the same.
- Leave A4 and A5 for a future short export. Wiring this 150-frame file to an Uno and ignoring the size error does not produce a slower animation. It produces no upload.
150 frames against a 32 KB Uno
150 × 1024 = 153,600 bytes, about 150 KB before the Adafruit libraries. Uno flash is about 32 KB. The gap is the whole explanation of “sketch too big.” A classic Nano is in the same box. Lowering 147 ms changes nothing about that number. An ESP32 or a 4MB ESP8266 is the board this loop is for. A 512 KB ESP8266 profile will also fail once you add the core. If Tools still says 1MB with a large filesystem, the sketch region can come up short even though the chip is physically bigger. Give the sketch the space and shrink the filesystem, or move to the 4MB choice.
The page’s “at least 1MB” line is the minimum that can even see a 150 KB table. Treat
4MB as the setting you ship. If you must stay on Uno, sample a new clip in the maker
at a tiny frame count and export a different sketch. Do not hex-edit this
main.ino down to size.
Changing 147 without breaking the wrap
Only the comparison changes: millis() - lastMs >= 147. Keep the pointer
list and keep numFrames at 150. The line
frameIdx = (frameIdx + 1) % numFrames is what returns you to
frame0 after frame149. If you set numFrames to
149 you will never draw the last bitmap. If you set it to 151 you will read past the
table.
For filming, 200 ms gives a 30 second pass and makes each picture obvious. For a
busier desk piece, 100 ms gives 15 seconds and still fits a 100 kHz transfer, unlike
a 67 ms target. You do not need Wire.setClock to enjoy the stock 147 ms
loop. Add it only if you deliberately push the delay toward the 15 fps row and the
watch no longer matches the table.
A recording that shows one full pass
Plan on about 25 seconds of footage at the stock delay, a little more
than the 22.1 second cycle. Frame the 0.96" glass tightly, and keep lamps out of
the reflection. Start before a recognizable picture and stop after that same picture
has returned. That single return is the proof that all 150 indexes ran, not just
frame0 through frame10.
The take should be silent on the board’s side. Nazarome Chupale in this project is the visual. Pairing a speaker is a different build. A good panel recording has crisp white pixels, a black background, and no rolling shimmer. Shimmer that speeds up when you touch the dupont housing is a connector. A stable but “too dark” image can be a threshold you chose in a re-export. The published frames are already 1-bit. You do not retune them with the IDE.
Black screen, 0x3D, and the wrong board package
- Black screen: ESP VCC is 3.3V. GND is common. SDA and SCL match the table for the chip you selected, not the chip printed in the comment if you ignored it.
- Wrong address: one edit, from
0x3Cto0x3D, if Serial showsSSD1306 allocation failed. Scan only after both addresses fail. A scanner that finds nothing is a wiring fault. A scanner that finds 0x3C means the sketch is still calling the other address. - IDE mismatch: ESP8266 package versus ESP32 package. Uploading the wrong binary leaves the old firmware or a boot loop, and the OLED never starts. Also confirm the port. A leftover Uno port will not program a NodeMCU.
- Not enough flash: 150 KB of frames will not link on Uno. On ESP8266, avoid the small flash profiles. Folder name errors (
main) happen before the linker. Fix the folder first so you can see the real size message.
Four practical questions for this build
Does Nazarome Chupale on this OLED include the song audio?
No. main.ino is a 150-frame picture loop. The name is the song title. The display does not play the track.
The ZIP folder is not called main. Do I rename the file or the folder?
Rename the folder to main so it matches main.ino. That is the IDE rule for this repo. Then open the sketch from inside that folder.
I set the delay to 67 to match the Ganesha project and the speed barely changed. Why?
display() on a 100 kHz bus already costs on the order of 90 ms per full frame. A delay shorter than that cannot win. Use 147 or 100 if you want predictable timing, or call Wire.setClock(400000) after the bus starts and measure a 10 second pass before you trust 15 fps.
Which error means flash, and which error means the panel?
Sketch too big, or an ESP8266 segment that does not fit, is flash. Fix the board or the flash-size menu. SSD1306 allocation failed on Serial, with a sketch that did upload, is the panel: power, SDA/SCL, or 0x3C versus 0x3D. A board-menu mismatch often looks like the second problem because nothing runs.