Controlling Arduino via smartphone: a few lines of XML and no app to write

I am new to the Arduino community and have only done two simple projects so far using an Arduino Uno. I really like the way Arduino makes electronics so easy and opens it up to a wide range of people with varying abilities.

One thing I have been looking for is a way of making really stunning graphical user interfaces for my future Arduino projects. At this point I must confess that I work for a small IoT (Internet of Things) start-up that has some pretty interesting technologies. About 3 months ago I convinced the powers that be, to turn some of this high tech in to a Shield. And 2 months later we had the first prototype boards ready for alpha testing.

Here is a picture of how the project began. The board on the top left is an NFC development board we bought. The other 2 boards are in house boards we made for various other projects.

We wired together the parts of each board that we needed to get the features we were looking for. Here is a list of the main functions we came up with for the shield:

  • Near Field Communications or NFC for short. This is the same technology behind wireless payments and is also known as PayWave and PayPass. NFC is a feature on many smartphones.
  • Personal Area Networking or PAN for short using the 802.15.4 MAC layer communications protocol. This kind of PAN provides much greater range than Bluetooth.
  • A hashing chip for participating in secure operations such as over-the-air firmware upgrades.
  • An STM32F103R8 ARM Cortex M3 32-bit microcontroller.
  • 256 KB of external FLASH memory.
  • File system for storing data and other files.

After working with this mess for around 2-3 weeks we had enough of the firmware and hardware verification done to move on to designing a custom board for the shield. Here is a picture of the very first shield board in its unloaded state.

And not long after this we had a fully loaded and working shield. Here it is stacked on a Uno.

So currently we are writing a library for the shield that will make it really easy to use. Here is the first demo project we made with it.

In this demo the shield is stacked on an off the shelf motor control shield which connects to a small DC motor which drives some plastic gears we made on a 3D printer.

I made a video of it working which is on YouTube. Hope you like it.

It would be really good if you had some feedback on what you like or don’t like and any new functionality that we could add to make it even better. We are about to move to the beta phase so it’s not too late for a new feature or two to be added.

Since a lot of "displays" that people are using now (phones, tablets, desktops) are much more "powerful" than the microcontrollers people are trying to connect to them, I'm wondering if anyone has been thinking about defining a new "smart terminal" protocol that would move processing and memory requirements AWAY from the microcontroller. graphics is swell, but an Arduino doesn't have the memory. I'd rather tell the display "here's a sprite that's moving at such a speed/acceleration; let me know if and where it collides with a user's finger on the touchscreen."

You are right the phone is the best place to do all the graphics processing. This is just how we have done it with our shield. If you are familiar with the Model View Controller (MVC) design pattern, the Arduino implements the model i.e. it accepts commands from the view and sends responses. Whereas the phone implements the view and controllers.

So if you watched the video I posted, when the user touched the on/off switch on the phone, the view simply sent the on/off command to the Arduino via the shield. The Arduino then toggled the appropriate hardware pin to action the command and then responded with a signal containing the updated state back to the phone.

PHONE -> [p;/on?1] -> ARDUINO -> set HW pin to turn on -> [s;/on?1] -> PHONE -> update the switch position on screen