Introduction: Raspberry Pi & Crestron: Dynamic Digital Poster V2.0
So i previously had built a movie poster for my living room as a fun project. It was a lot of fun, but the viewing angle of the 10" touchscreen i got from eBay wasn't that great, and the images were small (as its only 10" diagonally.)
I decided today i really wanted to get a better screen even though i cant put a full size tv up on the wall just yet. Once my fiancé and i move into a home, ill be building a TV into the wall and framing it to look like a proper poster that has been hung on the wall.
For now the 19" screen is AWESOME compared to the old screen.
1"x4" Wood (from a broken down pallet)
19" Computer Monitor
3" Sheetrock Screws
1' Extension Cable
Raspberry Pi 2
2A 5VDC Adapter
Micro USB Cable
HDMI to DVI Cable
Sticky Squares for Zipties
Fine Tip Screwdriver
Step 1: Build the Frame & Disassemble the Monitor Case
So I had grabbed some pallets from work and brought them home and broke them down a while ago, and measured the outside of the computer monitor after taking the monitor out of its case/plastic.
The dimensions of the monitor were 17"x11", so the wood pieces ended up being 17" & 12.5" I cut another piece in the center that will be used to actually mount the monitor into the frame. There are tabs on one side of the monitor that you will need to drill into the wood to create recesses for. I didn't get any good pictures but if you do this who knows if you will get the same monitor. This was just the easiest monitor I could get. In case you do want to get the exact monitor, its an Asus 191W. I still have to futz with the resolution because the 1440x900 is kinda messing with how the posters are displayed since they are 1440x900.
For mounting the wooden bracket i just pressed the frame against the table, and the screen against the table so it was flush, then pressed the bracket in so it was against the back of the vesa mount of the screen. Then i measured from the top of the wood to the center of the bracket piece drilled holes and like magic, it was mounted.
Step 2: Modify the Power Cable
THIS PART INVOLVES CUTTING AND MODIFYING POWER CABLES CARRYING 120VAC.
DO NOT DO THIS UNLESS YOU ARE COMFORTABLE WITH 120VAC, THIS IS NOT SOMETHING TO PLAY WITH.
PARTS NEEDED FOR THIS STEP
3 Butt Splices of the appropriate AWG
1 x 6ft C14 to Edison Male Cable
1 x 1ft Edison Female to Edison Male Cable
1 x 5v 2A Adapter
1 x USB A to USB Mini Cable
So v1 of the PiPoster did not have room for this in the shadowbox that contained the original setup.
Here is a basic set of instructions to build this franken-cable. You can add heatshrink as desired, but electrical tape will do just fine. This is basic stuff, if you have experience making cables, harnesses etc, make it as neat as you want and make sure you dont have any exposed conductors.
1. Cut the C14 end of 6ft IEC cable off approx. 1ft from the end of the cable.
2. Cut the Male Edison off of the 1ft Edison cable, leaving the Female end with all of the wire attached.
3. Strip the ends of the IEC cable you just cut so that you have the 3 conductors, Green, White and Black.
4. Take the piece that is Male Edison to Bare Wire, strip the conductors, and crimp one end of each of the butt splices on to the three wires.
5. Strip the 1ft Edison jumper, and the conductors.
6. Take the C14 to Bare Wire and strip the conductors.
7. Twist the 2 Greens and crimp the butt splice
7b. Twist the 2 Whites and crimp the butt splice
7c. Twist the 2 Blacks and crimp the butt splice
8. Use a multimeter and confirm you dont have any of the colors shorting to each other, and that each end of the cable has continuity.
IF YOU DONT UNDERSTAND ANY OF THESE STEPS DO NOT PROCEED. FIND SOMEONE THAT UNDERSTANDS WHAT IS GOING ON HERE BEFORE YOU ELECTROCUTE YOURSELF OR BURN YOUR HOUSE DOWN.
Step 3: Mount the Raspberry Pi 2 & Route Cables
1. Use some sticky squares and screw them in so they stay in place
2. Dress in the power cable we made previously along with the HDMI to DVI cable (or whatever you need for your monitor)
3. Mount the Pi.
I mounted the Raspberry Pi with some screws into some plexiglass i had laying around, and then dual locked it onto the back of the screen. It doesnt need to be super secure, its getting mounted on a wall. If this was going to be permanent i might have gone all out like i usually do, but in a few years this thing will just get taken apart like i mentioned previously.
4. Put a crap ton of electrical tape on the back of the screen so in case the raspberry pi makes contact with it its not conductive.
Step 4: Faceplate & Paint
I didnt take any pictures of the build during this part, so I apologize. But this part really depends on you and the screen you chose, and I am not the greatest wood worker, so if you need a tutorial on that, look elsewhere. I build a faceplate out of some 1/4" ply I had and cut out 2" strips, clamped and glued them to the frame in the right place, then cut off the excess where it overlapped the outside of the frame. I ended up just marking on the frame where the bezel ended and the screen began. I then used wood putty to fill in any imperfections on the front as well as some spaces and imperfections on the sides. If you used some decent wood to start this project with this may not concern you, but the pallet wood i used was rough cut type stuff so there were chips pulled off from shipping and me disassembling it.
All in all it looks decent enough. I wasnt too concerned with the wood working part being absolutely perfect. Once it was painted I grabbed 2 sawtooth picture hanging brackets and put those on the back and some nails into the drywall.
Step 5: Python Script
So the python script is pretty specific to my application. The python script starts a TCP server and waits for a connection. The commands its looking for are as follows:
screenOn: if the script receives this string the raspberry pi will turn on the HDMI output and display a random motion poster from the motion poster directory.
screenOff: if the script receives this string the raspberry pi will turn off the HDMI output
src-02: if the script receives this string, it will respond with posterPlease?\x0A\x0D. Once it send this string, it waits for a reply in the form of; a " 'Example Movie Title' 'Release Year' ". Once it receives this string, it will search IMDB, which returns a list of results. From there it searches for the most relevant movie using the search string and the trying to match the release year of each movie within the list of the results to the search string sent in response to posterPlease?\x0A\x0D
If a poster could not be downloaded, then no change will occur.
ELSE: if the script receives any other string, it will display a random poster from the movieposter directory
RPI_DigiPoster.py is the script that will interact with a crestron system or another automation system.
(i have an updated version, i just need to upload it as of 6/28/17)
If someone really wanted to you could use this script and modify it to connect directly to Kodi (where all the movie information is coming from anyways, and use this standalone from Crestron.) I have no desire/need to do this, as I have Crestron controlling Kodi, and I like the poster to turn off & on with the system. You would have to incorporate some sort of way for Kodi to send those commands, but i believe it is possible to make it standalone.
Garrett_RPI_DigiPoster.py is a stripped down version that will display random posters at 10 minute intervals.