Application Development for Embedded Systems
Embedded systems are growing smarter and intelligent across embedded domains. Thanks to the remarkable advancements in the field of electronics, especially wireless communication technologies, SoCs, Microcontrollers, FPGAs, networking techniques and cognitive computing among others that support ultra-fast communication and data exchange. The trend is spanning across the embedded landscape including automotive, industrial automation, semiconductor, consumer electronics, avionics, energy, and healthcare domains.
While we talk about the explosive growth of embedded systems, we cannot ignore one significant factor that is fostering these advancements – Embedded Apps. Needless to say, embedded apps, with their advanced features, intuitive and user-friendly nature are becoming key to any technological innovation in the modern era.
We live in an era of no ‘NO’ to Apps. Apps impact our day-to-day lives in one form or the other, more often through the smart gadgets we use. From the days when Apps displayed a myriad of data in a single window, Apps have evolved to presenting only the specific content or data the user needs. For instance, if we consider the data generated by an embedded system as a thousand-page book, modern-day apps help users by extracting that one paragraph which is relevant to the user, rather than showing the whole book.
This blog aims at providing an insight into various types of embedded Apps and tools essential to developing an intuitive and user-friendly application.
Apps in Embedded Systems
IoT and Cloud Application
IoT is disrupting several market segments, be it Industrial, logistics and supply chain, automotive, medical, smart cities and security among others. Connected fitness trackers, smart speakers, and IoT enabled building automation are already a common talk in the market. Four key factors call for a developer’s attention when we talk about IoT App – The IoT device by itself, the data ingestion layer, analytics and finally the end-user. The data generated by the IoT devices are transmitted over a wireless or wired interface, processed and analysed before being displayed at the user end. The data is presented in an easy to understand format, enabling the user to monitor, control and analyse the data and generate reports using an intuitively designed interface, which we call an IOT App or Cloud App based on the use case.
An IoT app developer has to pay in-depth attention to various critical factors such as cross-device compatibility, interoperability, cloud integration, connectivity, scalability, data security, privacy and various standards & regulations. The developer should have expertise on a range of tools and techniques to develop reliable and robust IoT / Cloud Applications. Some of the tools are,
- IoT Analytics, cloud storage, web services using AWS / Google or other similar platforms
- Communication technologies such as Cloud Connectivity, WiFi, WiMax, LTE, 6LowPAN, WirelessHART, ANT, ZigBee, BLE, NFC and RFID
- Knowledge on communication protocols such as MQTT, CoAP, XMPP, DDS, STOMP, AMQP, REST, LWM2M, Websocket
- Microservices and containerization
Web/PC applications offer an intuitive interface for users to communicate with embedded systems. Web/PC applications are advantageous in managing devices deployed in remote locations. These applications communicate with the embedded device hardware over a low-level software code written typically in C. An HTTP request over the webserver carried out through the high-level program and the low-level coding communicates with the Hardware to trigger the command.
As a developer one should have expertise on following tools and techniques to develop a robust Web/PC Application.
- C, C++, BOOST, RabitMQ, ZMQ, Flat/Protocol Buffer for creating High performance, multi-threaded, Distributed Applications
- HTML / CSS / CGI / python, PHP, GOLANG for optimizing Web pages / services for embedded low latency/footprint
- HTML5, CSS 3, Sass, Bootstrap, Foundation, AngularJS, ReactJS, VueJS, NodeJS, Django, Flask, Laravel, Java for developing Enterprise Web applications
- IoT Analytics, cloud storage, microservices using AWS / Google
- Selenium, RTRT, gtest/cpptest for developing test automation software
- Time-series Database, NoSQL database
Web/PC Applications are used in real-time distributed systems of Scientific, Engineering, Medical, Industrial, and Defense domains due to their evolving functionalities and remote management capabilities. Complex systems deployed in a demanding environment of extreme vibration, high temperatures, dust, etc. can be monitored and controlled with precision and accuracy using Web/PC applications.
Industrial Apps are widely used in a range of applications such as Factory Automation, Oil and Gas, Mining and Industrial safety among others, to monitor and control complex systems and processes. Industrial Apps are integral to Industrial control systems, providing real-time analytics and intelligence to users, optimise production operation and thereby enhance productivity. These Apps can be implemented on various platforms including Industrial PCs, Tabs and Smartphones.
The spurt in robotics and automated machinery in an industrial environment coupled with the emergence of sophisticated Apps have redefined factory operations enabling remote monitoring, control, automated diagnostics, preventive maintenance while ensuring least downtime. Industrial Apps are widely used in Wearables, Manufacturing Control Systems, Warehouse & Inventory Management, Equipment Maintenance, Production & Workflow Management, Industrial Safety and security, etc.
Tool and Techniques expertise for creating Industrial Apps include,
- Java and .NET for implementation of Industrial Apps
- Microsoft’s SQL Server, ProgstreSQL, MySQL, DB/2, etc. for Database management
- Analytics and Cloud Storage
Scientific and Medical Application
As said in the beginning of the blog, even if an embedded device has all the required functionalities and features, it’s the UI that defines the user experience. Any medical/scientific product, be it a large system or a handheld device, demand an intuitive user interface, seamless user experience, feature-rich UI/UX controls and ergonomic design.
Medical / Scientific Apps present complex data in a simplified and user-friendly format and help the users solve complex analytical challenges quickly and easily. Some of the popular tools used for the implementation of scientific apps are,
- QT, UWP, Xamarin, C#, .Net, Electron for developing PC Apps
- Report generation – Charts and Plots
Human Machine Interface or HMI is increasingly becoming a significant part of embedded systems. From data acquisition, communication, presentation to monitoring, control and diagnostics, HMI offers a safe and reliable interface for various complex industrial applications. Today, HMI is imperative to Automation applications as it forms the data foundation of the system.
An HMI development activity calls attention towards three key things – a robust Graphical User Interface, memory optimisation and power efficiency. Factors such as shrinking device size and increasing functional complexity are posing many challenges in creating intuitive, user-friendly designs. In addition, the spurt of graphics technologies across embedded applications is making a huge difference in our outlook towards HMI – as a user and a designer alike.
HMI functions as a gateway between a multitude of hardware & software components in an Embedded System, which includes Hardware modules, I/O devices, controllers, servers, etc. For instance, in an industrial scenario, robotics controls in complex machines are enabled and managed through HMIs.
Some of the popular tools used are Microsoft’s Visual Studio .Net, Qt/QML, Android, ReactNative, etc.
Embedded mobile applications are often designed for industry-specific use. In most cases, it complements a PC or Web Application, by enabling remote access to the embedded system. Embedded mobile apps are widely used in Industrial, Healthcare and Automotive industries. One of the primary concerns of Embedded Mobile Applications is security since these applications handle critical and confidential data over the internet. Implementation of a foolproof, secured App platform is critical to avoid any kind of data breach.
Mobile devices are available on a wide range of processors and operating systems. Thus, the Application created should work seamlessly irrespective of the platform it runs.
Some of the popular tools to develop Native Android, iOS apps and Hybrid mobile Apps include,
- Xamarin, QT for developing Hybrid Mobile Apps
- Java, Kotlin, NDK, JNI (Android), ReactNative, Flutter for Android apps
- ObjectiveC, Swift, ReactNative, Flutter for iOS Application
- JustinMind, Adobe Photoshop/XD, Pencil, etc. for wireframes & prototyping
Bare-metal & Headless Applications
Bare-metal application is a firmware application, or a set of sequential instructions executed directly on the system hardware – commonly on microprocessors or microcontrollers – and runs without an OS. Bare-metal applications are faster, are power efficient and use less memory. Due to these characteristics, bare-metal apps are widely used in time-critical, low latency applications that has stringent boot time but minimal CPU bandwidth, connectivity and memory; for example, DO-178 compliant applications for mission-critical and safety-critical systems.
Headless Apps find its applications in wearable, medical, home automation, industrial, health and wellness devices, wherein a user interface is not required for executing the functionalities.
Some of the popular tools used for building Bare-metal and Headless Apps include,
- C/C++/Assembly apps on various IDEs for bare-metal environment
- FPGA, DSP Algorithms
Apps have become an extremely critical element for embedded systems, be it consumer products, automotive, industrial, avionics, assistive, healthcare devices, scientific devices, drones, or any other systems that humans interface. Today, for every embedded product user, the system UI is as, if not more important, as the memory footprint or the overall system performance. It has become one of the key factors that decide the success of the product.
A Robust & flexible Application is key to any embedded system – localization, screen size, resolution, failure scenarios, etc. need to be considered while developing an App. Mistral has over a decade of experience developing high quality, flexible embedded Apps for Display based and headless applications for Android, Linux, iOS and Windows-based platforms. Mistral’s comprehensive App development services include UI Customization, NDK Applications- Porting of Native applications to different platforms versions, QT/QML based UI applications, Media framework customization, Database and web-services, Cloud integration and Application porting among others.