My original vision for this project was to have the pictures get pulled down from Google Photos as they are displayed, and have the slideshow randomly display any picture from my Google Photos account. Unfortunately, the API for google photos only allows for uploading or editing details of already uploaded pictures. There is no API support for downloading or viewing pictures from Google Photos. Instead I put a huge SD card in my Raspberry PI and downloaded all my albums from Google Photos to display on frame. They will need to be manually updated as I take more pictures
The slideshow running on the Raspberry PI uses PyGame to manipulate and display the photos. The python "exifread " library is used to pull the embedded orientation data from the photos. That info is combined with the pixel width vs height to automatically rotate all vertical (and flipped) photos to horizontal, then the screen is physically rotated to make vertical photos be vertical again.
As I mentioned in the video, the Raspberry PI sends commands to an Arduino to rotate the screen. I didn't try having the Raspberry PI generate the STEP, DIR and ENABLE signals and have it control the A4988 directly. I had the Arduino and Stepper driver available, so that's what I used. The Arduino code is pretty simple. It just waits for a specific character over the serial port, then rotates the screen when it is received. There isn't any position sensing, so the Arduino expects to be started with the screen horizontal and then I just counts steps.
Initially I found motion to be quite noisy. The open frame design radiates sound quite well, so I reprinted the stepper motor mount and pinion gear out of flexible filament. That drastically reduced the amount of sound you hear from the stepper motor. You can see in the video to blue plastic parts are the flexible ones.
You can also see a couple of large hex nuts stuck to the back of one of the speakers in the video. They are there on purpose to balance the display. It is balanced enough that the motor can be turned off with the screen in either orientation and it won't move. This is convenient because otherwise the motor would get quite warm after a while. You can find a line in the python code that will send an "F" to the Arduino. The disables the motor driver. This occurs any time a horizontal picture is to be displayed on the screen and the previous picture was also horizontal.
If you couldn't get enough of that rotating goodness, here is a 6 minute video of FlipFrame displaying some of my favorite photos. The displayed photos were all take by me.