Exploring the possibilities of Internet Of Things devices
At various points during the year, I’d be taking part in Internet of Things device programming and prototype testing. Internet of Things is a buzzword that’s been thrown about the engineering business for a while now. It basically involves the deployment and management of a multitude of low-energy, low data-throughput devices that will each contribute to a large set of data. Imagine you wanted to measure the temperatures in every building of the university campus, down to having a temperature value for each room and hallway within. With conventional thermometers this would be quite a huge task. What an IoT approach would allow you to do is purchase a large number of inexpensive digital thermometers that have been engineered to support some form of low energy wireless communication (there are a few standards that have been developed, and I got to work with a few of them. Basically, imagine a wireless network so toned-down that you can only use it to send a number every 10 minutes not to use up the bandwidth). These devices then can be spread out into every room you wanted to monitor and programmed to periodically measure and broadcast temperature data. This data can then, based on what standard was used, picked up by a base station and forwarded onto a web-based hub, where it can be monitored or analysed.
Some of the projects I’ve taken part in included using Bluetooth Low Energy or BLE, to detect nearby devices for monitoring the number of Bluetooth devices in an area, or to provide information to devices with Siemens apps, such as a pedestrian-crossing aid for the visually impaired, that would take the current state of the crossing nearby and display/vibrate in a certain pattern to let the user know when it’s safe to cross.
There are countless applications for technology related to the field of IoT, and it was indeed an interesting experience to get to experiment some of Siemens’ existing products to see how they could be improved or adapted for a different use with the addition of such technology. It also provided a good opportunity to use my C and C++ knowledge in practice, as most of these devices use some version of C for its simplicity and speed.
Challenges and things I learned:
Past the skills required to learn an entirely new field of programming and software engineering, it was really interesting to work around the limitations of these small devices. Not being able to send more than 12 bytes of data every 10 minutes really puts your knowledge of data types, data manipulation, and problem solving skills to the test.
While working on existing, shelved products, I often had to go through and analyse firmware and figure out how to integrate the requested features while maintaining the coding standard and sticking to the original design principles. This was especially challanging when the firmware in question hasn't been touched in almost 10 years, and most of the engineers who'd worked on it had already left the office.
Interfacing with hardware is something I hadn't done before as in game development, the vast majority of input/output is handled internally in commercial game-engines, and even while writing your own one, you can get away with using third party libraries for I/O. Well, thanks to my involvement with IoT, I know that there's nothing quite like the feeling you get when you successfully add a display-character to a proprietary 6-segment display using a novel, underdocumented bitmap format.