ESP8266 Transmits Television On Channel 3

We’ve seen a lot of ESP8266 projects in the past, but this one most definitely qualifies as a hack. [Cnlohr] noticed that the ESP8266, when overclocked, could operate the I2S port at around 80MHz and still not lose DMA data. He worked out how to create bit patterns that generate RF around 60MHz. Why is that interesting? Analog TVs can receive signals around that frequency on channel 3.

As you can see in the video below, the output is monochrome only and is a little snowy. It also will lose frames on some WiFi events, but this is all forgivable when you consider this very inexpensive module isn’t meant to do video output at all.

You’ll see in the video that the overclocked ESP8266 is quite capable. It draws text, 2D shapes, and even multiple 3D shapes. Oh, it also is serving out a web page at the same time. If you want to try it yourself, just solder a wire to the RX pin on the device and load up the code from GitHub.

This isn’t the first time (or even the second time) we’ve seen [Cnlohr]. His YouTube channel has everything from using WebSockets on the ESP8266 to a minuscule Minecraft server. Definitely worth a look.

Thanks to [Rodrigo Pereira], [Tobias], and [Lucas] for the tip!

57 thoughts on “ESP8266 Transmits Television On Channel 3

    1. cnlohr! Off topic but I have always wanted to thank you for all of the hard work you did while working on Stepmania, your website and later your YouTube channel was the source of inspiration for me and of course you were responsible for the many many hours of fun I had playing Stepmania, which I still do to this day. Thanks again!

  1. Ok, well, that’s crazy! Is it essentially just on-off keying a 60MHz RF signal to do something good enough for the TV to comprehend as a picture? Nice! Mmmmmight be possible to, maybe, add a colour burst and do a bit of colour, if he can bump the pixels out fast enough to emulate a bit of phase delay. But even that would just be icing on the cake. Very clever, pumping out RF video, native, is certainly something I’ve never heard of a computer doing before.

    Wonder what he could do with the new, 8266 replacements due pretty soon? The ones with 160MHz and dual cores.

    1. Given that he’s just streaming bits at the 160MHz clock rate he specified, color should “just” be a matter of figuring out how to make data at the right frequency.

      Right now he seems to be emitting 32 bits per pixel, for an aggregate modulated dot clock of 5MHz. Too bad the NTSC colorburst frequency doesn’t divide nicely…

      1. Er, replace 160MHz with 80MHz and 32 bits per pixel with 16 bits per pixel.

        He seems to be relying on the 3x overtone (60MHz from a messy 20MHz modulator) to get the desired signal to appear at 60MHz.

        1. After looking at it more, I think it is the x3 overtone. I tried stippling it to do an x2 overtone, but it just didn’t work… AT ALL, and I have no idea why. I’m currently looking at a way using some bookkeeping to get the chroma signal. I think it’s possible to (without transmission) emit color NTSC. Still, not sure.

          1. Are you sending a colour burst at the right time? Pretty sure NTSC (and PAL) needs that, for the colour decoder to sync to, or else it gives up on colour, for that line at least. It’s a way of having compatibility with B&W transmissions.

            The Uzebox (or one of Andre’s little MCU consoles), and I think the Apple ][, had 2 options for colour burst. One gave one set of colours, the other gave colours from the opposite direction in the NTSC spectrum.

  2. So for $2 I can turn my old analogue TVs into a WiFi console, nice work! Not sure I can justify using them due to power consumption issues but if I needed a remote console in a hurry this is definitely the way to go.

    1. I once made an AM transmitter using a bit of wire on an I/O port of an 8MHz 8bit microcontroller. Tuning in was easy, it could be received across the whole AM band (and probably a lot more…)

    2. Or just use some coax between the module and the TV. Even then it seems like overkill as there is no amplification of the signal and it is a direct connection. But if you have a design for how an ESP module could inject a (better, full color?) signal deeper and more directly into an analogue TV I’d like to hear about it!

    3. Im a HAM too, and did some funny stuff with “5V TTL Outputs on a random piece of wire transmitting RF” too…
      Its such a low amount of radiated Power from that unmatched, way to short piece of wire which acts up like its an antenna, that ,asumed his direct neighbour where a HAM, he would only be anoyed if he point his tuned directional antenna directly onto it…
      Say of more than 100ft and the signal just vanished…

  3. That’s an impressive hack! I totally forgot that a lot of I2S engines are semi-automatic, and the high speed clock sweetens the deal. Next hack would be to make a delta sigma audio DAC by feeding the buffer with precooked decimated patterns from a LUT.

  4. this is really, really awesome.

    i made a composite ntsc video generator a few years back, was a pretty fun/intense exercise in setting up all of the timers (and processor speed!) to generate the waveform, and dma the contents of the framebuffer out the SPI port. project is here (if you care):

    this is way more awesome, though. too bad atsc is so complicated, would love to see a cheap embedded atsc xmitter

  5. CNLohr, you’re some kind of ESP god, or something! This is amazing.
    I’ve used your library to generate Ws2812 data for my LED hat project hosted on, that too uses the I2S peripheral to generate the signals.
    Really impressive. I’m already thinking this could be another way to do drone FPV video overlaying of telemetry (OSD), but im cursing the standards overlords for having NTSC in the rest of the world, and PAL in Europe, where I am.

    If you’re reading these comments – Ive been trying to think of the feasibility of creating an ESP based walkie-talkie, between two identical devices armed with ESPs? Something that operates only with a PTT button, no complex setup save for the SSID and password. It’s for operation around a single site, like a place of work. Basically would sample a limited length piece of audio, transmit it and is immediately played back on the receiving device – bi-directional.
    Is this really possible?


    1. (1) Funny, everyone else seems to like PAL. But, unfortunately neither of them are very friendly to the clock rates used in most modern devices.

      (2) PTT. I’ve wanted to use the I2S for bidirectional audio, since it SHOULD be able to do it. Just never gave it a shot. Should be able to work pretty well, especially considering ESP’s have their freedom system. You could just fling voice packets around everywhere!

          1. Basically you end up with a portable hand held WiFI linked VOIP handset with a range of 100 meters, for a total cost of under $10. Not bad if you can get it working well enough.

    1. I doubt this is something anyone would use for any practical purpose, or even for a quick cheap hack. Pure proof of concept. Still nice though, to see it work in the real world, from what I guess started off as a vague “what would happen…?”. To see the various bits of physics and mathematics come together from two different directions, a CPU clock and a radio frequency. Multiply that by a video standard that was invented some time around the 1930s, and it clicks together nicely!

      Since CPU clocks started getting into the high RF, I’ve often been curious about things like this. It’s a natural growth of the chaps in the 1960s, tuning AM radios into the leaked radiation of their IBM big iron, deliberately writing loops to run at different speeds to play little tunes. This is much tighter than that.

    1. Brilliant, he won the Internet again, and if you look carefully right at the end of the video you can see he has mastered the technique to a Jedi level and no longer needs the ESP to change the colour on the screen.

Leave a Reply

Please be kind and respectful to help make the comments section excellent. (Comment Policy)

This site uses Akismet to reduce spam. Learn how your comment data is processed.