Just a brief update.
Progress has been good on the tiny version. The second prototype PCB works without too many alterations.
I had to port the code to a bigger microcontroller, the little Cortex-M0 ARM chip with USB port might not be ready to ship in time, so we are now running on a Cortex-M3, the bigger brother.
Battery life and battery management has gotten a lot of attention as well. In order to conserve as much power as possible, various parts of the device is powered down when not strictly needed. The LED drivers of course, the WiFi section, the sensors,etc. The goal is to consume as little power as possible in standby mode. The microcontroller is always on. That is, when the device is powered down, a single pin on the microcontroller is alive, barely. The rest of the device is powered down or in a deep sleep state. That single pin is connected to the power on button. When you press it, the device wakes up and is ready almost instantly.
WiFi takes a lot of work. In order to communicate WiFi devices have to be on the same network. There are basically two ways to do this. The old way is “infrastructure mode” where one device sets up a WiFi access point. That would typically be the internet router in your house. All other devices connects to this access point and you are in business. There is also “ad hoc mode” a way for devices to set up a direct connection between them. Very useful for short lived connections and perfect for our purpose.
But not all devices supports direct WiFi connections. Notably, the iPhone/iPad does not allow an automated connection to a third party device. So we have to do some of the heavy lifting on our end. When the device starts, it sets up its own WiFi access point called “RiftNet”. If there are more than one light in range they will manage the connection between them automatically. You connect the phone to RiftNet via Settings on the iPhone/iPad, and then you can control all the lights remotely from the app. Maybe not a super elegant solution, but that is the way we have to do it if we want to support iOS. If that changes in the future, we might be able to add support via a firmware update.