Here’s a recent project for a customer that had some unique requirements. It’s for a public brand marketing kiosk type of device. But its much larger than that. In fact, the presentation has one audio output (music) and two unique video feeds. One a large tv flatscreen (with audio) and the other a simple display monitor. We wanted to give the customer a way to update the audio and video presentations.

  • Keep it simple
  • Make it reasonably secure
  • Make it reliable (Power On/Off?)

And here is the solution we came up with.

  1. We’re going to use an Intel Nuc solidstate computer to host a node.js Express server.
  2. The Node Express server API will allow for the upload and management of audio visual files.
  3. The server will play movies on dedicated url.
  4. The server will also play and manage music.We’re using https://github.com/victordibia/soundplayer, a javascript wrapper around a simple MPG123 music player program, that is available for any operating system.
  5. The interface to the server is a simple browser with a local IP address. The system includes a wifi router, but is not connected to the internet.
  6. I used the PureCSS library for the user interface

And so on…

Here’s a screen shot of the raspberry pi admin interface…

One specific issue we wanted to address was the use of Raspberry Pi devices with simple power on / off functionality. We have an approach for that. We programmed each Raspberry Pi to play a movie given as URL address, and repeat. To harden things for power off (never clever for normal Raspberry Pi use) we converted the flash drive system to read-only. Program it once, and run it forever. We’ve also provided an interface to manage the content going to each Raspberry Pi.

Here’s the recipe for the Raspberry Pi build… its pretty big, so you can download the file here… We’re using omxplayer to play the video files. Note, the info for hardening the flash drive came from https://www.raspberrypi.org/blog/adafruits-read-only/ Check the recipe file above for details…

There were a couple of pleasant surprises on this project. At one point I was getting stuck with NodeJS troubles. Not sure what happened, but I was totally unable to get the chrome browser debugger to work with my application. I ended up trying VS Code tool, something I’ve seen before but had never used. Wow. No really, wow. That tool made a whole lot of difficult tasks way easy. Many thanks, Microsoft.

The other surprise I had was related to my need for a wireless keyboard. I found this puppy from the folks at Logitech. It’s a $20 wireless keyboard / touchpad combo. I think its originally designed for sitting on the couch and surfing the web on your TV with this thing on your lap. This keyboard works seamlessly, and works quite well. I’ll use it now for every iot project. The mouse in the photo was a $10 addition, and because it too was from Logitech, one USB mini-dongle worked for both input devices.