MIST: the Multi-cube Interface over Serial Transmission



I received a RGB cube (link) from SeeedStudio and I have loved staring at it. It’s so mesmerizing. I even got one for my friend. We quickly realized that we wanted to tinker with the lighting scheme. Well, to do so, you would (will) have to remove the whole case to get to the USB. This made me sad, and hopefully with the help a few new friends, we can implement the MIST standard.


MIST is a standard that uses the hardware serial port to talk in a loop with one controller talking to the first cube. The first cube will then send the data to the next one, and so forth until it gets back to the controller. The controller would send out the next chunk of data to the cubes.

This breakout of controller/slaves means that you can be up and running quickly on a multi-cube setup. This also means that the controller can be anything from a standard Arduino to a computer, to a Xadow or Trinket module. The other thing that will be nice with this format, is we hope to have an area that showcases different programs, and to load the program, you just run the flat file through your controller. Very dynamic and with the price of storage, it makes it super easy to store hundreds of plans.

Hardware requirements

The only things that are needed are the Rainbowduino’s Rx and Tx pins cleverly exposed on the outside of the case. I am proposing to use the Grove 4 pin connectors for daisy chaining together, as this should also pass power. The end cube would have to have a Grove jumper to loop the serial line back to the controller.

Controller requirements

Just a serial out is all that is needed, and the encoded lighting patterns to match what the cubes are looking for. A screen or internet connection is not necessary, although it would make it easier to navigate through your library.

Code Standard

Here’s the proposed string to be sent over serial in the loop of Arduinos:

p1   p2     p3

P1: Part 1 addresses the cubes. Index of 99 affects all cubes, while 00 is the “I’m done, pass the message on” message. All other numbers decrement by one per cube. Only values of 01 are processed by the current cube.

P2: Part 2 is the XYZ of the axis of LEDs. The address starts at (0,0,0) for indexes. I will go over some customizations later to allow for calling patterns.

P3: Part 3 is just calling the color in RRRGGGBBB format. Put each value in the right place in your sting, and you’re good.

Customizations to allow for multi-LED calling

I know it’s going to be annoying to have multiple standards, but here’s the one that I’m going to propose for the 4x4x4 cube. I propose a library be loaded to convert the custom string to put adjust the LED values to their updated value.

Here is my proposed mapping for single axis decoding:

0: 1,0,0,0
1: 0,1,0,0
2: 0,0,1,0
3: 0,0,0,1
4: Unused at current time
5: 1,0,1,0
6: 0,1,0,1
7: 0,1,1,0
8: 1,0,0,1
9: 1,1,1,1

Where the values cross is where the LEDs are being adjusted. This also allows a value of 9,9,9 to clear or fill the whole cube with one command. A [99][999][000000000] signal would instantly black out all cubes.

Excel demo

I have included an Excel file that is interactive with these “shortcuts” to show you how they will look when sent to the cube. (Rainbow Cube Data Feed Tester) The left table is a decoding of the axis value to LED, the middle table is where you put in your values to try it out, and the right tables are the output. Only the cells that are lit up in red would be on. I am a visual person, so this was very helpful in helping me understand the power of this standard.

Future plans

  • I am going to try and do a proof of concept of daisy’ing multiple ‘duinos together to try out this concept
  • Work on the code and library to convert the 14 char string quickly into the format needed to update the LEDs
  • Build two different controllers, one Arduino, one LinkIt (and maybe a Xadow if you’re lucky)
  • Try to get Seeed to supply me with Grove female adapters to build into the cube to make it look nice
  • Convince Seeed to try out 10+ units with one controller

How to BI: Part 1


Once you go BI, you never go back.

I wrote a couple papers on how to do reporting at the enterprise level, and the issue I kept coming back to was the idea that BI or Business Intelligence should never be done in a silo. Anyone that does reporting should have an idea of how the whole set of data works before reporting on it. What does this entail? Let me show you.

Business Intelligence is the art of giving data a voice that is influential to the business’s operations. This influence could be to better customer satisfaction scores, decrease time on the phones, or provide insight into relevant add-ons that customers may be interested. There’s one thing in common: BI is used to help it make more money through higher sales or better public image.

This purpose to make sense of data and give it a voice can be expertly done by a few passionate people. I have found that the best BI people are the ones who are personally driven by it. Yes, you could do BI as just a job, but once it clicks for you, you’ll know that you’ve reached a new level of curiosity, a new level of analysis. The analysis is important to think about, but it’s equally important to keep in mind how the source of the data comes to be. When you understand how the data comes to be, then you can provide highly accurate, very informative and insightful reporting.

Let’s get an understanding on the different parts of data in BI: source, storage, and reporting.


The source of data is purely how the data is created. This can be through automated systems or manual work done my people. The more data you know, the better. Source data is usually the best in its most original form. This means there’s less potential for integrity issues.


The storage of the data is the most important part of BI. The data needs to be stored accurately. If this is not the case, the data is no good. Bad data is worse than no data, as it gives the impression that you have data to work on, and can lead to bad business decisions. Storage of data can be done in dozens of different formats ranging from a flat file in Excel to a multi-server array. They can all provide valuable data.


The reporting of the data is the sole reason that you’ve spent this much effort. Make sure you take the time to accurately and concisely return data. Reporting is an art by itself, so don’t be discouraged when you do it wrong. We all have, and most of us still do so. There’s no right way to display data, as how the data should be displayed is dependent on the data, the user, and the current business questions being asked of the data.

Now that we have an idea about the main parts of BI, let’s go over the mentality. At every step, it’s your job as a BI developer to return accurate data. At no point in your career will this ever not be acceptable. Your next job is to try and answer the data-driven questions of your users. If it cannot answer their questions, then maybe you need to reevaluate what data you need to collect and report on. The last thing to worry about is reporting interface. This means the speed, the colors, and the bells and whistles. These are nothing without a solid foundation, but they will greatly increase user acceptance.