SMS ➡️ web ➡️ Raspberry Pi ➡️ LEDs = fun for everyone. 🚥
JavaScript CSS Python
Switch branches/tags
Nothing to show
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
.meteor
client
packages
public
raspberry-pi
.gitignore
LICENSE
README.md
colors.js
lumiere.css
lumiere.html
lumiere.js
packages.json
requirements.txt
smart.json
smart.lock

README.md

DO NOT USE. This project has been broken into multiple projects and moved to the github.com/lumiere-lighting org.

Lumière

SMS ➡️ web ➡️ Raspberry Pi ➡️ LEDs = fun for everyone. 🚥

The basics

Lumière is an experiment (read as it might break) in holiday lighting and community engagement. Lumière invites anyone to change the colors of our external, holiday lights either through a website or with SMS/texting.

There are over 1,500 color words and sets. Color words are a combination of Chroma.js, Name that Color, and some custom ones. Feel free to suggest some more.

Web example at lumiere.meteor.com. Watch a video of an example deployment.

Inspiration taken from textmas.

Architecture

  1. Server
    • A Meteor application is run that keeps track of what color(s) the lights should be.
    • Provides a web interface for choosing colors and basic representation of current colors.
    • Accepts input via SMS.
  2. Nodes
    • Each individual node checks to see what color the lights should be and changes them accordingly.
    • Each node is an internet-enable Raspberry Pi with a string of programmable LED lights connected to it.

The "easiest" way to get up and running would be to just make another node that hooks up to the default lumiere.meteor.com and syncs colors with others. This involves obtaining hardware ($$) and installing some software on the Raspberry Pi.

Deploying a node

A node by default will listen to the deployed lumiere.meteor.com and therefore all the nodes connected to it will be the same color. See below for deploying a server if you want to manage colors independently.

Get a Raspberry Pi

A Raspberry Pi is a small computer. Adafruit is a good place to purchase one. Set it up and make sure it can connect to the internet and you have command line access to it. Depending on where you want your lights, you may want to look into setting up wireless network access for the Raspberry Pi.

Hook up lights

I used a 5 meter length of RGB LED strip (the LPD8806 model) to do this project, but you could do other things if you wanted to change the code for the Raspberry Pi a bit. Also note that my hardware skills are not very good, so how to hook things up could probably be improved.

In short, I used this diagram (from adafruit) to hook up the lights to the Raspberry Pi and share the power between the two.

Raspberry Pi to LDP8806 diagram

Details

The following parts are involved, but surely these can be interchanged with your preferred parts.

  • 5 meter length of RGB LED strip (the LPD8806 model). If you get 5 meters of these LEDs they come with the JST input and output connected, otherwise, you may have to solder wires to the end in order to connect to the Raspberry Pi. Also, people have reported that the input and output may not be what you expect so double check which end you connect to.
    • It is very important that you read this tutorial to know the intricacies of this LED strip.
  • 4 pin JST SM plug used to connect the LED strip to other wires. If you have a LED strip with a JST end, this will make it easy to disconnect things.
  • 5V 10A power supply. The above LED strip can only handle 5V so don't use more.
  • Female DC power adaptor used to connect the LED strip and Raspberry Pi to the power supply. For those of us that don't know about these things that well, the - should be connected to ground and + to the 5V power.
  • Some prototyping wires.
  • 4 wire caps to connect the JST strand wires to the prototype wires which are solid wires.
  • 2 snap action wire blocks to split the power.
  • Cobbler breakout this is used to connect the Raspberry Pi GPIO to the breadboard. Note that the ribbon cable came connected but not in a way that was intuitive to me and I ended up breaking things, so double check that the breakout board is aligned correctly with the GPIO diagram.
  • Breadboard.

There is a good example of you might hook up the light efficiently at this tutorial.

Here is an image of my near final configuration:

Near-final project

Install software

(coming soon) Download this Raspberry Pi image, burn it to a SD card and insert into your Raspberry Pi.

Install python code

This script needs to be run as a user that has root priviledges as it needs access to the GPIO pins. The default pi user will work fine.

  1. Enable SPI.
    • sudo raspi-config
    • Go to Advanced options and enable SPI.
  2. Install python dev tools. Reference.
    1. sudo apt-get install python-dev
    2. curl -O http://python-distribute.org/distribute_setup.py
    3. sudo python distribute_setup.py
    4. curl -O https://raw.github.com/pypa/pip/master/contrib/get-pip.py
    5. sudo python get-pip.py
  3. Get code: git clone https://github.com/zzolo/lumiere.git && cd lumiere
  4. Install Python packages: sudo pip install -r requirements.txt
  5. Run manually with python raspberry-pi/lumiere.py

Auto start (optional)

This adds an Upstart script so that the light script is run automatically on start up and restarts if something goes wrong.

  1. Install Upstart: sudo apt-get install upstart
  2. Link the Upstart script in to init: sudo cp /home/pi/lumiere/raspberry-pi/lumiere.upstart /etc/init/lumiere.conf && sudo chmod +x /etc/init/lumiere.conf
  3. Restart the Pi: sudo shutdown -r now
    • It should start automatically, but you can control the process manually with: sudo service lumiere start|restart|status|stop

Auto turn off (optional)

If you want to turn off the Raspberry Pi at a specific time, add the following line to cron. Note that this will not actually turn off the lights or stop power going to the Raspberry Pi, but simply shuts it down so that power can be disconnected. I am using this with an outlet timer that turns off a bit after the cron shutdown runs.

  1. This adds a line to the crontab to shutodwn at 2:45 AM: (sudo crontab -l ; echo "45 2 * * * shutdown -h now") | sudo crontab -
    • If you don't have a crontab for root yet, then you will get a message like no crontab for root which is fine.

Deploying a new server

Though these instructions are detailed, the code has not been abstracted to where configuration lives outside the code, so deploying means changing (just a few) values in code.

Set up SMS phone number

These instructions are for using Twilio, but it would not be too hard to change things around for another SMS service.

  1. Create an account at Twilio.
  2. Obtain a phone number or use an existing one if you already have one set up.
  3. Under the settings for that phone number, set the Messaging POST value to http://<YOUR_APP_NAME>.meteor.com/incoming.
  4. There is no real set up for the web application part, but the application displays the phone number so you may want to update that.

Create web server

The application is a Meteor application, and to note, my first Meteor application.

  1. Install Meteor: curl https://install.meteor.com | /bin/sh
  2. (for development) Install Meteorite: npm install -g meteorite
  3. Run locally: meteor
  4. Deploy to Meteor.com: meteor deploy <YOUR_APP_NAME>.meteor.com

Create a node

See above for deploying a node. You will just have to change the URL so that it points at your new server, <YOUR_APP_NAME>.meteor.com.