A few years ago, we already saw it was possible to transmit color signals over NTSC using an ESP8266 board with the signal received on a TV with an analog tuner. CNLohr had to connect an antenna to the I2S pin of his ESP8266 module, and disable WiFi.
But surely we should be able to do the same with ESP32, and potentially even better thanks to the two cores. That’s exactly what Bitluni successfully managed by connecting his LoLin32 board to the composite input of his TV with one handling the TV signal output (in grayscale) and the other core rendering 3D objects in real-time.
But any ESP32 board could be use instead. The hardware connection is very easy. We just need two wires, one connected to the GND pin and outer part of the RCA connector, and the other connected to GPIO 25 (DAC1) and the inner part of the RCA connector.
The software is more complicated, and basically some Arduino code leverages I2S to push data at high speed to the DAC which then converts the digital signal into analog signal fed to the TV. The 3D rendering engine is able to draw 2k triangles at CGA (320×200) resolution, and if I understand correctly, he was memory limited in what he could do, so maybe high resolution 3D rendering is possible on boards with external PSRAM (TBC). The theory and full details about the implementation can be found on Bitluni website. Watch the video below for a demo, and a quick explanation of how it all works.
Thanks to Karl for the tip.