Hardware, Firmware, and Software - The Three Bears of the Internet of Things
Internet of Things is a relatively new buzzword given to an embedded device that communicates over the internet. Sending sensor information to the internet, and receiving commands for actuators from the internet.
An Internet of Things systems has two parts: the hardware device containing various sensors and actuators that communicates with the cloud, and the server software that provides data transport and human machine interfacing. The Internet of Things requires the combination of three disciplines: hardware engineering, firmware engineering, and software engineering.
A Internet of Things device is a combination of hardware and firmware. Modern microcontrollers and off the shelf communication modules have made the hardware design much simpler ( Custom Software Development - Connecting your Product to the Cloud with Embedded Ethernet ). In addition, the hardware engineer has to design the devices power supply and sensor/actuator interface circuitry.
Firmware is software that executes within an embedded system. The firmware engineer develops the software that executes within the microcontroller in the Internet of Things device. Most modern firmware is written in C or C++. The resources (RAM and Flash) in a micrcontroller are extremely limited. A large part of firmware engineering is getting all the required functionality working using as little resources as possible. As mentioned in the blog link above, Internet of Things firmware development has been made much simpler with the introduction of silicon vender provided communication libraries. The firmware engineer designs the software and algorithms to read and interpret the sensor data and send it to the internet. On the flip side, the same software receives commands from the internet and translates them to actuator movements. The result is a Internet of Things device that can not only sense its environment, but change it.
Finally, the software engineer develops the server side software responsible for communicating with the Internet of Things device. Software engineers work with languages like: C#, Java, PHP, HTML, SQL. Every time the device wants to communicate it connects to a server over the internet. The server software collects the sensor data from the device and sends actuator commands to the device. In most cases, the software adds the sensor data from the device into some type of database. The software engineer is also responsible for the human interface, commonly done using web pages. The human interface provides a system for users to access data in the database and setup commands to be sent to the device.
Designing an Internet of Things systems is a unique endeavor requiring experience in hardware, firmware, and software engineering. If you are interested in developing a connected product or if you already have a product you would like to connect to the internet, contact me at Tecnova. We have hardware, firmware, and software engineers combined with manufacturing; all under one roof.