ESP-12F Persistence of vision video brainstorming.

Daren Schwenke wrote 04/14/2019 at 08:14 1 point

I have the desire to be able to do POV *video*, using an ESP-12F, and some Dotstar modules.

Here is an example of a static image POV display:

I have some thoughts on how it could work.

My target POV platform is a 0.5m string of 144/m Dotstar modules.  Two equal length arms flinging around, but the arms are offset by 1/2 a module spacing to double the resolution.  Rotate the arms at 3600rpm. 

That works out @Frank Buss  to give me a polar coordinate display with 1 degree resolution, 288 pixels 'around', and 60Hz refresh rate.  That is *well* within the update rate I have for the Dotstar modules, and still small enough to be visible during daylight.  It won't be blazing, but it will be visible.

Give me an infinite amount of ram, and that is it.  Done.  I don't have an infinite amount of ram on the ESP-12F.  I'm going to have to move the data to it, from somewhere.  I will need to store, or stream, the video I intend to push to the POV display.

I'm *really* not confident I could stream the required data over wifi to SPI at sufficient speed, or at least with sufficient reliability/latency to be practical.

So I'm looking for other ideas.

I would like to store/send the data uncompressed, as a directly usable bitstream capable of being sent out SPI, as lines/frames.  Each line of data forms one polar coordinate system 'line' of resolution, and new frames start at degree 0.  I've actually done this part before for another project, but there I *did* have a virtually unlimited amount of ram as I used wires to drive my SPI.  Unfortunately that interface of bending wires had a lifespan of about 30 minutes before it ate itself.  I need something a little more robust here.  

I have never tried slip rings, nor do I really want to trust them for high data rate transmission at high rpm.

The ESP-12F, Dotstars, (and whatever else) will be rotating here.  I can give them reliable power.  The data will ultimately have to come from wifi, but it doesn't actually have to be real-time data.  I could just trigger playback of specific streams which I could store locally.

I could upload the data to a local storage medium, such as an SD card, and stream it out from there.  I'm not sure I actually have the bandwidth to do so on a single SPI bus though.

My initial thought was... how about abusing SPI to directly provide the data for me...

Hook up an SD card to run via SPI, and wire the Dotstars directly to the return SPI bus.  Initiate a transfer from the SD card to the ESP32, and then do absolutely nothing with it other than precisely controlling the clock rate to produce the required lines/frames.  

Having the data coming directly from the SD card would require it to be already formatted as a stream I could send directly to the Dotstar chain.  But if it was, and it was fast enough, then just controlling the clock of the transfer as I need it to could provide the entire data stream.

Or... if you have a project/idea in mind that does something similar, using two SPI data sources, at speeds sufficient to allow what I'm trying to do here...  I'm all ears.

Thank you.