Thangamaana is a Tamil song. Makers also look it up as Thangamaana Tamilan and தங்கமான தமிழன். This build plays that title as a 200-frame picture loop on a 0.96" SSD1306. The OLED shows the animation. It does not sing or play the track.
⬇ Free download — Thangamaana OLED code
Full main.ino with all PROGMEM frames · ZIP or git clone
Parts list
- Board: ESP32, or ESP8266 NodeMCU / Wemos with 4MB flash
- 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 the module requires it) | 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 the 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 ESP32 or ESP8266, set flash size to 4MB when that option exists, and pick the COM port
How the player works
Frames live in const uint8_t PROGMEM frameN[1024]. loop() steps the index every 149 ms:
void loop() {
static uint8_t frameIdx = 0;
static unsigned long lastMs = 0;
const uint8_t* frames[] = { frame0, frame1, /* ... */ frame199 };
const uint8_t numFrames = 200;
if (millis() - lastMs >= 149) {
lastMs = millis();
display.clearDisplay();
display.drawBitmap(0, 0, frames[frameIdx], 128, 64, SSD1306_WHITE);
display.display();
frameIdx = (frameIdx + 1) % numFrames;
}
}
Change 149 to speed the loop up or down. A smaller number is a higher frame rate
(example: 100 ≈ 10 fps).
Upload & run
- Open THANGAMAANA → 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 ESP32 or ESP8266, flash size 4MB, 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 Thangamaana main.ino from GitHub now.
Make your own Tamil 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: Nazarome Chupale OLED, Video to OLED, PROGMEM flash limits.
Troubleshooting
- Sketch too big — 200 KB of frames needs ESP32 or a 4MB ESP8266
- 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 149 ms delay if the panel cannot keep up
- No sound — this build is pictures of the Tamil song, not the audio
FAQ
Is Thangamaana a Tamil song?
Yes. The title is Thangamaana. People also search Thangamaana Tamilan and தங்கமான தமிழன். This page is the OLED animation of that title.
Is the code free?
Yes — github.com/itzmeAshish/THANGAMAANA.
Does it play the song audio?
No. This is a visual OLED animation. Add a speaker on its own circuit if you need the audio.
Build more OLED song animations
Import a clip, preview it on the OLED, and export Arduino code — free in the browser.
Open OLED Animation Maker →What the 200-frame Tamil sketch actually stores
itzmeAshish/THANGAMAANA
is the visual for the Tamil song Thangamaana. People also search the
same title as Thangamaana Tamilan and தங்கமான தமிழன்.
The sketch does not include the recording, a vocal track, or the words. It includes
frame0 through frame199: 200 PROGMEM bitmaps, 1024 bytes each,
drawn on a 128×64 SSD1306 at address 0x3C.
The file name is main.ino. After you download the ZIP, rename the folder
to main so it matches. The IDE will refuse or rewrite a sketch whose
folder is still THANGAMAANA or THANGAMAANA-main. This is the
same main rule as the other repos that ship main.ino, and it
is the first thing to fix before you decide the Tamil loop itself is broken.
setup() starts the panel and Serial at 115200. loop() waits
149 ms, clears, draws the current pointer with drawBitmap, calls
display(), and wraps the index with modulo 200. There is no second mode,
no brightness pot, and no “play once” flag. Power-up means the loop runs.
Timing table from the 149 ms player
200 × 149 ms = 29,800 ms, so one pass lasts about 29.8 seconds at roughly 6.7 fps. That pace sits between the very slow Kalayani step and the 15 fps Hindi loop. It is slow enough that a default 100 kHz I2C transfer (about 90 ms for 1024 bytes) usually completes inside the delay.
| Delay you type | Approx. fps | Time for 200 frames | Practical note |
|---|---|---|---|
| 200 ms | 5 | 40 s | Easier to film, still a full pass of every bitmap |
| 149 ms (stock) | ~6.7 | ~29.8 s | The number in the published loop |
| 100 ms | 10 | 20 s | Snappier; fine if the module keeps up |
| 67 ms | ~15 | ~13.4 s | Likely bus-limited unless you raise the I2C clock |
Two hundred frames is also the top of what the video importer on this site will keep from a clip. If you rebuild Thangamaana yourself, you are already at that ceiling. Shorten the source if you need headroom for libraries on a smaller ESP module. Do not expect a 201st array to appear.
ESP wiring for a sketch that only mentions Uno in a comment
The comment’s Uno map (SDA A4, SCL A5, 5V) documents the connector names. It is not a suggestion to use an Uno for 200 KB of frames. Wire the board you will actually flash.
- ESP32: SDA GPIO21, SCL GPIO22, VCC from 3.3V, GND to GND. This is the default I2C pair on the common DevKit. Do not move the wires to A4/A5 labels that are not on the board.
- ESP8266 NodeMCU: SDA D2 (GPIO4), SCL D1 (GPIO5), VCC from 3.3V. If
begin()fails on a fresh core, callWire.begin(4, 5)first. A 4MB flash setting in Tools is part of the wiring job, because the binary will not fit a small profile. - Modules with a regulator: many 0.96" boards tolerate 5V on Uno. On these ESP boards, stay on 3.3V anyway. The MCU pins are not 5V I2C pins.
200 KB, and the boards that can hold it
200 × 1024 = 204,800 bytes of bitmaps, about 200 KB, plus Adafruit GFX, SSD1306, and the core. A classic Uno’s entire flash is about 32 KB. The sketch is not “a bit large.” It is an order of magnitude past the chip. Classic Nano matches the Uno. A Mega 2560’s 256 KB flash is tight once the bootloader and libraries take their share, so this page does not treat Mega as the target. Use an ESP32 or an ESP8266 with 4MB flash.
On ESP8266 the failure mode is a linker error about the sketch not fitting, or a flash size that still reserves a big filesystem. Pick a 4MB option that leaves the sketch a megabyte or more. Uploading a build that used the wrong size can also boot-loop even after a “successful” looking transfer. If that happens, reselect the board, reselect 4MB, and upload again before you reseat the OLED.
Editing 149 when the loop feels rushed or sleepy
Change the literal in millis() - lastMs >= 149. Keep
numFrames at 200. The modulo wrap is the whole repeat. A larger delay
makes the Tamil visual linger. A smaller one plays the same 200 pictures in less than
half a minute. Neither edit adds frames you did not export, and neither edit adds sound.
If you drop below about 90 ms and the pass no longer matches the table, the panel is
spending the extra time inside display(). Wire.setClock(400000)
after the bus starts is the lever. If a single frame looks torn, the clock is too
aggressive for that module or the wires are long. Go back to the default clock and use
a 149 or 200 ms step. Torn frames are not a reason to reorder frame0
through frame199.
Recording a full half-minute of the panel
One honest take is about 35 seconds: a little longer than the 29.8 second stock pass. Fill the camera with the glass, kill reflections, and do not crop the phone video so hard that you slice off the last columns. You want to see motion through the whole window, then the opening picture again.
Silence is correct. Thangamaana on this OLED is pictures of the title’s animation, not the Tamil audio. If you play the song from a phone beside the module, the 6.7 fps loop will not lock to the track. Treat them as two performances. A good recording of the display shows stable contrast (lit pixels stay sharp, the background stays black) and a clean return to the first frame. Flicker once per loop, always on the same bitmap, means that array is a bad export. Flicker the whole time means power or the bus.
Failures that look like a bad display
- Black screen: 3.3V and GND first, then SDA/SCL. On NodeMCU, D1 and D2 are the pair people swap. The glass can be fine and still stay dark.
- Wrong address: Serial
SSD1306 allocation failedat 115200 means try0x3Dinbegin(). If 0x3C and 0x3D both fail, run a scanner later. Do not keep reinstalling Adafruit SSD1306. The library is rarely the missing part. - IDE board mismatch: “ESP32 Dev Module” uploaded to an ESP8266, or the reverse, writes a binary the chip cannot boot. The OLED stays black because
setup()never runs. Match the board menu to the module, then the COM port. - Not enough flash: 200 KB of frames plus the core will not link for Uno, and it will not link for an ESP8266 left on a 512 KB or cramped 1MB setting. Set 4MB. If you need this visual on a small AVR, export fewer than about 15 full frames and accept a different loop.
- Folder name: if the IDE says the sketch must live in a folder named
main, that message is exact. Rename the folder. It is not an OLED fault.
Bench questions for Thangamaana
Which song is on the OLED, and does it sing?
The title is the Tamil song Thangamaana, also looked up as Thangamaana Tamilan and தங்கமான தமிழன். The panel shows the 200-frame visual only. There is no audio in the sketch.
I downloaded THANGAMAANA and Arduino wants a different folder. What do I rename?
Rename the folder to main, because the file inside is main.ino. Open main.ino from that folder. Do not rename it to code.ino unless you rename the folder to code as well.
Will a slower delay make 200 frames fit on an Uno?
No. Delay changes time, not size. The bitmaps are about 200 KB. Uno flash is about 32 KB. Use an ESP32 or a 4MB ESP8266.
How long should I record to prove the whole loop?
About 35 seconds at the stock 149 ms step, so the 29.8 second pass can finish and the first frame can return. A short clip only shows the opening bitmaps.