So, previously I’ve written about our mobile strategy. That is, how we’ve leveraged cross-platform C++ to build a foundation for mobile platforms and minimize the work we need to do to bring customer apps to new devices.
As we build commercial applications on this strategy, it has resulted in a number of happy coincidences, most recently being how easy it’s been to place our foundation on a device like the Raspberry Pi.
For those who don’t know, the Raspberry Pi was designed to be more of a teaching device, but due to its extremely low cost has become popular as a platform for embedded systems. Embedded systems are typically fixed purpose, and don’t look like your typical computer, but can interact with the Internet in ways that a computer might.
Unlike classic embedded platforms such as Arduino, the Raspberry Pi has enough memory and processing power to run a fully featured Linux operating system, not unlike any modern Android device. In fact, all popular modern mobile platforms (once Blackberry 10 ships) provide Unix-like operating systems, which is the foundation of our cross-platform mobile strategy.
This means not only that we have all the facilities we need to connect to the Internet, and communicate with a server, but we have access to the wealth of libraries available to Unix-like operating systems. Our proprietary foundation technology currently leverages several of these libraries – like access to a local embedded database (SQLite) for offline operation, and an SSL capable HTTP library (CURL) for talking securely to servers.
So my first stretch beyond classic mobile development has been getting our foundation technology compiling on Raspberry Pi, which was pretty simple once I worked out my compiler requirements.
My first personal project on this platform is a weather station that logs data using JSON to a Ruby on Rails based server.
For this project, I’m using two components from Adafruit Technologies – the BMP085 Barometric Pressure sensor and the DHT22 Temperature and Humidity sensor. These interface digitally to the Raspberry Pi’s GPIO (General Purpose I/O) ports. The BMP085 is a bit more reliable using its I2C interface, but both sensors read well using code graciously provided by Adafruit.
Stay tuned for part 2, where I’ll discuss wiring the C based sensor code into our foundation framework, and transmitting the results to a simple Rails server hosted on Heroku.