{"id":30036,"date":"2024-10-10T13:58:31","date_gmt":"2024-10-10T11:58:31","guid":{"rendered":"https:\/\/www.codemotion.com\/magazine\/?p=30036"},"modified":"2024-10-10T13:58:33","modified_gmt":"2024-10-10T11:58:33","slug":"the-iot-journey-from-prototype-to-app","status":"publish","type":"post","link":"https:\/\/www.codemotion.com\/magazine\/iot\/the-iot-journey-from-prototype-to-app\/","title":{"rendered":"The IoT Journey: From Prototype to App"},"content":{"rendered":"\n<p>Do you know those famous Christmas family dinners? <\/p>\n\n\n\n<p>The ones straight out of a movie, full of relatives you might have seen just once during the year, maybe by chance at the shopping mall. Uncles and aunts who sit next to you and try to understand what you do with &#8220;computers&#8221; (and inevitably ask if you can fix something on their phone or laptop too).<\/p>\n\n\n\n<p>Yes, I know, it\u2019s a <em>clich\u00e9<\/em> from the 2000s and might not mean much to the younger crowd, but for those who\u2019ve been there, well, it\u2019s an unmistakable emotional mix. We\u2019re in 2024, true, and everyone seems to be a &#8220;computer expert&#8221; now (even that aunt\/uncle!), but there\u2019s still a moment when that old feeling of <em>&#8220;why me?&#8221;<\/em> resurfaces. It\u2019s when I have to explain what it means to work in IoT development.<\/p>\n\n\n\n<p>The acronym is familiar: the famous <strong>Internet of Things<\/strong>. <\/p>\n\n\n\n<p>But often, the magic word <strong>smart<\/strong> is just added to the name of a device, transforming a passive, silent object into something alive and able to communicate. It\u2019s like giving a digital soul to the objects around us.<\/p>\n\n\n\n<p>So, with Christmas around the corner and all the relatives getting ready to ask me what I really do with &#8220;computers,&#8221; I thought I\u2019d practice a little and share my experience with the Codemotion community, explaining what developing for IoT really means. Or at least try to&#8230;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-a-few-examples\">A few examples<\/h2>\n\n\n\n<p>Perhaps the simplest way to introduce the topic is to better define its scope. IoT might seem like a niche field, and in some ways, it is, but it has infinite facets. It\u2019s a vast system, reminiscent of the &#8220;long tail&#8221; in the SEO world: you start with a simple flower pot, and you end up with a push notification on your phone that says: &#8220;Hey, remember to water me!&#8221;<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"768\" src=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/10\/Leonardo_Lightning_XL_a_cactus_with_a_smart_water_sensor_on_it_2.jpg\" alt=\"water sensor IoT\" class=\"wp-image-30069\" srcset=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/10\/Leonardo_Lightning_XL_a_cactus_with_a_smart_water_sensor_on_it_2.jpg 1024w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/10\/Leonardo_Lightning_XL_a_cactus_with_a_smart_water_sensor_on_it_2-300x225.jpg 300w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/10\/Leonardo_Lightning_XL_a_cactus_with_a_smart_water_sensor_on_it_2-768x576.jpg 768w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>The process covers every type of object: anything can become \u201csmart\u201d and start providing data of any kind. A watch, beyond telling the time, could monitor our oxygen levels, body temperature, and the number of steps we take each day. A refrigerator could inform us about the internal temperature, the state of the food, and even remind us when it\u2019s time to toss out the milk.<\/p>\n\n\n\n<p>A sensor next to a cluster of grapes could gather detailed data to produce the perfect Prosecco, while a bike in a ride-sharing service might have so much telemetry that a Formula 1 team would envy it\u2014perhaps even with bidirectional communication!<\/p>\n\n\n\n<p>As I was saying, there are endless domains and perspectives in which an object can become smart. In this sea of possibilities, it\u2019s my job to guide you through what it means to develop an IoT device, going through all the phases\u2014from prototyping to integration, and finally to managing the data that, in the end, is the true soul of every connected object.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-from-prototype-to-production\"><strong>From prototype to production<\/strong><\/h2>\n\n\n\n<p>The creation of an IoT device, or \u201csmart device,\u201d begins by distilling the requirements and defining the final data it will need to provide. This preliminary analysis helps identify, broadly, the necessary sensors, required physical ports, and whether an electrical outlet or a battery will power the device.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"683\" src=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/10\/electronic-circuit-board-with-processor-wires-1024x683.jpg\" alt=\"iot product prototype\" class=\"wp-image-30071\" srcset=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/10\/electronic-circuit-board-with-processor-wires-1024x683.jpg 1024w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/10\/electronic-circuit-board-with-processor-wires-300x200.jpg 300w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/10\/electronic-circuit-board-with-processor-wires-768x512.jpg 768w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/10\/electronic-circuit-board-with-processor-wires-1536x1024.jpg 1536w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/10\/electronic-circuit-board-with-processor-wires-600x400.jpg 600w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/10\/electronic-circuit-board-with-processor-wires.jpg 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Electronic circuit board with processor and wires, close view<\/figcaption><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-bill-of-materials\">Bill of materials<\/h3>\n\n\n\n<p>This initial phase allows us to define the Bill of Materials (BOM), which is the list of components required to create the final product. Choosing the right components is crucial: you need to consider market availability, compatibility, technical specifications, and cost. Efficient BOM management is essential to optimise production costs and ensure the device can be produced on a large scale without issues. For example, a microcontroller with multiple integrated connectivity options (<a href=\"https:\/\/www.codemotion.com\/magazine\/iot\/web-progressive-apps-creating-bluetooth-robots\/\" target=\"_blank\" rel=\"noreferrer noopener\">Wi-Fi, Bluetooth, etc<\/a>.) can simplify development but increase the per-unit cost.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-the-prototype\">The prototype<\/h3>\n\n\n\n<p>Often, an initial iteration involves creating a hardware prototype to physically validate the project and identify potential limits or issues before moving on to optimisation and scaling. Rapid prototyping platforms like <a href=\"https:\/\/www.arduino.cc\/\" target=\"_blank\" rel=\"noreferrer noopener\">Arduino<\/a>, <a href=\"https:\/\/www.espressif.com\/en\/products\/socs\/esp32\">ESP32<\/a>, or <a href=\"https:\/\/www.raspberrypi.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">Raspberry Pi<\/a> are commonly used to reduce initial time and costs, allowing us to test and validate concepts before transitioning to more specific and customised solutions.<\/p>\n\n\n\n<p>Another critical aspect is the design of the enclosure, or the device\u2019s casing. This must be not only aesthetically pleasing but also functional and resistant to the expected usage conditions. For example, a device intended for underwater use will require certified waterproofing (e.g., IP68 standard), while one for winter sports must withstand extreme temperatures and shocks. At this stage, ergonomic and industrial design studies come into play, considering even the user interface of the device (display, buttons, visual or auditory feedback, etc.).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-cost-studies\">Cost studies<\/h3>\n\n\n\n<p>In parallel, we conduct cost studies and market analysis. It\u2019s crucial to accurately estimate production and development costs to establish a final price and evaluate the product&#8217;s economic viability. This phase often requires assessing the expected production volumes and economies of scale. The analysis must also consider different production scenarios, including certification costs, especially for products intended for regulated industries like medical or automotive sectors.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-architecture\">Architecture<\/h3>\n\n\n\n<p>When it comes to communication methods, IoT devices can use different technologies, each with specific advantages and limitations:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>USB<\/strong>: for wired connections and power supply;<\/li>\n\n\n\n<li><strong>Bluetooth Low Energy (<a href=\"https:\/\/github.com\/dotintent\/awesome-ble\">BLE<\/a>)<\/strong>: ideal for low-power devices and short-range communication;<\/li>\n\n\n\n<li><strong>Wi-Fi<\/strong>: for high-speed connections and local coverage;<\/li>\n\n\n\n<li><strong>LoRaWAN<\/strong>: for devices that require long-range and low-power consumption, like sensors in agricultural or remote environments;<\/li>\n\n\n\n<li><strong>IR<\/strong>: in some contexts, for transmitting information to dedicated optical readers (e.g., energy meters).<\/li>\n<\/ul>\n\n\n\n<p>The choice of technology depends on the use case, the type of data the device needs to transmit, and the power supply method. Properly designing the communication architecture is essential to ensure device reliability and its ability to integrate into an existing IoT network. Additionally, it\u2019s important to consider the possibility of OTA (Over-The-Air) updates to ensure longevity and maintenance, allowing software updates and bug fixes remotely.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-communication-and-data\"><strong>Communication and Data<\/strong><\/h2>\n\n\n\n<p>Once my colleagues have completed the prototype and the hardware is tested, it\u2019s my turn: mobile app development. To put it simply (and maybe explain it to my uncle!), this is where we connect the physical world to the digital, translating raw data from the device into a tangible and intuitive user experience.<\/p>\n\n\n\n<p>After validating the first prototype (even though the hardware might not be fully available at this stage), we begin verifying that what was discussed during the planning phase is being followed. However, verification is not a final process; it happens continuously, in every sprint, with periodic demos from the firmware team. This is a crucial moment: it\u2019s the equivalent of a Formula 1 &#8220;shake down,&#8221; where we test the complete system to ensure everything works correctly and identify potential issues before they become critical.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"683\" src=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/10\/man-controlling-robot-vacuum-with-his-phone-1024x683.jpg\" alt=\"iot app prototype\" class=\"wp-image-30072\" srcset=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/10\/man-controlling-robot-vacuum-with-his-phone-1024x683.jpg 1024w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/10\/man-controlling-robot-vacuum-with-his-phone-300x200.jpg 300w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/10\/man-controlling-robot-vacuum-with-his-phone-768x512.jpg 768w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/10\/man-controlling-robot-vacuum-with-his-phone-1536x1024.jpg 1536w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/10\/man-controlling-robot-vacuum-with-his-phone-600x400.jpg 600w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/10\/man-controlling-robot-vacuum-with-his-phone.jpg 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-mobile-development\">Mobile development<\/h2>\n\n\n\n<p>Our role as mobile developers for smart devices is to bridge the physical world (the device and its sensors) and the digital experience (the app). To do so, we collaborate with a range of professionals: firmware and embedded engineers, <strong>UI<\/strong>\/<strong>UX <\/strong>specialists, backend engineers, <strong>AI<\/strong>\/<strong>ML<\/strong> experts, mobile engineers, and <strong>QA<\/strong> teams. This multidisciplinary team works in synergy to create a coherent and integrated experience that perfectly connects the real world with the digital one.<\/p>\n\n\n\n<p>Often, the interaction between the app and the device doesn\u2019t happen through a classic RESTful API but through dedicated communication protocols that establish a direct, one-to-one connection between the smartphone and the peripheral device. Team synergy is essential, and using methodologies like <strong>fail-fast <\/strong>(<strong>FF<\/strong>) allows us to quickly identify and resolve critical points efficiently. For instance, if we notice that data isn\u2019t arriving with the required granularity, hardware modifications might be necessary, impacting production timelines and BOM costs, requiring re-planning.<\/p>\n\n\n\n<p>Our task as the mobile team is to connect the <strong>WHAT<\/strong> (data provided by firmware, backend, or calculated through AI\/ML) with the <strong>HOW<\/strong> (the user experience designed by UX\/UI teams). Although some aspects of development may resemble those of a traditional app connecting to a backend, there are unique and challenging aspects. For example, <strong>onboarding<\/strong> an IoT device goes far beyond the classic informational &#8220;carousel&#8221;; it requires intense user interaction through a process called provisioning.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"683\" src=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/10\/man-holding-smartphone-while-using-smart-speaker-1024x683.jpg\" alt=\"iot app prototype\" class=\"wp-image-30073\" srcset=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/10\/man-holding-smartphone-while-using-smart-speaker-1024x683.jpg 1024w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/10\/man-holding-smartphone-while-using-smart-speaker-300x200.jpg 300w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/10\/man-holding-smartphone-while-using-smart-speaker-768x512.jpg 768w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/10\/man-holding-smartphone-while-using-smart-speaker-1536x1024.jpg 1536w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/10\/man-holding-smartphone-while-using-smart-speaker-600x400.jpg 600w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/10\/man-holding-smartphone-while-using-smart-speaker.jpg 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-provisioning\">Provisioning<\/h3>\n\n\n\n<p>During provisioning, the smart device becomes part of the user\u2019s ecosystem. Various operational modes are used for this integration, including:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Selecting a BLE device<\/strong> from a list detected by the smartphone, where the user chooses the correct device;<\/li>\n\n\n\n<li><strong>Temporarily connecting to a Wi-Fi Access Point (AP)<\/strong> to transmit network credentials and configure the device;<\/li>\n\n\n\n<li>Using an <strong>NFC<\/strong> bump to start the pairing process.<\/li>\n<\/ul>\n\n\n\n<p>In some cases, these methods can be combined to ensure a secure and stable connection. Once provisioning is complete, the device is ready to transmit its data. If the connection is through Wi-Fi, the data is often sent to a backend that collects, analyzes, and makes it available through the app. Conversely, if the communication happens via BLE or NFC, much of the data management work is done by the smartphone, acting as a direct bridge between the device and the app.<\/p>\n\n\n\n<p>This phase is particularly delicate because synch and updating data, especially with low-power protocols like BLE, requires special attention to transmission speed (<strong>MTU<\/strong>) and the amount of data to transfer. This is why we often see \u201csyncing\u201d screens in apps, with duration depending on these factors.<\/p>\n\n\n\n<p>There\u2019s no fixed rule on how to manage data: in some cases, data is saved directly to the smartphone\u2019s native services, such as HealthKit for iOS or equivalent services on Android, while in other cases, a backend is needed to process and analyse the data, especially when the collected data is complex and requires deeper processing.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-ota-updates\"><strong>OTA updates<\/strong><\/h2>\n\n\n\n<p>A crucial aspect of IoT development is managing <strong>Over-The-Air (OTA)<\/strong> updates, essential for fixing bugs, improving functionalities, and ensuring product longevity. However, OTA also represents one of the most critical phases because if something goes wrong, there\u2019s a risk of &#8220;bricking&#8221; the device, rendering it unusable. Therefore, it\u2019s essential to design a secure and reliable infrastructure for distributing updates, minimising the associated risks.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"683\" src=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/10\/top-view-patient-with-pulse-oximeter-1024x683.jpg\" alt=\"IoT app prototype\" class=\"wp-image-30074\" srcset=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/10\/top-view-patient-with-pulse-oximeter-1024x683.jpg 1024w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/10\/top-view-patient-with-pulse-oximeter-300x200.jpg 300w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/10\/top-view-patient-with-pulse-oximeter-768x512.jpg 768w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/10\/top-view-patient-with-pulse-oximeter-1536x1024.jpg 1536w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/10\/top-view-patient-with-pulse-oximeter-600x400.jpg 600w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/10\/top-view-patient-with-pulse-oximeter.jpg 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>To minimise the risk of bricking, devices must have <strong>rollback<\/strong> mechanisms that allow reverting to the previous firmware in case of an error during an update. Furthermore, it\u2019s crucial to implement a firmware integrity verification system, using certificates and cryptographic keys, for example, to ensure that only authorised and secure firmware can be installed.<\/p>\n\n\n\n<p>Coordination with the QA team is vital at this stage, as a <strong>fail-fast<\/strong> approach allows us to quickly identify issues during the update distribution and intervene before the devices reach the users. Testing techniques include simulating updates on a large number of devices, monitoring errors, and providing immediate feedback in case of malfunctions.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-tldr\"><strong>TLDR;<\/strong><\/h2>\n\n\n\n<p>Mobile development for IoT devices is a multidisciplinary challenge that combines hardware, software, UI, UX, and QA in a complex ecosystem. <\/p>\n\n\n\n<p>From initial setup and provisioning to managing OTA updates, every step requires attention to detail, team synch, and a deep understanding of the technologies involved. <\/p>\n\n\n\n<p>In the end, seeing a device come to life and work as expected, seamlessly integrating into the user\u2019s daily life, is the reward for a job well done.<\/p>\n\n\n\n<p><sub>Images <a href=\"http:\/\/www.freepik.com\/\">designed by Freepik<\/a>.<\/sub><\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Do you know those famous Christmas family dinners? The ones straight out of a movie, full of relatives you might have seen just once during the year, maybe by chance at the shopping mall. Uncles and aunts who sit next to you and try to understand what you do with &#8220;computers&#8221; (and inevitably ask if&#8230; <a class=\"more-link\" href=\"https:\/\/www.codemotion.com\/magazine\/iot\/the-iot-journey-from-prototype-to-app\/\">Read more<\/a><\/p>\n","protected":false},"author":297,"featured_media":30080,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_editorskit_title_hidden":false,"_editorskit_reading_time":0,"_editorskit_is_block_options_detached":false,"_editorskit_block_options_position":"{}","_uag_custom_page_level_css":"","_genesis_hide_title":false,"_genesis_hide_breadcrumbs":false,"_genesis_hide_singular_image":false,"_genesis_hide_footer_widgets":false,"_genesis_custom_body_class":"","_genesis_custom_post_class":"","_genesis_layout":"","footnotes":""},"categories":[9883],"tags":[9981,12154,12612],"collections":[],"class_list":{"0":"post-30036","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-iot","8":"tag-bluetooth","9":"tag-internet-of-things","10":"tag-raspberry","11":"entry"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.9 (Yoast SEO v26.9) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>The IoT Journey: From Prototype to App - Codemotion Magazine<\/title>\n<meta name=\"description\" content=\"How an IoT product is born, from the BOM to the first prototype, through UX and UI analysis, and finally onto your smartphone screen.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.codemotion.com\/magazine\/iot\/the-iot-journey-from-prototype-to-app\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"The IoT Journey: From Prototype to App\" \/>\n<meta property=\"og:description\" content=\"How an IoT product is born, from the BOM to the first prototype, through UX and UI analysis, and finally onto your smartphone screen.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.codemotion.com\/magazine\/iot\/the-iot-journey-from-prototype-to-app\/\" \/>\n<meta property=\"og:site_name\" content=\"Codemotion Magazine\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Codemotion.Italy\/\" \/>\n<meta property=\"article:published_time\" content=\"2024-10-10T11:58:31+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-10-10T11:58:33+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/10\/IoT.webp\" \/>\n\t<meta property=\"og:image:width\" content=\"1792\" \/>\n\t<meta property=\"og:image:height\" content=\"1024\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/webp\" \/>\n<meta name=\"author\" content=\"Matteo Crippa\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@CodemotionIT\" \/>\n<meta name=\"twitter:site\" content=\"@CodemotionIT\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Matteo Crippa\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"10 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/iot\/the-iot-journey-from-prototype-to-app\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/iot\/the-iot-journey-from-prototype-to-app\/\"},\"author\":{\"name\":\"Matteo Crippa\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/33b203724f28c3afc91db33645a50b30\"},\"headline\":\"The IoT Journey: From Prototype to App\",\"datePublished\":\"2024-10-10T11:58:31+00:00\",\"dateModified\":\"2024-10-10T11:58:33+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/iot\/the-iot-journey-from-prototype-to-app\/\"},\"wordCount\":1881,\"publisher\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/iot\/the-iot-journey-from-prototype-to-app\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/10\/IoT.webp\",\"keywords\":[\"Bluetooth\",\"internet of things\",\"Raspberry\"],\"articleSection\":[\"IoT\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/iot\/the-iot-journey-from-prototype-to-app\/\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/iot\/the-iot-journey-from-prototype-to-app\/\",\"name\":\"The IoT Journey: From Prototype to App - Codemotion Magazine\",\"isPartOf\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/iot\/the-iot-journey-from-prototype-to-app\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/iot\/the-iot-journey-from-prototype-to-app\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/10\/IoT.webp\",\"datePublished\":\"2024-10-10T11:58:31+00:00\",\"dateModified\":\"2024-10-10T11:58:33+00:00\",\"description\":\"How an IoT product is born, from the BOM to the first prototype, through UX and UI analysis, and finally onto your smartphone screen.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/iot\/the-iot-journey-from-prototype-to-app\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.codemotion.com\/magazine\/iot\/the-iot-journey-from-prototype-to-app\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/iot\/the-iot-journey-from-prototype-to-app\/#primaryimage\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/10\/IoT.webp\",\"contentUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/10\/IoT.webp\",\"width\":1792,\"height\":1024,\"caption\":\"IoT app\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/iot\/the-iot-journey-from-prototype-to-app\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.codemotion.com\/magazine\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"IoT\",\"item\":\"https:\/\/www.codemotion.com\/magazine\/backend\/iot\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"The IoT Journey: From Prototype to App\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#website\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/\",\"name\":\"Codemotion Magazine\",\"description\":\"We code the future. Together\",\"publisher\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.codemotion.com\/magazine\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#organization\",\"name\":\"Codemotion\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png\",\"contentUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png\",\"width\":225,\"height\":225,\"caption\":\"Codemotion\"},\"image\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/Codemotion.Italy\/\",\"https:\/\/x.com\/CodemotionIT\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/33b203724f28c3afc91db33645a50b30\",\"name\":\"Matteo Crippa\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/10\/1673371233293-100x100.jpeg\",\"contentUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/10\/1673371233293-100x100.jpeg\",\"caption\":\"Matteo Crippa\"},\"description\":\"Hi, I am Matteo, the Mobile Team Leader at \ud83d\udd34 intent. \ud83d\ude80 Creator of: Awesome Swift, Awsome BLE, LeafMiner \u2618\ufe0f\u26cf\ufe0f. \u270d\ufe0f Contributor in: Flutter, CareKit, ResearchKit, MapLibre, Fuel, Vapor. \ud83d\udd2c I usually develop using iOS - (Objective-C, Swift), Android - (Kotlin), Node.js - (Express.js, AWS Lambda), Deno, Flutter, Vue.js\",\"sameAs\":[\"https:\/\/withintent.com\",\"https:\/\/linkedin.com\/in\/matteocrippamc\"],\"url\":\"https:\/\/www.codemotion.com\/magazine\/author\/ghego\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"The IoT Journey: From Prototype to App - Codemotion Magazine","description":"How an IoT product is born, from the BOM to the first prototype, through UX and UI analysis, and finally onto your smartphone screen.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.codemotion.com\/magazine\/iot\/the-iot-journey-from-prototype-to-app\/","og_locale":"en_US","og_type":"article","og_title":"The IoT Journey: From Prototype to App","og_description":"How an IoT product is born, from the BOM to the first prototype, through UX and UI analysis, and finally onto your smartphone screen.","og_url":"https:\/\/www.codemotion.com\/magazine\/iot\/the-iot-journey-from-prototype-to-app\/","og_site_name":"Codemotion Magazine","article_publisher":"https:\/\/www.facebook.com\/Codemotion.Italy\/","article_published_time":"2024-10-10T11:58:31+00:00","article_modified_time":"2024-10-10T11:58:33+00:00","og_image":[{"width":1792,"height":1024,"url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/10\/IoT.webp","type":"image\/webp"}],"author":"Matteo Crippa","twitter_card":"summary_large_image","twitter_creator":"@CodemotionIT","twitter_site":"@CodemotionIT","twitter_misc":{"Written by":"Matteo Crippa","Est. reading time":"10 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.codemotion.com\/magazine\/iot\/the-iot-journey-from-prototype-to-app\/#article","isPartOf":{"@id":"https:\/\/www.codemotion.com\/magazine\/iot\/the-iot-journey-from-prototype-to-app\/"},"author":{"name":"Matteo Crippa","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/33b203724f28c3afc91db33645a50b30"},"headline":"The IoT Journey: From Prototype to App","datePublished":"2024-10-10T11:58:31+00:00","dateModified":"2024-10-10T11:58:33+00:00","mainEntityOfPage":{"@id":"https:\/\/www.codemotion.com\/magazine\/iot\/the-iot-journey-from-prototype-to-app\/"},"wordCount":1881,"publisher":{"@id":"https:\/\/www.codemotion.com\/magazine\/#organization"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/iot\/the-iot-journey-from-prototype-to-app\/#primaryimage"},"thumbnailUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/10\/IoT.webp","keywords":["Bluetooth","internet of things","Raspberry"],"articleSection":["IoT"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.codemotion.com\/magazine\/iot\/the-iot-journey-from-prototype-to-app\/","url":"https:\/\/www.codemotion.com\/magazine\/iot\/the-iot-journey-from-prototype-to-app\/","name":"The IoT Journey: From Prototype to App - Codemotion Magazine","isPartOf":{"@id":"https:\/\/www.codemotion.com\/magazine\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.codemotion.com\/magazine\/iot\/the-iot-journey-from-prototype-to-app\/#primaryimage"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/iot\/the-iot-journey-from-prototype-to-app\/#primaryimage"},"thumbnailUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/10\/IoT.webp","datePublished":"2024-10-10T11:58:31+00:00","dateModified":"2024-10-10T11:58:33+00:00","description":"How an IoT product is born, from the BOM to the first prototype, through UX and UI analysis, and finally onto your smartphone screen.","breadcrumb":{"@id":"https:\/\/www.codemotion.com\/magazine\/iot\/the-iot-journey-from-prototype-to-app\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.codemotion.com\/magazine\/iot\/the-iot-journey-from-prototype-to-app\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/iot\/the-iot-journey-from-prototype-to-app\/#primaryimage","url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/10\/IoT.webp","contentUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/10\/IoT.webp","width":1792,"height":1024,"caption":"IoT app"},{"@type":"BreadcrumbList","@id":"https:\/\/www.codemotion.com\/magazine\/iot\/the-iot-journey-from-prototype-to-app\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.codemotion.com\/magazine\/"},{"@type":"ListItem","position":2,"name":"IoT","item":"https:\/\/www.codemotion.com\/magazine\/backend\/iot\/"},{"@type":"ListItem","position":3,"name":"The IoT Journey: From Prototype to App"}]},{"@type":"WebSite","@id":"https:\/\/www.codemotion.com\/magazine\/#website","url":"https:\/\/www.codemotion.com\/magazine\/","name":"Codemotion Magazine","description":"We code the future. Together","publisher":{"@id":"https:\/\/www.codemotion.com\/magazine\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.codemotion.com\/magazine\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.codemotion.com\/magazine\/#organization","name":"Codemotion","url":"https:\/\/www.codemotion.com\/magazine\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/","url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png","contentUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png","width":225,"height":225,"caption":"Codemotion"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/Codemotion.Italy\/","https:\/\/x.com\/CodemotionIT"]},{"@type":"Person","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/33b203724f28c3afc91db33645a50b30","name":"Matteo Crippa","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/image\/","url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/10\/1673371233293-100x100.jpeg","contentUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/10\/1673371233293-100x100.jpeg","caption":"Matteo Crippa"},"description":"Hi, I am Matteo, the Mobile Team Leader at \ud83d\udd34 intent. \ud83d\ude80 Creator of: Awesome Swift, Awsome BLE, LeafMiner \u2618\ufe0f\u26cf\ufe0f. \u270d\ufe0f Contributor in: Flutter, CareKit, ResearchKit, MapLibre, Fuel, Vapor. \ud83d\udd2c I usually develop using iOS - (Objective-C, Swift), Android - (Kotlin), Node.js - (Express.js, AWS Lambda), Deno, Flutter, Vue.js","sameAs":["https:\/\/withintent.com","https:\/\/linkedin.com\/in\/matteocrippamc"],"url":"https:\/\/www.codemotion.com\/magazine\/author\/ghego\/"}]}},"featured_image_src":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/10\/IoT-600x400.webp","featured_image_src_square":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/10\/IoT-600x600.webp","author_info":{"display_name":"Matteo Crippa","author_link":"https:\/\/www.codemotion.com\/magazine\/author\/ghego\/"},"uagb_featured_image_src":{"full":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/10\/IoT.webp",1792,1024,false],"thumbnail":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/10\/IoT-150x150.webp",150,150,true],"medium":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/10\/IoT-300x171.webp",300,171,true],"medium_large":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/10\/IoT-768x439.webp",768,439,true],"large":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/10\/IoT-1024x585.webp",1024,585,true],"1536x1536":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/10\/IoT-1536x878.webp",1536,878,true],"2048x2048":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/10\/IoT.webp",1792,1024,false],"small-home-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/10\/IoT-100x100.webp",100,100,true],"sidebar-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/10\/IoT-180x128.webp",180,128,true],"genesis-singular-images":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/10\/IoT-896x504.webp",896,504,true],"archive-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/10\/IoT-400x225.webp",400,225,true],"gb-block-post-grid-landscape":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/10\/IoT-600x400.webp",600,400,true],"gb-block-post-grid-square":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/10\/IoT-600x600.webp",600,600,true]},"uagb_author_info":{"display_name":"Matteo Crippa","author_link":"https:\/\/www.codemotion.com\/magazine\/author\/ghego\/"},"uagb_comment_info":0,"uagb_excerpt":"Do you know those famous Christmas family dinners? The ones straight out of a movie, full of relatives you might have seen just once during the year, maybe by chance at the shopping mall. Uncles and aunts who sit next to you and try to understand what you do with &#8220;computers&#8221; (and inevitably ask if&#8230;&hellip;","lang":"en","_links":{"self":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/30036","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/users\/297"}],"replies":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/comments?post=30036"}],"version-history":[{"count":3,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/30036\/revisions"}],"predecessor-version":[{"id":30093,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/30036\/revisions\/30093"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/media\/30080"}],"wp:attachment":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/media?parent=30036"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/categories?post=30036"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/tags?post=30036"},{"taxonomy":"collections","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/collections?post=30036"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}