CINXE.COM

Automatic Software update by Iot device over FTP- Iot 44

<!DOCTYPE html> <html lang="en-US"> <head > <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1" /> <meta property="fb:admins" content="1140409510" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta property="fb:admins" content="107031532675062" /> <meta name="msvalidate.01" content="40BA1B879066C83CDFCA374CA4B490C3" /> <meta name='robots' content='index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1' /> <!-- This site is optimized with the Yoast SEO Premium plugin v18.5 (Yoast SEO v23.9) - https://yoast.com/wordpress/plugins/seo/ --> <title>Automatic Software update by Iot device over FTP- Iot 44</title> <meta name="description" content="In this project, a Raspberry Pi is used as an IoT device which is running a simple python application to blink an LED" /> <link rel="canonical" href="https://www.engineersgarage.com/automatic-software-update-by-iot-device-over-ftp-protocol-iot-part-44/" /> <meta property="og:locale" content="en_US" /> <meta property="og:type" content="article" /> <meta property="og:title" content="Automatic Software Update by IoT Device over FTP Protocol - IOT Part 44" /> <meta property="og:description" content="In this project, a Raspberry Pi is used as an IoT device which is running a simple python application to blink an LED" /> <meta property="og:url" content="https://www.engineersgarage.com/automatic-software-update-by-iot-device-over-ftp-protocol-iot-part-44/" /> <meta property="og:site_name" content="Engineers Garage" /> <meta property="article:publisher" content="https://www.facebook.com/engineersgarage" /> <meta property="og:image" content="https://www.engineersgarage.com/wp-content/uploads/2019/07/Block-Diagram-Raspberry-Pi-3-based-IoT-FTP-Client.jpg" /> <meta property="og:image:width" content="1200" /> <meta property="og:image:height" content="718" /> <meta property="og:image:type" content="image/jpeg" /> <meta name="author" content="Priya" /> <meta name="twitter:card" content="summary_large_image" /> <meta name="twitter:creator" content="@EngineersGarage" /> <meta name="twitter:site" content="@EngineersGarage" /> <meta name="twitter:label1" content="Written by" /> <meta name="twitter:data1" content="Priya" /> <meta name="twitter:label2" content="Est. reading time" /> <meta name="twitter:data2" content="13 minutes" /> <script type="application/ld+json" class="yoast-schema-graph">{"@context":"https://schema.org","@graph":[{"@type":"Article","@id":"https://www.engineersgarage.com/automatic-software-update-by-iot-device-over-ftp-protocol-iot-part-44/#article","isPartOf":{"@id":"https://www.engineersgarage.com/automatic-software-update-by-iot-device-over-ftp-protocol-iot-part-44/"},"author":{"name":"Priya","@id":"https://www.engineersgarage.com/#/schema/person/1ce34f4b7e2a5197ba3423a638549ce6"},"headline":"Automatic Software Update by IoT Device over FTP Protocol &#8211; IOT Part 44","datePublished":"2024-11-20T11:05:50+00:00","dateModified":"2024-11-22T10:08:48+00:00","mainEntityOfPage":{"@id":"https://www.engineersgarage.com/automatic-software-update-by-iot-device-over-ftp-protocol-iot-part-44/"},"wordCount":2636,"publisher":{"@id":"https://www.engineersgarage.com/#organization"},"image":{"@id":"https://www.engineersgarage.com/automatic-software-update-by-iot-device-over-ftp-protocol-iot-part-44/#primaryimage"},"thumbnailUrl":"https://www.engineersgarage.com/wp-content/uploads/2019/07/Block-Diagram-Raspberry-Pi-3-based-IoT-FTP-Client.jpg","keywords":["IoT"],"articleSection":["Featured Contributions","IoT tutorials","Tutorials"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https://www.engineersgarage.com/automatic-software-update-by-iot-device-over-ftp-protocol-iot-part-44/","url":"https://www.engineersgarage.com/automatic-software-update-by-iot-device-over-ftp-protocol-iot-part-44/","name":"Automatic Software update by Iot device over FTP- Iot 44","isPartOf":{"@id":"https://www.engineersgarage.com/#website"},"primaryImageOfPage":{"@id":"https://www.engineersgarage.com/automatic-software-update-by-iot-device-over-ftp-protocol-iot-part-44/#primaryimage"},"image":{"@id":"https://www.engineersgarage.com/automatic-software-update-by-iot-device-over-ftp-protocol-iot-part-44/#primaryimage"},"thumbnailUrl":"https://www.engineersgarage.com/wp-content/uploads/2019/07/Block-Diagram-Raspberry-Pi-3-based-IoT-FTP-Client.jpg","datePublished":"2024-11-20T11:05:50+00:00","dateModified":"2024-11-22T10:08:48+00:00","description":"In this project, a Raspberry Pi is used as an IoT device which is running a simple python application to blink an LED","breadcrumb":{"@id":"https://www.engineersgarage.com/automatic-software-update-by-iot-device-over-ftp-protocol-iot-part-44/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https://www.engineersgarage.com/automatic-software-update-by-iot-device-over-ftp-protocol-iot-part-44/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https://www.engineersgarage.com/automatic-software-update-by-iot-device-over-ftp-protocol-iot-part-44/#primaryimage","url":"https://www.engineersgarage.com/wp-content/uploads/2019/07/Block-Diagram-Raspberry-Pi-3-based-IoT-FTP-Client.jpg","contentUrl":"https://www.engineersgarage.com/wp-content/uploads/2019/07/Block-Diagram-Raspberry-Pi-3-based-IoT-FTP-Client.jpg","width":1200,"height":718,"caption":""},{"@type":"BreadcrumbList","@id":"https://www.engineersgarage.com/automatic-software-update-by-iot-device-over-ftp-protocol-iot-part-44/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://www.engineersgarage.com/"},{"@type":"ListItem","position":2,"name":"Automatic Software Update by IoT Device over FTP Protocol &#8211; IOT Part 44"}]},{"@type":"WebSite","@id":"https://www.engineersgarage.com/#website","url":"https://www.engineersgarage.com/","name":"Engineers Garage","description":"Electronic Projects, Electrical Engineering Resources, Makers Articles and Product News","publisher":{"@id":"https://www.engineersgarage.com/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://www.engineersgarage.com/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https://www.engineersgarage.com/#organization","name":"Engineer's Garage - WTWH Media","url":"https://www.engineersgarage.com/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https://www.engineersgarage.com/#/schema/logo/image/","url":"https://www.engineersgarage.com/wp-content/uploads/2019/08/EGlogo.png","contentUrl":"https://www.engineersgarage.com/wp-content/uploads/2019/08/EGlogo.png","width":372,"height":52,"caption":"Engineer's Garage - WTWH Media"},"image":{"@id":"https://www.engineersgarage.com/#/schema/logo/image/"},"sameAs":["https://www.facebook.com/engineersgarage","https://x.com/EngineersGarage","https://www.youtube.com/channel/UC0VITh11JSYk-UW7toLebUw"]},{"@type":"Person","@id":"https://www.engineersgarage.com/#/schema/person/1ce34f4b7e2a5197ba3423a638549ce6","name":"Priya","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https://www.engineersgarage.com/#/schema/person/image/","url":"https://secure.gravatar.com/avatar/e5bf550a6252cc0310b8d7a2bf7c722c?s=96&r=g","contentUrl":"https://secure.gravatar.com/avatar/e5bf550a6252cc0310b8d7a2bf7c722c?s=96&r=g","caption":"Priya"},"url":"https://www.engineersgarage.com/author/priya/"}]}</script> <!-- / Yoast SEO Premium plugin. --> <link rel='dns-prefetch' href='//static.addtoany.com' /> <link rel='dns-prefetch' href='//kit.fontawesome.com' /> <link rel="alternate" type="application/rss+xml" title="Engineers Garage &raquo; Feed" href="https://www.engineersgarage.com/feed/" /> <link rel="alternate" type="application/rss+xml" title="Engineers Garage &raquo; Comments Feed" href="https://www.engineersgarage.com/comments/feed/" /> <script type="text/javascript"> /* <![CDATA[ */ window._wpemojiSettings = {"baseUrl":"https:\/\/s.w.org\/images\/core\/emoji\/15.0.3\/72x72\/","ext":".png","svgUrl":"https:\/\/s.w.org\/images\/core\/emoji\/15.0.3\/svg\/","svgExt":".svg","source":{"concatemoji":"https:\/\/www.engineersgarage.com\/wp-includes\/js\/wp-emoji-release.min.js?ver=6.7"}}; /*! This file is auto-generated */ !function(i,n){var o,s,e;function c(e){try{var t={supportTests:e,timestamp:(new Date).valueOf()};sessionStorage.setItem(o,JSON.stringify(t))}catch(e){}}function p(e,t,n){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);var t=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data),r=(e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(n,0,0),new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data));return t.every(function(e,t){return e===r[t]})}function u(e,t,n){switch(t){case"flag":return n(e,"\ud83c\udff3\ufe0f\u200d\u26a7\ufe0f","\ud83c\udff3\ufe0f\u200b\u26a7\ufe0f")?!1:!n(e,"\ud83c\uddfa\ud83c\uddf3","\ud83c\uddfa\u200b\ud83c\uddf3")&&!n(e,"\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f","\ud83c\udff4\u200b\udb40\udc67\u200b\udb40\udc62\u200b\udb40\udc65\u200b\udb40\udc6e\u200b\udb40\udc67\u200b\udb40\udc7f");case"emoji":return!n(e,"\ud83d\udc26\u200d\u2b1b","\ud83d\udc26\u200b\u2b1b")}return!1}function f(e,t,n){var r="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?new OffscreenCanvas(300,150):i.createElement("canvas"),a=r.getContext("2d",{willReadFrequently:!0}),o=(a.textBaseline="top",a.font="600 32px Arial",{});return e.forEach(function(e){o[e]=t(a,e,n)}),o}function t(e){var t=i.createElement("script");t.src=e,t.defer=!0,i.head.appendChild(t)}"undefined"!=typeof Promise&&(o="wpEmojiSettingsSupports",s=["flag","emoji"],n.supports={everything:!0,everythingExceptFlag:!0},e=new Promise(function(e){i.addEventListener("DOMContentLoaded",e,{once:!0})}),new Promise(function(t){var n=function(){try{var e=JSON.parse(sessionStorage.getItem(o));if("object"==typeof e&&"number"==typeof e.timestamp&&(new Date).valueOf()<e.timestamp+604800&&"object"==typeof e.supportTests)return e.supportTests}catch(e){}return null}();if(!n){if("undefined"!=typeof Worker&&"undefined"!=typeof OffscreenCanvas&&"undefined"!=typeof URL&&URL.createObjectURL&&"undefined"!=typeof Blob)try{var e="postMessage("+f.toString()+"("+[JSON.stringify(s),u.toString(),p.toString()].join(",")+"));",r=new Blob([e],{type:"text/javascript"}),a=new Worker(URL.createObjectURL(r),{name:"wpTestEmojiSupports"});return void(a.onmessage=function(e){c(n=e.data),a.terminate(),t(n)})}catch(e){}c(n=f(s,u,p))}t(n)}).then(function(e){for(var t in e)n.supports[t]=e[t],n.supports.everything=n.supports.everything&&n.supports[t],"flag"!==t&&(n.supports.everythingExceptFlag=n.supports.everythingExceptFlag&&n.supports[t]);n.supports.everythingExceptFlag=n.supports.everythingExceptFlag&&!n.supports.flag,n.DOMReady=!1,n.readyCallback=function(){n.DOMReady=!0}}).then(function(){return e}).then(function(){var e;n.supports.everything||(n.readyCallback(),(e=n.source||{}).concatemoji?t(e.concatemoji):e.wpemoji&&e.twemoji&&(t(e.twemoji),t(e.wpemoji)))}))}((window,document),window._wpemojiSettings); /* ]]> */ </script> <link rel='stylesheet' id='genesis-blocks-style-css-css' href='https://www.engineersgarage.com/wp-content/plugins/genesis-blocks/dist/style-blocks.build.css?ver=1720775798' type='text/css' media='all' /> <link rel='stylesheet' id='genesis-simple-share-plugin-css-css' href='https://www.engineersgarage.com/wp-content/plugins/genesis-simple-share/assets/css/share.min.css?ver=0.1.0' type='text/css' media='all' /> <link rel='stylesheet' id='genesis-simple-share-genericons-css-css' href='https://www.engineersgarage.com/wp-content/plugins/genesis-simple-share/assets/css/genericons.min.css?ver=0.1.0' type='text/css' media='all' /> <link rel='stylesheet' id='theme-wtwh-amplifying-css' href='https://www.engineersgarage.com/wp-content/themes/ThemeWTWHv2/style.css?ver=1705628983' type='text/css' media='all' /> <style id='wp-emoji-styles-inline-css' type='text/css'> img.wp-smiley, img.emoji { display: inline !important; border: none !important; box-shadow: none !important; height: 1em !important; width: 1em !important; margin: 0 0.07em !important; vertical-align: -0.1em !important; background: none !important; padding: 0 !important; } </style> <link rel='stylesheet' id='wp-block-library-css' href='https://www.engineersgarage.com/wp-includes/css/dist/block-library/style.min.css?ver=6.7' type='text/css' media='all' /> <style id='classic-theme-styles-inline-css' type='text/css'> /*! This file is auto-generated */ .wp-block-button__link{color:#fff;background-color:#32373c;border-radius:9999px;box-shadow:none;text-decoration:none;padding:calc(.667em + 2px) calc(1.333em + 2px);font-size:1.125em}.wp-block-file__button{background:#32373c;color:#fff;text-decoration:none} </style> <style id='global-styles-inline-css' type='text/css'> :root{--wp--preset--aspect-ratio--square: 1;--wp--preset--aspect-ratio--4-3: 4/3;--wp--preset--aspect-ratio--3-4: 3/4;--wp--preset--aspect-ratio--3-2: 3/2;--wp--preset--aspect-ratio--2-3: 2/3;--wp--preset--aspect-ratio--16-9: 16/9;--wp--preset--aspect-ratio--9-16: 9/16;--wp--preset--color--black: #000000;--wp--preset--color--cyan-bluish-gray: #abb8c3;--wp--preset--color--white: #ffffff;--wp--preset--color--pale-pink: #f78da7;--wp--preset--color--vivid-red: #cf2e2e;--wp--preset--color--luminous-vivid-orange: #ff6900;--wp--preset--color--luminous-vivid-amber: #fcb900;--wp--preset--color--light-green-cyan: #7bdcb5;--wp--preset--color--vivid-green-cyan: #00d084;--wp--preset--color--pale-cyan-blue: #8ed1fc;--wp--preset--color--vivid-cyan-blue: #0693e3;--wp--preset--color--vivid-purple: #9b51e0;--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple: linear-gradient(135deg,rgba(6,147,227,1) 0%,rgb(155,81,224) 100%);--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan: linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%);--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange: linear-gradient(135deg,rgba(252,185,0,1) 0%,rgba(255,105,0,1) 100%);--wp--preset--gradient--luminous-vivid-orange-to-vivid-red: linear-gradient(135deg,rgba(255,105,0,1) 0%,rgb(207,46,46) 100%);--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray: linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%);--wp--preset--gradient--cool-to-warm-spectrum: linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%);--wp--preset--gradient--blush-light-purple: linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%);--wp--preset--gradient--blush-bordeaux: linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%);--wp--preset--gradient--luminous-dusk: linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%);--wp--preset--gradient--pale-ocean: linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%);--wp--preset--gradient--electric-grass: linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%);--wp--preset--gradient--midnight: linear-gradient(135deg,rgb(2,3,129) 0%,rgb(40,116,252) 100%);--wp--preset--font-size--small: 13px;--wp--preset--font-size--medium: 20px;--wp--preset--font-size--large: 36px;--wp--preset--font-size--x-large: 42px;--wp--preset--spacing--20: 0.44rem;--wp--preset--spacing--30: 0.67rem;--wp--preset--spacing--40: 1rem;--wp--preset--spacing--50: 1.5rem;--wp--preset--spacing--60: 2.25rem;--wp--preset--spacing--70: 3.38rem;--wp--preset--spacing--80: 5.06rem;--wp--preset--shadow--natural: 6px 6px 9px rgba(0, 0, 0, 0.2);--wp--preset--shadow--deep: 12px 12px 50px rgba(0, 0, 0, 0.4);--wp--preset--shadow--sharp: 6px 6px 0px rgba(0, 0, 0, 0.2);--wp--preset--shadow--outlined: 6px 6px 0px -3px rgba(255, 255, 255, 1), 6px 6px rgba(0, 0, 0, 1);--wp--preset--shadow--crisp: 6px 6px 0px rgba(0, 0, 0, 1);}:where(.is-layout-flex){gap: 0.5em;}:where(.is-layout-grid){gap: 0.5em;}body .is-layout-flex{display: flex;}.is-layout-flex{flex-wrap: wrap;align-items: center;}.is-layout-flex > :is(*, div){margin: 0;}body .is-layout-grid{display: grid;}.is-layout-grid > :is(*, div){margin: 0;}:where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;}:where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;}.has-black-color{color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-color{color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-color{color: var(--wp--preset--color--white) !important;}.has-pale-pink-color{color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-color{color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-color{color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-color{color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-color{color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-color{color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-color{color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-color{color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-color{color: var(--wp--preset--color--vivid-purple) !important;}.has-black-background-color{background-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-background-color{background-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-background-color{background-color: var(--wp--preset--color--white) !important;}.has-pale-pink-background-color{background-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-background-color{background-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-background-color{background-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-background-color{background-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-background-color{background-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-background-color{background-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-background-color{background-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-background-color{background-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-background-color{background-color: var(--wp--preset--color--vivid-purple) !important;}.has-black-border-color{border-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-border-color{border-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-border-color{border-color: var(--wp--preset--color--white) !important;}.has-pale-pink-border-color{border-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-border-color{border-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-border-color{border-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-border-color{border-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-border-color{border-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-border-color{border-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-border-color{border-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-border-color{border-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-border-color{border-color: var(--wp--preset--color--vivid-purple) !important;}.has-vivid-cyan-blue-to-vivid-purple-gradient-background{background: var(--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple) !important;}.has-light-green-cyan-to-vivid-green-cyan-gradient-background{background: var(--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan) !important;}.has-luminous-vivid-amber-to-luminous-vivid-orange-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange) !important;}.has-luminous-vivid-orange-to-vivid-red-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-orange-to-vivid-red) !important;}.has-very-light-gray-to-cyan-bluish-gray-gradient-background{background: var(--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray) !important;}.has-cool-to-warm-spectrum-gradient-background{background: var(--wp--preset--gradient--cool-to-warm-spectrum) !important;}.has-blush-light-purple-gradient-background{background: var(--wp--preset--gradient--blush-light-purple) !important;}.has-blush-bordeaux-gradient-background{background: var(--wp--preset--gradient--blush-bordeaux) !important;}.has-luminous-dusk-gradient-background{background: var(--wp--preset--gradient--luminous-dusk) !important;}.has-pale-ocean-gradient-background{background: var(--wp--preset--gradient--pale-ocean) !important;}.has-electric-grass-gradient-background{background: var(--wp--preset--gradient--electric-grass) !important;}.has-midnight-gradient-background{background: var(--wp--preset--gradient--midnight) !important;}.has-small-font-size{font-size: var(--wp--preset--font-size--small) !important;}.has-medium-font-size{font-size: var(--wp--preset--font-size--medium) !important;}.has-large-font-size{font-size: var(--wp--preset--font-size--large) !important;}.has-x-large-font-size{font-size: var(--wp--preset--font-size--x-large) !important;} :where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;} :where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;} :root :where(.wp-block-pullquote){font-size: 1.5em;line-height: 1.6;} </style> <link rel='stylesheet' id='wtwh_prestitial_main_style-css' href='https://www.engineersgarage.com/wp-content/plugins/prestitial/assets/css/main.css?ver=1.1.0' type='text/css' media='all' /> <link rel='stylesheet' id='wtwh_prestitial_style-css' href='https://www.engineersgarage.com/wp-content/plugins/prestitial/assets/css/prestitial.css?ver=1.1.0' type='text/css' media='all' /> <link rel='stylesheet' id='megamenu-css' href='https://www.engineersgarage.com/wp-content/uploads/maxmegamenu/style.css?ver=44ec18' type='text/css' media='all' /> <link rel='stylesheet' id='dashicons-css' href='https://www.engineersgarage.com/wp-includes/css/dashicons.min.css?ver=6.7' type='text/css' media='all' /> <link rel='stylesheet' id='ea-style-css' href='https://www.engineersgarage.com/wp-content/themes/ThemeWTWHv2/assets/css/main.css?ver=1705628983' type='text/css' media='all' /> <link rel='stylesheet' id='simple-social-icons-font-css' href='https://www.engineersgarage.com/wp-content/plugins/simple-social-icons/css/style.css?ver=3.0.2' type='text/css' media='all' /> <link rel='stylesheet' id='tablepress-default-css' href='https://www.engineersgarage.com/wp-content/plugins/tablepress/css/build/default.css?ver=2.4.4' type='text/css' media='all' /> <link rel='stylesheet' id='addtoany-css' href='https://www.engineersgarage.com/wp-content/plugins/add-to-any/addtoany.min.css?ver=1.16' type='text/css' media='all' /> <link rel='stylesheet' id='genesis-tabs-stylesheet-css' href='https://www.engineersgarage.com/wp-content/plugins/genesis-tabs/assets/css/style.css?ver=0.9.5' type='text/css' media='all' /> <script type="text/javascript" src="https://www.engineersgarage.com/wp-includes/js/jquery/jquery.min.js?ver=3.7.1" id="jquery-core-js"></script> <script type="text/javascript" src="https://www.engineersgarage.com/wp-content/plugins/genesis-simple-share/assets/js/sharrre/jquery.sharrre.min.js?ver=0.1.0" id="genesis-simple-share-plugin-js-js"></script> <script type="text/javascript" src="https://www.engineersgarage.com/wp-content/plugins/genesis-simple-share/assets/js/waypoints.min.js?ver=0.1.0" id="genesis-simple-share-waypoint-js-js"></script> <script type="text/javascript" id="addtoany-core-js-before"> /* <![CDATA[ */ window.a2a_config=window.a2a_config||{};a2a_config.callbacks=[];a2a_config.overlays=[];a2a_config.templates={}; a2a_config.track_links = 'bitly'; a2a_config.track_links_key = 'addtoany|R_cc6a4017b0274d1d86f2397771b70136'; // username|API key delimited by | a2a_config.templates = { twitter: "${title} ${link} via @EngineersGarage" }; /* ]]> */ </script> <script type="text/javascript" defer src="https://static.addtoany.com/menu/page.js" id="addtoany-core-js"></script> <script type="text/javascript" defer src="https://www.engineersgarage.com/wp-content/plugins/add-to-any/addtoany.min.js?ver=1.1" id="addtoany-jquery-js"></script> <script type="text/javascript" src="https://kit.fontawesome.com/0db18eb627.js?ver=6.7" id="wtwh_prestitial_fontAwesome_js-js"></script> <link rel="https://api.w.org/" href="https://www.engineersgarage.com/wp-json/" /><link rel="alternate" title="JSON" type="application/json" href="https://www.engineersgarage.com/wp-json/wp/v2/posts/14574" /><link rel='shortlink' href='https://www.engineersgarage.com/?p=14574' /> <link rel="alternate" title="oEmbed (JSON)" type="application/json+oembed" href="https://www.engineersgarage.com/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fwww.engineersgarage.com%2Fautomatic-software-update-by-iot-device-over-ftp-protocol-iot-part-44%2F" /> <link rel="alternate" title="oEmbed (XML)" type="text/xml+oembed" href="https://www.engineersgarage.com/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fwww.engineersgarage.com%2Fautomatic-software-update-by-iot-device-over-ftp-protocol-iot-part-44%2F&#038;format=xml" /> <!-- www.engineersgarage.com=14574 --> <script> var contentHash = '308f149b8a69bb3c0fed74e9c56f290e'; var cat_target='308f149b8a69bb3c0fed74e9c56f290e, featured-contributions, iot-tutorials, tutorials, ros'; </script> <style> #category-posts-2-internal ul {padding: 0;} #category-posts-2-internal .cat-post-item img {max-width: initial; max-height: initial; margin: initial;} #category-posts-2-internal .cat-post-author {margin-bottom: 0;} #category-posts-2-internal .cat-post-thumbnail {margin: 5px 10px 5px 0;} #category-posts-2-internal .cat-post-item:before {content: ""; clear: both;} #category-posts-2-internal .cat-post-excerpt-more {display: inline-block;} #category-posts-2-internal .cat-post-item {list-style: none; margin: 3px 0 10px; padding: 3px 0;} #category-posts-2-internal .cat-post-current .cat-post-title {font-weight: bold; text-transform: uppercase;} #category-posts-2-internal [class*=cat-post-tax] {font-size: 0.85em;} #category-posts-2-internal [class*=cat-post-tax] * {display:inline-block;} #category-posts-2-internal .cat-post-item:after {content: ""; display: table; clear: both;} #category-posts-2-internal .cat-post-item .cat-post-title {overflow: hidden;text-overflow: ellipsis;white-space: initial;display: -webkit-box;-webkit-line-clamp: 4;-webkit-box-orient: vertical;padding-bottom: 0 !important;} #category-posts-2-internal .cat-post-item:after {content: ""; display: table; clear: both;} #category-posts-2-internal .cat-post-thumbnail {display:block; float:left; margin:5px 10px 5px 0;} #category-posts-2-internal .cat-post-crop {overflow:hidden;display:block;} #category-posts-2-internal p {margin:5px 0 0 0} #category-posts-2-internal li > div {margin:5px 0 0 0; clear:both;} #category-posts-2-internal .dashicons {vertical-align:middle;} #category-posts-2-internal .cat-post-thumbnail .cat-post-crop img {height: 95px;} #category-posts-2-internal .cat-post-thumbnail .cat-post-crop img {width: 150px;} #category-posts-2-internal .cat-post-thumbnail .cat-post-crop img {object-fit: cover; max-width: 100%; display: block;} #category-posts-2-internal .cat-post-thumbnail .cat-post-crop-not-supported img {width: 100%;} #category-posts-2-internal .cat-post-thumbnail {max-width:100%;} #category-posts-2-internal .cat-post-item img {margin: initial;} #category-posts-2-internal .cat-post-dark img {padding-bottom: 0 !important; -webkit-transition: all 0.3s ease; -moz-transition: all 0.3s ease; -ms-transition: all 0.3s ease; -o-transition: all 0.3s ease; transition: all 0.3s ease;} #category-posts-2-internal .cat-post-dark:hover img {-webkit-filter: brightness(75%); -moz-filter: brightness(75%); -ms-filter: brightness(75%); -o-filter: brightness(75%); filter: brightness(75%);} </style> <!-- Google Tag Manager for Global Container--> <script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-MMC9PJ9');</script> <!-- End Google Tag Manager --> <!-- Google Tag Manager --> <script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-NJMRR6Z');</script> <!-- End Google Tag Manager --> <script async src="https://securepubads.g.doubleclick.net/tag/js/gpt.js"></script> <script> window.googletag = window.googletag || {cmd: []}; googletag.cmd.push(function() { var pathParts = window.location.pathname.substr(1).split('/'); var mapHeader = googletag.sizeMapping() .addSize([768, 200], [728, 90]) .addSize([0, 0], [300, 250]) .build(); var mapLargeHeader = googletag.sizeMapping() .addSize([1024, 200], [[970, 90], [970, 250]]) .addSize([0, 0], [300, 250]) .build(); var mapWallpaper = googletag.sizeMapping() .addSize([1024, 500], [[1, 1]]) .addSize([0, 0], [[1, 1]]) .build(); var gptSlots = []; gptSlots[0] = googletag.defineSlot('/5272491/ee_network/eg_header', [[300, 250], [728, 90]], 'div-gpt-eg-header') .defineSizeMapping(mapHeader) .addService(googletag.pubads()); gptSlots[1] = googletag.defineSlot('/5272491/ee_network/eg_largeleader', [[970, 90], [970, 250]], 'div-gpt-eg_largeleader') .defineSizeMapping(mapLargeHeader) .addService(googletag.pubads()); gptSlots[2] = googletag.defineSlot('/5272491/ee_network/eg_wallpaper', [[1, 1]], 'div-gpt-eg_wallpaper') .defineSizeMapping(mapWallpaper) .addService(googletag.pubads()); googletag.defineSlot('/5272491/ee_network/eg_sidebar1', [[300, 250], [300, 600]], 'div-gpt-eg_sidebar1').addService(googletag.pubads()); googletag.defineSlot('/5272491/ee_network/eg_sidebarbottom', [[300, 250], [300, 600]], 'div-gpt-eg_sidebarbottom').addService(googletag.pubads()); googletag.defineSlot('/5272491/ee_network/eg_storeribbon',[[970, 250]], 'div-gpt-eg_storeribbon').addService(googletag.pubads()); googletag.pubads().enableSingleRequest(); googletag.pubads().collapseEmptyDivs(); googletag.pubads().setTargeting('articletitle', pathParts[0] ? pathParts[0]: 'home-page').setTargeting('cat_target', [cat_target]); googletag.enableServices(); }); </script> <!-- Google Tag Manager for Global Container--> <script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-MMC9PJ9');</script> <!-- End Google Tag Manager --> <!-- Google Tag Manager --> <script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-NJMRR6Z');</script> <!-- End Google Tag Manager --> <script async src="https://securepubads.g.doubleclick.net/tag/js/gpt.js"></script> <script> window.googletag = window.googletag || {cmd: []}; googletag.cmd.push(function() { var pathParts = window.location.pathname.substr(1).split('/'); var mapHeader = googletag.sizeMapping() .addSize([768, 200], [728, 90]) .addSize([0, 0], [300, 250]) .build(); var mapLargeHeader = googletag.sizeMapping() .addSize([1024, 200], [[970, 90], [970, 250]]) .addSize([0, 0], [300, 250]) .build(); var mapWallpaper = googletag.sizeMapping() .addSize([1024, 500], [[1, 1]]) .addSize([0, 0], [[1, 1]]) .build(); var gptSlots = []; gptSlots[0] = googletag.defineSlot('/5272491/ee_network/eg_header', [[300, 250], [728, 90]], 'div-gpt-eg-header') .defineSizeMapping(mapHeader) .addService(googletag.pubads()); gptSlots[1] = googletag.defineSlot('/5272491/ee_network/eg_largeleader', [[970, 90], [970, 250]], 'div-gpt-eg_largeleader') .defineSizeMapping(mapLargeHeader) .addService(googletag.pubads()); gptSlots[2] = googletag.defineSlot('/5272491/ee_network/eg_wallpaper', [[1, 1]], 'div-gpt-eg_wallpaper') .defineSizeMapping(mapWallpaper) .addService(googletag.pubads()); googletag.defineSlot('/5272491/ee_network/eg_allstreamflex', [[1, 1]], 'div-gpt-eg_allstreamflex').addService(googletag.pubads()); googletag.defineSlot('/5272491/ee_network/eg_allstreamprelude', [[1, 1]], 'div-gpt-eg_allstreamprelude').addService(googletag.pubads()); googletag.defineSlot('/5272491/ee_network/eg_sidebar1', [[300, 250], [300, 600]], 'div-gpt-eg_sidebar1').addService(googletag.pubads()); googletag.defineSlot('/5272491/ee_network/eg_sidebarbottom', [[300, 250], [300, 600]], 'div-gpt-eg_sidebarbottom').addService(googletag.pubads()); googletag.defineSlot('/5272491/ee_network/eg_storeribbon',[[970, 250]], 'div-gpt-eg_storeribbon').addService(googletag.pubads()); googletag.pubads().enableSingleRequest(); googletag.pubads().collapseEmptyDivs(); googletag.pubads().setTargeting('articletitle', pathParts[0] ? pathParts[0]: 'home-page').setTargeting('cat_target', [cat_target]); googletag.enableServices(); }); </script><link rel="icon" href="https://www.engineersgarage.com/wp-content/uploads/2019/08/cropped-eg-favicon-32x32.png" sizes="32x32" /> <link rel="icon" href="https://www.engineersgarage.com/wp-content/uploads/2019/08/cropped-eg-favicon-192x192.png" sizes="192x192" /> <link rel="apple-touch-icon" href="https://www.engineersgarage.com/wp-content/uploads/2019/08/cropped-eg-favicon-180x180.png" /> <meta name="msapplication-TileImage" content="https://www.engineersgarage.com/wp-content/uploads/2019/08/cropped-eg-favicon-270x270.png" /> <style type="text/css" id="wp-custom-css"> /*body > div.site-container > div.site-inner > div > div > main > article > div > p > a { color: #D2232A; }*/ .entry-content a { font-weight: bold; } .site-header .title-area { width: 350px; } @media only screen and (max-width: 1152px) { .site-header .title-area { width: 230px; } } .wtwhSpecial { display: none !important; } article > div > p > a { font-weight: bold; color:#337ab7; text-decoration: underline; } /*RSS FEED FIX*/ #rss-3 > div > h4 > a { font-size: 20px; font-weight: bold; float: none !important; } #rss-3 > div > h4 > a > img { display: none; } #rss-3 > div > ul { width: 100%; padding-left: 30px; } #rss-2 > div > h4 > a { font-size: 20px; font-weight: bold; float: none !important; } #rss-2 > div > h4 > a > img { display: none; } #rss-2 > div > ul { width: 100%; padding-left: 30px; } #recent-posts-2 > .widget-wrap > ul { padding-left: 30px; } .video-carousel .video-popup:before { background: none !important; } .video-carousel .video-popup:after { color: red !important; } .entry-categories a { font-weight: normal;} .entry-tags a{font-weight: normal;} .entry-categories { font-weight: bold;} .entry-tags {font-weight: bold;} .bawmrp a { font-weight: 400; } #digital > span { font-size: 16px !important; font-weight: 400 !important; } xmp { white-space:normal; } .slick-slider .col-sm-4 .header-slide, .slick-slider .col-sm-4 .header-slide img { max-height:240px; object-fit:cover; } .slick-slider .col-sm-8 .header-slide, .slick-slider .col-sm-8 .header-slide img { object-fit:cover; max-height:500px; } /*EE Classrooms*/ .motion-design-guides { font-size: 18px; font-weight: bold; width: 270px; height: 60px; text-align: center; text-align-last: center; -moz-text-align-last: center; border-radius: 0px; background-color: #313131; color: white; border-bottom: 4px solid #1f427e; text-transform: uppercase; white-space: wrap; } .motion-design-guide-option { text-align: center; text-align-last: center; -moz-text-align-last: center; text-transform: uppercase; width: 270px; white-space: wrap; } /*Fix for Categories/home page article display*/ @media only screen and (max-width: 500px) { .content .entry .entry-header, .archive-entry .entry-header { /* width: 100% !important;*/ /*padding-left: 0px !important; float: none !important;*/ } /* .content .entry .entry-content { width: 100% !important; }*/ /* .entry-content p { float: none !important; }*/ .entry-content img { text-align: center !important; width: 100% !important; } .archive-entry { display: flex; flex-direction: column-reverse; width: 100% !important; } .archive-entry > .entry-header, .archive-entry .entry-content { width: 100% !important; } /*.archive-entry .entry-image-link img { width: 100% !important; }*/ } @media only screen and (max-width: 767px) { .archive.category .entry-content p { display: none !important } .blog .entry-content p { display: none !important; } } .slick-slider.header-slides .header-slide .overlay h4, .slick-slider.header-slides .header-slide .overlay h2 { text-shadow: 2px 2px 5px black; background: none !important; -webkit-text-stroke-width: 0px !important; -webkit-text-stroke-color: transparent !important; } .nav-previous{ float:left; margin-bottom:50px } .nav-next{ float:right; margin-bottom:50px } .dropbtn { background-color: #04AA6D; color: white; padding: 16px; font-size: 16px; border: none; } .dropdown { display: inline-block; } .dropdown-content { display: none; position: absolute; background-color: #f1f1f1; min-width: 160px; box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2); z-index: 1; } .dropdown-content a { color: black; padding: 12px 16px; text-decoration: none; display: block; } .dropdown-content a:hover {background-color: #ddd;} .dropdown:hover .dropdown-content {display: block;} .dropdown:hover .dropbtn {background-color: #3e8e41;} /*Design Guide Drop Down Menu*/ .motion-design-guides { font-size: 14px; font-family: Raleway, sans-serif; width: 270px; height: 50px; text-align: center; text-align-last: center; -moz-text-align-last: center; border-radius: 0px; background-color: white; color: #000; border-top: 3px solid #000; border-left: none; border-right: none; border-bottom: 1px solid #e3e3e3; text-transform: uppercase; white-space: wrap; } .motion-design-guide-option { text-align: center; text-align-last: center; -moz-text-align-last: center; text-transform: uppercase; width: 270px; white-space: wrap; } .motion-design-guides:after { content: ""; border: solid #000; border-width: 0 2px 2px 0; margin-left: 20px; margin-bottom: 3px; display: inline-block; padding: 2.5px; transform: rotate(45deg); -webkit-transform: rotate(45deg); } /*Overlapping Header article Title fix*/ @media only screen and (max-width: 780px) { .site-container { margin-top: 40px !important; } } p.must-log-in a, p.logged-in-as a { color: #23527c !important; font-weight: bold; } article li a { color: #337ab7; text-decoration: underline; } /* Search Page */ body.search .site-inner { padding-left: unset; padding-right: unset; } @media only screen and (min-width: 988px) { .search .content { width: 66% !important; float: left; } .search .sidebar { width: 30%; float: right; } } </style> <style type="text/css">/** Mega Menu CSS: fs **/</style> </head> <body class="post-template-default single single-post postid-14574 single-format-standard mega-menu-primary header-image content-sidebar genesis-breadcrumbs-hidden"> <!-- xyzzy top --> <div id="prestitial" style="opacity: 0;"> <div id="prestitial-overlay"></div> <div id="prestitial-grid"> <div class="prestitial-logo"> <div class="title-area"> <h1 class="site-title"> <a href="#"><img src="https://www.engineersgarage.com/wp-content/uploads/2022/10/eg-logo.png"></a></h1> </div> </div> <div class="close-cta"> Continue to Site <i class="fa fa-arrow-right"></i> </div> <div id="prestitial-banner"></div> </div> </div> <!-- hides rest of content --> <div id="body-wrapper" style="opacity: 0;"> <div class="site-container"><header class="site-header"><div class="wrap"><div class="title-area"><p class="site-title"><a href="https://www.engineersgarage.com/">Engineers Garage</a></p></div><div class="widget-area header-widget-area"><section id="custom_html-2" class="widget_text widget widget_custom_html"><div class="widget_text widget-wrap"><div class="textwidget custom-html-widget"><div id='div-gpt-eg-header'> <script> googletag.cmd.push(function() { googletag.display('div-gpt-eg-header'); }); </script> </div> </div></div></section> </div><div class="mobile-toggles"><a href="#" class="search-toggle"><i class="icon-search"></i></a><a href="#" class="mobile-menu-toggle"><i class="icon-menu"></i></a></div></div></header><nav class="nav-primary" aria-label="Main"><div class="wrap"><div id="mega-menu-wrap-primary" class="mega-menu-wrap"><div class="mega-menu-toggle"><div class="mega-toggle-blocks-left"></div><div class="mega-toggle-blocks-center"></div><div class="mega-toggle-blocks-right"><div class='mega-toggle-block mega-menu-toggle-animated-block mega-toggle-block-0' id='mega-toggle-block-0'><button aria-label="Toggle Menu" class="mega-toggle-animated mega-toggle-animated-slider" type="button" aria-expanded="false"> <span class="mega-toggle-animated-box"> <span class="mega-toggle-animated-inner"></span> </span> </button></div></div></div><ul id="mega-menu-primary" class="mega-menu max-mega-menu mega-menu-horizontal mega-no-js" data-event="hover_intent" data-effect="fade_up" data-effect-speed="200" data-effect-mobile="disabled" data-effect-speed-mobile="0" data-mobile-force-width="false" data-second-click="go" data-document-click="collapse" data-vertical-behaviour="standard" data-breakpoint="768" data-unbind="true" data-mobile-state="collapse_all" data-mobile-direction="vertical" data-hover-intent-timeout="300" data-hover-intent-interval="100"><li class='mega-menu-item mega-menu-item-type-post_type mega-menu-item-object-page mega-menu-item-has-children mega-align-bottom-left mega-menu-flyout mega-menu-item-61908' id='mega-menu-item-61908'><a class="mega-menu-link" href="https://www.engineersgarage.com/projects-and-tutorials/" aria-expanded="false" tabindex="0">Electronics Projects and Tutorials<span class="mega-indicator"></span></a> <ul class="mega-sub-menu"> <li class='mega-menu-item mega-menu-item-type-taxonomy mega-menu-item-object-category mega-menu-item-has-children mega-menu-item-39808' id='mega-menu-item-39808'><a class="mega-menu-link" href="https://www.engineersgarage.com/electronic-projects/" aria-expanded="false">Electronic Projects<span class="mega-indicator"></span></a> <ul class="mega-sub-menu"> <li class='mega-menu-item mega-menu-item-type-taxonomy mega-menu-item-object-category mega-menu-item-81272' id='mega-menu-item-81272'><a class="mega-menu-link" href="https://www.engineersgarage.com/arduino/">Arduino Projects</a></li><li class='mega-menu-item mega-menu-item-type-taxonomy mega-menu-item-object-category mega-menu-item-81273' id='mega-menu-item-81273'><a class="mega-menu-link" href="https://www.engineersgarage.com/electronic-projects/avr/">AVR</a></li><li class='mega-menu-item mega-menu-item-type-taxonomy mega-menu-item-object-category mega-menu-item-80793' id='mega-menu-item-80793'><a class="mega-menu-link" href="https://www.engineersgarage.com/raspberry-pi-electronic-projects/">Raspberry pi</a></li><li class='mega-menu-item mega-menu-item-type-taxonomy mega-menu-item-object-category mega-menu-item-78430' id='mega-menu-item-78430'><a class="mega-menu-link" href="https://www.engineersgarage.com/electronic-projects/esp8266-electronic-projects/">ESP8266</a></li><li class='mega-menu-item mega-menu-item-type-taxonomy mega-menu-item-object-category mega-menu-item-78434' id='mega-menu-item-78434'><a class="mega-menu-link" href="https://www.engineersgarage.com/electronic-projects/beaglebone-electronic-projects/">BeagleBone</a></li><li class='mega-menu-item mega-menu-item-type-taxonomy mega-menu-item-object-category mega-menu-item-80794' id='mega-menu-item-80794'><a class="mega-menu-link" href="https://www.engineersgarage.com/electronic-projects/8051-microcontroller/">8051 Microcontroller</a></li><li class='mega-menu-item mega-menu-item-type-taxonomy mega-menu-item-object-category mega-menu-item-55864' id='mega-menu-item-55864'><a class="mega-menu-link" href="https://www.engineersgarage.com/electronic-projects/arm-electronic-projects-electronic-projects/">ARM</a></li><li class='mega-menu-item mega-menu-item-type-taxonomy mega-menu-item-object-category mega-menu-item-80795' id='mega-menu-item-80795'><a class="mega-menu-link" href="https://www.engineersgarage.com/electronic-projects/pic-microcontroller-electronic-projects/">PIC Microcontroller</a></li><li class='mega-menu-item mega-menu-item-type-taxonomy mega-menu-item-object-category mega-menu-item-60239' id='mega-menu-item-60239'><a class="mega-menu-link" href="https://www.engineersgarage.com/electronic-projects/stm32-electronic-projects-electronic-projects/">STM32</a></li> </ul> </li><li class='mega-menu-item mega-menu-item-type-taxonomy mega-menu-item-object-category mega-current-post-ancestor mega-current-menu-parent mega-current-post-parent mega-menu-item-has-children mega-menu-item-7268' id='mega-menu-item-7268'><a class="mega-menu-link" href="https://www.engineersgarage.com/tutorials/" aria-expanded="false">Tutorials<span class="mega-indicator"></span></a> <ul class="mega-sub-menu"> <li class='mega-menu-item mega-menu-item-type-taxonomy mega-menu-item-object-category mega-menu-item-78818' id='mega-menu-item-78818'><a class="mega-menu-link" href="https://www.engineersgarage.com/tutorials/audio-tutorials/">Audio Electronics</a></li><li class='mega-menu-item mega-menu-item-type-taxonomy mega-menu-item-object-category mega-menu-item-78819' id='mega-menu-item-78819'><a class="mega-menu-link" href="https://www.engineersgarage.com/tutorials/battery-management-systems/">Battery Management</a></li><li class='mega-menu-item mega-menu-item-type-taxonomy mega-menu-item-object-category mega-menu-item-78820' id='mega-menu-item-78820'><a class="mega-menu-link" href="https://www.engineersgarage.com/tutorials/brainwave/">Brainwave</a></li><li class='mega-menu-item mega-menu-item-type-taxonomy mega-menu-item-object-category mega-menu-item-78833' id='mega-menu-item-78833'><a class="mega-menu-link" href="https://www.engineersgarage.com/tutorials/evs/">Electric Vehicles</a></li><li class='mega-menu-item mega-menu-item-type-taxonomy mega-menu-item-object-category mega-menu-item-78822' id='mega-menu-item-78822'><a class="mega-menu-link" href="https://www.engineersgarage.com/tutorials/emc-emi/">EMI/EMC/RFI</a></li><li class='mega-menu-item mega-menu-item-type-taxonomy mega-menu-item-object-category mega-menu-item-78823' id='mega-menu-item-78823'><a class="mega-menu-link" href="https://www.engineersgarage.com/tutorials/filters/">Hardware Filters</a></li><li class='mega-menu-item mega-menu-item-type-taxonomy mega-menu-item-object-category mega-current-post-ancestor mega-current-menu-parent mega-current-post-parent mega-menu-item-78826' id='mega-menu-item-78826'><a class="mega-menu-link" href="https://www.engineersgarage.com/tutorials/iot-tutorials/">IoT tutorials</a></li><li class='mega-menu-item mega-menu-item-type-taxonomy mega-menu-item-object-category mega-menu-item-80151' id='mega-menu-item-80151'><a class="mega-menu-link" href="https://www.engineersgarage.com/tutorials/power/">Power Tutorials</a></li><li class='mega-menu-item mega-menu-item-type-taxonomy mega-menu-item-object-category mega-menu-item-78835' id='mega-menu-item-78835'><a class="mega-menu-link" href="https://www.engineersgarage.com/tutorials/python/">Python</a></li><li class='mega-menu-item mega-menu-item-type-taxonomy mega-menu-item-object-category mega-menu-item-78829' id='mega-menu-item-78829'><a class="mega-menu-link" href="https://www.engineersgarage.com/tutorials/sensors-tutorials/">Sensors</a></li><li class='mega-menu-item mega-menu-item-type-taxonomy mega-menu-item-object-category mega-menu-item-78830' id='mega-menu-item-78830'><a class="mega-menu-link" href="https://www.engineersgarage.com/tutorials/usb/">USB</a></li><li class='mega-menu-item mega-menu-item-type-taxonomy mega-menu-item-object-category mega-menu-item-78832' id='mega-menu-item-78832'><a class="mega-menu-link" href="https://www.engineersgarage.com/tutorials/vhdl-tutorials/">VHDL</a></li> </ul> </li><li class='mega-menu-item mega-menu-item-type-taxonomy mega-menu-item-object-category mega-menu-item-56096' id='mega-menu-item-56096'><a class="mega-menu-link" href="https://www.engineersgarage.com/circuit_design/">Circuit Design</a></li><li class='mega-menu-item mega-menu-item-type-custom mega-menu-item-object-custom mega-menu-item-62725' id='mega-menu-item-62725'><a target="_blank" class="mega-menu-link" href="https://www.youtube.com/user/engineersgarage">Project Videos</a></li><li class='mega-menu-item mega-menu-item-type-taxonomy mega-menu-item-object-category mega-menu-item-7269' id='mega-menu-item-7269'><a class="mega-menu-link" href="https://www.engineersgarage.com/components/">Components</a></li></ul> </li><li class='mega-menu-item mega-menu-item-type-taxonomy mega-menu-item-object-category mega-menu-item-has-children mega-align-bottom-left mega-menu-flyout mega-menu-item-39810' id='mega-menu-item-39810'><a class="mega-menu-link" href="https://www.engineersgarage.com/article_page/" aria-expanded="false" tabindex="0">Articles<span class="mega-indicator"></span></a> <ul class="mega-sub-menu"> <li class='mega-menu-item mega-menu-item-type-taxonomy mega-menu-item-object-category mega-menu-item-63122' id='mega-menu-item-63122'><a class="mega-menu-link" href="https://www.engineersgarage.com/tech-articles/">Tech Articles</a></li><li class='mega-menu-item mega-menu-item-type-taxonomy mega-menu-item-object-category mega-menu-item-13371' id='mega-menu-item-13371'><a class="mega-menu-link" href="https://www.engineersgarage.com/insight/">Insight</a></li><li class='mega-menu-item mega-menu-item-type-taxonomy mega-menu-item-object-category mega-menu-item-13399' id='mega-menu-item-13399'><a class="mega-menu-link" href="https://www.engineersgarage.com/invention-stories/">Invention Stories</a></li><li class='mega-menu-item mega-menu-item-type-taxonomy mega-menu-item-object-category mega-menu-item-13326' id='mega-menu-item-13326'><a class="mega-menu-link" href="https://www.engineersgarage.com/how_to/">How to</a></li><li class='mega-menu-item mega-menu-item-type-taxonomy mega-menu-item-object-category mega-menu-item-59366' id='mega-menu-item-59366'><a class="mega-menu-link" href="https://www.engineersgarage.com/what_is/">What Is</a></li></ul> </li><li class='mega-menu-item mega-menu-item-type-custom mega-menu-item-object-custom mega-menu-item-has-children mega-align-bottom-left mega-menu-flyout mega-menu-item-1863' id='mega-menu-item-1863'><a class="mega-menu-link" href="#" aria-expanded="false" tabindex="0">News<span class="mega-indicator"></span></a> <ul class="mega-sub-menu"> <li class='mega-menu-item mega-menu-item-type-taxonomy mega-menu-item-object-category mega-menu-item-39809' id='mega-menu-item-39809'><a class="mega-menu-link" href="https://www.engineersgarage.com/news/">Electronic Product News</a></li><li class='mega-menu-item mega-menu-item-type-taxonomy mega-menu-item-object-category mega-menu-item-77696' id='mega-menu-item-77696'><a class="mega-menu-link" href="https://www.engineersgarage.com/news/business-news/">Business News</a></li><li class='mega-menu-item mega-menu-item-type-taxonomy mega-menu-item-object-category mega-menu-item-77697' id='mega-menu-item-77697'><a class="mega-menu-link" href="https://www.engineersgarage.com/news/company-start-up-news/">Company/Start-up News</a></li><li class='mega-menu-item mega-menu-item-type-taxonomy mega-menu-item-object-category mega-menu-item-14489' id='mega-menu-item-14489'><a class="mega-menu-link" href="https://www.engineersgarage.com/reviews/">DIY Reviews</a></li><li class='mega-menu-item mega-menu-item-type-taxonomy mega-menu-item-object-category mega-menu-item-14287' id='mega-menu-item-14287'><a class="mega-menu-link" href="https://www.engineersgarage.com/guest_post/">Guest Post</a></li></ul> </li><li class='mega-menu-item mega-menu-item-type-custom mega-menu-item-object-custom mega-menu-item-has-children mega-align-bottom-left mega-menu-flyout mega-menu-item-55871' id='mega-menu-item-55871'><a class="mega-menu-link" aria-expanded="false" tabindex="0">Forums<span class="mega-indicator"></span></a> <ul class="mega-sub-menu"> <li class='mega-menu-item mega-menu-item-type-custom mega-menu-item-object-custom mega-menu-item-55870' id='mega-menu-item-55870'><a class="mega-menu-link" href="https://www.edaboard.com/">EDABoard.com</a></li><li class='mega-menu-item mega-menu-item-type-custom mega-menu-item-object-custom mega-menu-item-55869' id='mega-menu-item-55869'><a class="mega-menu-link" href="https://www.electro-tech-online.com/">Electro-Tech-Online</a></li><li class='mega-menu-item mega-menu-item-type-custom mega-menu-item-object-custom mega-menu-item-1851' id='mega-menu-item-1851'><a class="mega-menu-link" href="https://forums.engineersgarage.com/">EG Forum Archive</a></li></ul> </li><li class='mega-menu-item mega-menu-item-type-custom mega-menu-item-object-custom mega-menu-item-has-children mega-menu-megamenu mega-align-bottom-left mega-menu-megamenu mega-menu-item-1868' id='mega-menu-item-1868'><a target="_blank" class="mega-menu-link" href="https://wtwh.me/9mk" aria-expanded="false" tabindex="0">DigiKey Store<span class="mega-indicator"></span></a> <ul class="mega-sub-menu"> <li class='mega-menu-item mega-menu-item-type-custom mega-menu-item-object-custom mega-menu-columns-1-of-3 mega-menu-item-1869' id='mega-menu-item-1869'><a target="_blank" class="mega-menu-link" href="https://wtwh.me/9ml">Cables, Wires</a></li><li class='mega-menu-item mega-menu-item-type-custom mega-menu-item-object-custom mega-menu-columns-1-of-3 mega-menu-item-1870' id='mega-menu-item-1870'><a target="_blank" class="mega-menu-link" href="https://wtwh.me/9mm">Connectors, Interconnect</a></li><li class='mega-menu-item mega-menu-item-type-custom mega-menu-item-object-custom mega-menu-columns-1-of-3 mega-menu-item-1871' id='mega-menu-item-1871'><a target="_blank" class="mega-menu-link" href="https://wtwh.me/9mn">Discrete</a></li><li class='mega-menu-item mega-menu-item-type-custom mega-menu-item-object-custom mega-menu-columns-1-of-3 mega-menu-clear mega-menu-item-1872' id='mega-menu-item-1872'><a target="_blank" class="mega-menu-link" href="https://wtwh.me/9mo">Electromechanical</a></li><li class='mega-menu-item mega-menu-item-type-custom mega-menu-item-object-custom mega-menu-columns-1-of-3 mega-menu-item-1873' id='mega-menu-item-1873'><a target="_blank" class="mega-menu-link" href="https://wtwh.me/9mp">Embedded Computers</a></li><li class='mega-menu-item mega-menu-item-type-custom mega-menu-item-object-custom mega-menu-columns-1-of-3 mega-menu-item-1874' id='mega-menu-item-1874'><a target="_blank" class="mega-menu-link" href="https://wtwh.me/9mq">Enclosures, Hardware, Office</a></li><li class='mega-menu-item mega-menu-item-type-custom mega-menu-item-object-custom mega-menu-columns-1-of-3 mega-menu-clear mega-menu-item-1875' id='mega-menu-item-1875'><a target="_blank" class="mega-menu-link" href="https://wtwh.me/9mr">Integrated Circuits (ICs)</a></li><li class='mega-menu-item mega-menu-item-type-custom mega-menu-item-object-custom mega-menu-columns-1-of-3 mega-menu-item-1876' id='mega-menu-item-1876'><a target="_blank" class="mega-menu-link" href="https://wtwh.me/9ms">Isolators</a></li><li class='mega-menu-item mega-menu-item-type-custom mega-menu-item-object-custom mega-menu-columns-1-of-3 mega-menu-item-1877' id='mega-menu-item-1877'><a target="_blank" class="mega-menu-link" href="https://wtwh.me/9mt">LED/Optoelectronics</a></li><li class='mega-menu-item mega-menu-item-type-custom mega-menu-item-object-custom mega-menu-columns-1-of-3 mega-menu-clear mega-menu-item-1878' id='mega-menu-item-1878'><a target="_blank" class="mega-menu-link" href="https://wtwh.me/9mu">Passive</a></li><li class='mega-menu-item mega-menu-item-type-custom mega-menu-item-object-custom mega-menu-columns-1-of-3 mega-menu-item-1879' id='mega-menu-item-1879'><a target="_blank" class="mega-menu-link" href="https://wtwh.me/9mv">Power, Circuit Protection</a></li><li class='mega-menu-item mega-menu-item-type-custom mega-menu-item-object-custom mega-menu-columns-1-of-3 mega-menu-item-1880' id='mega-menu-item-1880'><a target="_blank" class="mega-menu-link" href="https://wtwh.me/9mw">Programmers</a></li><li class='mega-menu-item mega-menu-item-type-custom mega-menu-item-object-custom mega-menu-columns-1-of-3 mega-menu-clear mega-menu-item-1881' id='mega-menu-item-1881'><a target="_blank" class="mega-menu-link" href="https://wtwh.me/9mx">RF, Wireless</a></li><li class='mega-menu-item mega-menu-item-type-custom mega-menu-item-object-custom mega-menu-columns-1-of-3 mega-menu-item-1882' id='mega-menu-item-1882'><a target="_blank" class="mega-menu-link" href="https://wtwh.me/9mk">Semiconductors</a></li><li class='mega-menu-item mega-menu-item-type-custom mega-menu-item-object-custom mega-menu-columns-1-of-3 mega-menu-item-1883' id='mega-menu-item-1883'><a target="_blank" class="mega-menu-link" href="https://wtwh.me/9my">Sensors, Transducers</a></li><li class='mega-menu-item mega-menu-item-type-custom mega-menu-item-object-custom mega-menu-columns-1-of-3 mega-menu-clear mega-menu-item-1884' id='mega-menu-item-1884'><a target="_blank" class="mega-menu-link" href="https://wtwh.me/9mz">Test Products</a></li><li class='mega-menu-item mega-menu-item-type-custom mega-menu-item-object-custom mega-menu-columns-1-of-3 mega-menu-item-1885' id='mega-menu-item-1885'><a target="_blank" class="mega-menu-link" href="https://wtwh.me/9mA">Tools</a></li></ul> </li><li class='mega-menu-item mega-menu-item-type-custom mega-menu-item-object-custom mega-menu-item-has-children mega-align-bottom-left mega-menu-flyout mega-menu-item-56062' id='mega-menu-item-56062'><a class="mega-menu-link" href="https://www.eeworldonline.com/learning-center" aria-expanded="false" tabindex="0">Learn<span class="mega-indicator"></span></a> <ul class="mega-sub-menu"> <li class='mega-menu-item mega-menu-item-type-custom mega-menu-item-object-custom mega-menu-item-80114' id='mega-menu-item-80114'><a class="mega-menu-link" href="https://www.eeworldonline.com/category/tech-tips/">eBooks/Tech Tips</a></li><li class='mega-menu-item mega-menu-item-type-custom mega-menu-item-object-custom mega-menu-item-76567' id='mega-menu-item-76567'><a target="_blank" class="mega-menu-link" href="https://www.eeworldonline.com/design-guide-library">Design Guides</a></li><li class='mega-menu-item mega-menu-item-type-custom mega-menu-item-object-custom mega-menu-item-77221' id='mega-menu-item-77221'><a target="_blank" class="mega-menu-link" href="https://www.eeworldonline.com/learning-center">Learning Center</a></li><li class='mega-menu-item mega-menu-item-type-custom mega-menu-item-object-custom mega-menu-item-81739' id='mega-menu-item-81739'><a target="_blank" class="mega-menu-link" href="https://www.eeworldonline.com/category/tech-toolboxes/">Tech Toolboxes</a></li><li class='mega-menu-item mega-menu-item-type-custom mega-menu-item-object-custom mega-menu-item-80113' id='mega-menu-item-80113'><a class="mega-menu-link" href="https://gateway.on24.com/wcc/experience/elitewtwhmedia/2927718/4415581/eeworld">Webinars & Digital Events</a></li></ul> </li><li class='mega-menu-item mega-menu-item-type-custom mega-menu-item-object-custom mega-menu-item-has-children mega-align-bottom-left mega-menu-flyout mega-menu-item-55895' id='mega-menu-item-55895'><a class="mega-menu-link" aria-expanded="false" tabindex="0">Resources<span class="mega-indicator"></span></a> <ul class="mega-sub-menu"> <li class='mega-menu-item mega-menu-item-type-custom mega-menu-item-object-custom mega-menu-item-77693' id='mega-menu-item-77693'><a class="mega-menu-link" href="https://www.eeworldonline.com/category/digital-issues/">Digital Issues</a></li><li class='mega-menu-item mega-menu-item-type-custom mega-menu-item-object-custom mega-menu-item-77694' id='mega-menu-item-77694'><a class="mega-menu-link" href="https://eetrainingdays.com/">EE Training Days</a></li><li class='mega-menu-item mega-menu-item-type-custom mega-menu-item-object-custom mega-menu-item-55899' id='mega-menu-item-55899'><a target="_blank" class="mega-menu-link" href="https://www.eeworldonline.com/2023-leap-awards-winners-are-announced/">LEAP Awards</a></li><li class='mega-menu-item mega-menu-item-type-custom mega-menu-item-object-custom mega-menu-item-77695' id='mega-menu-item-77695'><a class="mega-menu-link" href="https://www.eeworldonline.com/category/podcasts/">Podcasts</a></li><li class='mega-menu-item mega-menu-item-type-custom mega-menu-item-object-custom mega-menu-item-77375' id='mega-menu-item-77375'><a target="_blank" class="mega-menu-link" href="https://www.eeworldonline.com/ee-world-webinars-and-digital-events/">Webinars / Digital Events</a></li><li class='mega-menu-item mega-menu-item-type-custom mega-menu-item-object-custom mega-menu-item-55898' id='mega-menu-item-55898'><a class="mega-menu-link" href="http://www.engineeringwhitepapers.com/category/electricalelectronic/">White Papers</a></li><li class='mega-menu-item mega-menu-item-type-custom mega-menu-item-object-custom mega-menu-item-62203' id='mega-menu-item-62203'><a class="mega-menu-link" href="https://www.designworldonline.com/category/news/engineering-diversity/">Engineering Diversity & Inclusion</a></li><li class='mega-menu-item mega-menu-item-type-custom mega-menu-item-object-custom mega-menu-item-55896' id='mega-menu-item-55896'><a class="mega-menu-link" href="https://www.DesignFast.com">DesignFast</a></li></ul> </li><li class='mega-menu-item mega-menu-item-type-custom mega-menu-item-object-custom mega-align-bottom-left mega-menu-flyout mega-menu-item-80115' id='mega-menu-item-80115'><a class="mega-menu-link" href="https://www.engineersgarage.com/subscribe-engineers-garage-newsletter/" tabindex="0">Subscribe</a></li><li class='mega-menu-item mega-menu-item-type-custom mega-menu-item-object-custom mega-align-bottom-left mega-menu-flyout mega-menu-item-80423' id='mega-menu-item-80423'><a class="mega-menu-link" href="https://www.engineersgarage.com/join-us-as-a-guest-post-writer/" tabindex="0">Guest Post Guidelines</a></li><li class="menu-item search"><a href="#" class="search-toggle"><i class="icon-search"></i></a></li></ul></div></div></nav><div style="padding-top:10px;text-align:center"> <div id='div-gpt-eg_largeleader'> <script> googletag.cmd.push(function() { googletag.display('div-gpt-eg_largeleader'); }); </script> </div> </div><div class="site-inner"><div class="wrap"><div class="content-sidebar-wrap"><main class="content"><article class="type-post entry" aria-label="Automatic Software Update by IoT Device over FTP Protocol &#8211; IOT Part 44"><header class="entry-header"><h1 class="entry-title">Automatic Software Update by IoT Device over FTP Protocol &#8211; IOT Part 44</h1> <p class="entry-meta">By <span class="entry-author"><a href="https://www.engineersgarage.com/author/priya/" class="entry-author-link" rel="author"><span class="entry-author-name">Priya</span></a></span> <time class="entry-time">November 20, 2024</time> </p></header><div class="entry-content"><div class="addtoany_share_save_container addtoany_content addtoany_content_top"><div class="a2a_kit a2a_kit_size_16 addtoany_list" data-a2a-url="https://www.engineersgarage.com/automatic-software-update-by-iot-device-over-ftp-protocol-iot-part-44/" data-a2a-title="Automatic Software Update by IoT Device over FTP Protocol – IOT Part 44"><a class="a2a_button_facebook" href="https://www.addtoany.com/add_to/facebook?linkurl=https%3A%2F%2Fwww.engineersgarage.com%2Fautomatic-software-update-by-iot-device-over-ftp-protocol-iot-part-44%2F&amp;linkname=Automatic%20Software%20Update%20by%20IoT%20Device%20over%20FTP%20Protocol%20%E2%80%93%20IOT%20Part%2044" title="Facebook" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_x" href="https://www.addtoany.com/add_to/x?linkurl=https%3A%2F%2Fwww.engineersgarage.com%2Fautomatic-software-update-by-iot-device-over-ftp-protocol-iot-part-44%2F&amp;linkname=Automatic%20Software%20Update%20by%20IoT%20Device%20over%20FTP%20Protocol%20%E2%80%93%20IOT%20Part%2044" title="X" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_linkedin" href="https://www.addtoany.com/add_to/linkedin?linkurl=https%3A%2F%2Fwww.engineersgarage.com%2Fautomatic-software-update-by-iot-device-over-ftp-protocol-iot-part-44%2F&amp;linkname=Automatic%20Software%20Update%20by%20IoT%20Device%20over%20FTP%20Protocol%20%E2%80%93%20IOT%20Part%2044" title="LinkedIn" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_reddit" href="https://www.addtoany.com/add_to/reddit?linkurl=https%3A%2F%2Fwww.engineersgarage.com%2Fautomatic-software-update-by-iot-device-over-ftp-protocol-iot-part-44%2F&amp;linkname=Automatic%20Software%20Update%20by%20IoT%20Device%20over%20FTP%20Protocol%20%E2%80%93%20IOT%20Part%2044" title="Reddit" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_pinterest" href="https://www.addtoany.com/add_to/pinterest?linkurl=https%3A%2F%2Fwww.engineersgarage.com%2Fautomatic-software-update-by-iot-device-over-ftp-protocol-iot-part-44%2F&amp;linkname=Automatic%20Software%20Update%20by%20IoT%20Device%20over%20FTP%20Protocol%20%E2%80%93%20IOT%20Part%2044" title="Pinterest" rel="nofollow noopener" target="_blank"></a><a class="a2a_dd addtoany_share_save addtoany_share" href="https://www.addtoany.com/share"></a></div></div><div style="text-align: justify;"><span style="font-size: 18px;"><span style="font-family: times new roman,times,serif;">In the <a href="https://www.engineersgarage.com/application-of-ftp-protocol-in-internet-of-things-iot-part-43/">previous tutorial</a>, <a href="https://www.engineersgarage.com/Articles/File-Transfer-Protocol-IoT" target="_blank" rel="noopener noreferrer">FTP protocol </a>and file transfer over it between a Client and Server was discussed. The FTP protocol can really useful in many IoT applications. Many <a href="https://www.engineersgarage.com/Articles/IOT-Architecture-Standards-Protocols" target="_blank" rel="noopener noreferrer">IOT </a>devices are installed in places like nuclear plant, electrical grids and other industrial setups where these types of devices can get some bugs and need application software updates to fix them. On standard IoT protocols like MQTT, CoAP, etc, it is hard to update and reinstall application software because most of the IoT protocols are designed for IoT communication between devices and network but not for tasks like application updates. The application update on an IoT device is only possible over <a href="https://www.engineersgarage.com/Articles/TCP-IP-Stack-Operations-IoT-Applications" target="_blank" rel="noopener noreferrer">TCP/IP </a>stack. The FTP protocol is the specifically designed protocol over TCP/IP stack for file transfer between a client and a server. So, it can be used by an IoT device to download updated application software and reinstall it once downloaded. </span></span></div> <div style="text-align: justify;"></div> <div style="text-align: justify;"><span style="font-size: 18px;"><span style="font-family: times new roman,times,serif;">In this project, a Raspberry Pi is used as an IoT device which is running a simple python application to blink an LED. So, the IoT device designed in this project is a Raspberry Pi interfaced with an LED. One another python application also keeps running on the daughter board which keeps looking for an update of the LED blinking code from a FTP server. The Update seeking application connects with the FTP server and tracks the version number of the LED blinking code available at the FTP server. If the version number of the LED blinking code is changed, the update seeking code downloads the updated code and reinstall it on the Raspberry Pi. The update process takes place automatically and does not require any human intervention. So, uploading and downloading files from FTP is reliable and fast that many applications uses FTP in update severs. </span></span></div> <div style="text-align: justify;"></div> <div> <div style="text-align: justify;"><span style="font-size: 18px;"><span style="font-family: times new roman,times,serif;"><strong>Components Required &#8211; </strong></span></span></div> <div style="text-align: justify;"></div> <div style="text-align: justify;"><span style="font-size: 18px;"><span style="font-family: times new roman,times,serif;">1) Raspberry Pi 3</span></span></div> <div style="text-align: justify;"><span style="font-size: 18px;"><span style="font-family: times new roman,times,serif;">2) LED </span></span></div> <div style="text-align: justify;"><span style="font-size: 18px;"><span style="font-family: times new roman,times,serif;">3) 1K Ω Resistor</span></span></div> <div style="text-align: justify;"><span style="font-size: 18px;"><span style="font-family: times new roman,times,serif;">4) Jumper Wires</span></span></div> <div style="text-align: justify;"></div> <div style="text-align: justify;"><span style="font-size: 18px;"><span style="font-family: times new roman,times,serif;"><strong>Software Required &#8211; </strong></span></span></div> <div style="text-align: justify;"></div> <div style="text-align: justify;"><span style="font-size: 18px;"><span style="font-family: times new roman,times,serif;">1) Raspbian OS</span></span></div> <div style="text-align: justify;"><span style="font-size: 18px;"><span style="font-family: times new roman,times,serif;">2) Leafpad/GNU Nano/Python 3 IDLE (for writing python scripts)</span></span></div> <div style="text-align: justify;"></div> <div style="text-align: justify;"><span style="font-size: 18px;"><span style="font-family: times new roman,times,serif;"><strong>Block Diagram &#8211;</strong></span></span></div> <div style="text-align: justify;"></div> <div> <p style="text-align: justify;"><span style="font-size: 18px;"><span style="font-family: times new roman,times,serif;"><img decoding="async" style="display: block; margin-left: auto; margin-right: auto;" title="Block Diagram of Raspberry Pi 3 based IoT FTP Client" src="https://www.engineersgarage.com/wp-content/uploads/2019/07/Block-Diagram-Raspberry-Pi-3-based-IoT-FTP-Client.jpg" alt="Block Diagram of Raspberry Pi 3 based IoT FTP Client" /></span></span></p> <div style="text-align: justify;"></div> <div style="text-align: center;"><span style="font-family: verdana,geneva,sans-serif;"><em>Fig. 1: Block Diagram of Raspberry Pi 3 based IoT FTP Client</em></span></div> <div style="text-align: justify;"></div> <div style="text-align: justify;"><span style="font-size: 18px;"><span style="font-family: times new roman,times,serif;"><strong>Circuit Connections &#8211; </strong></span></span></div> <div style="text-align: justify;"></div> <div style="text-align: justify;"><span style="font-size: 18px;"><span style="font-family: times new roman,times,serif;">A simple IOT device is designed in this project. It has an LED interfaced with the Raspberry Pi 3. The device is designed by assembling the following components together. </span></span></div> <div style="text-align: justify;"></div> <div style="text-align: justify;"><span style="font-size: 18px;"><span style="font-family: times new roman,times,serif;"><strong>Raspberry Pi 3 &#8211; </strong>Raspberry Pi 3 is the third generation Raspberry Pi. It is a miniature marvel, packing considerable computing power into a footprint no larger than a credit card. The processor at the heart of the Raspberry Pi system is a Broadcom BCM2837 system-on-chip (SoC) which houses a 1.2 GHz Quad Core ARM Cortex-A53 processor. The vast majority of the system’s components, including its central and graphics processing units along with the audio and communications hardware, are built onto that single component along with 1 GB LPDDR2 memory chip at the centre of the board. It is not just this SoC design that makes the BCM2837 different to the processor found in a typical desktop or laptop, however, it also uses a different instruction set architecture (ISA), known as ARM. </span></span></div> <div style="text-align: justify;"><span style="font-size: 18px;"><span style="font-family: times new roman,times,serif;">The Pi comes equipped with on-board 10/100 BaseT Ethernet Socket, HDMI and Composite RCA port for video, 3.5 mm audio output jack, 15-pin MIPI Camera Serial Interface (CSI-2), Display Serial Interface, Bluetooth 4.1, 802.11 b/g/n Wireless LAN, Micro SDIO for Micro SD Card, 4 USB 2.0 Connectors, 40 pin header containing 27 GPIO pins and Micro USB socket for power supply.    </span></span></div> <div style="text-align: justify;"></div> <div style="text-align: justify;"><span style="font-size: 18px;"><span style="font-family: times new roman,times,serif;">The Raspberry Pi is a single board computer and is designed to run an operating system called GNU/Linux Raspbian. Hereafter referred to simply as Linux. Unlike Windows or OS X, Linux is open source, so it is possible to download the source code for the entire operating system and make whatever changes desired. The Raspberry Pi 3 can also run Windows 10 IoT and many other embedded operating systems most of which are Linux derivatives. The operating system should be loaded in a MicroSD card and boot from it. With powerful computing resources, large number of multimedia interfaces and GPIO  pins, Raspberry Pi 3 is a suitable choice to run a software oriented complex IoT or Embedded project that requires sufficient computing power as well as large scale sensor connectivity. With on-board Bluetooth and Wi-Fi, this 3rd generation Pi can be easily deployed in an IoT network. The key specifications of the Raspberry Pi 3 are summarized in the following table &#8211;</span></span></div> </div> <div style="text-align: justify;"></div> <div style="text-align: justify;"><span style="font-size: 18px;"><span style="font-family: times new roman,times,serif;"><img decoding="async" style="display: block; margin-left: auto; margin-right: auto;" title="Table Listing Technical Specifications of Raspberry Pi 3" src="https://www.engineersgarage.com/wp-content/uploads/2019/07/Table-Listing-Technical-Specifications-Raspberry-Pi-3-1.jpg" alt="Table Listing Technical Specifications of Raspberry Pi 3" /></span></span></div> <div style="text-align: center;"><span style="font-family: verdana,geneva,sans-serif;"><em><span style="font-size: 12.8px;">Fig. 2: Table listing technical specifications of Raspberry Pi 3</span></em></span></div> <div style="text-align: center;"></div> <div style="text-align: justify;"><span style="font-size: 18px;"><span style="font-family: times new roman,times,serif;">The 40-pin header on Raspberry Pi 3 has the following pin configuration &#8211; </span></span></div> <div style="text-align: justify;"></div> <div style="text-align: justify;"><span style="font-size: 18px;"><span style="font-family: times new roman,times,serif;"><img decoding="async" style="display: block; margin-left: auto; margin-right: auto;" title="Table Listing Pin Configuration of 40-Pin Header of Raspberry Pi" src="https://www.engineersgarage.com/wp-content/uploads/2019/07/Table-Listing-Pin-Configuration-40-Pin-Header-Raspberry-Pi.jpg" alt="Table Listing Pin Configuration of 40-Pin Header of Raspberry Pi" /></span></span></div> <div style="text-align: justify;"></div> <div style="text-align: center;"><span style="font-family: verdana,geneva,sans-serif;"><em>Fig. 3: Table listing pin configuration of 40-pin header of Raspberry Pi</em></span></div> <div style="text-align: center;"></div> <div style="text-align: justify;"><span style="font-size: 18px;"><span style="font-family: times new roman,times,serif;"><img decoding="async" style="display: block; margin-left: auto; margin-right: auto;" title="Table Listing Pin Configuration of 40-Pin Header of Raspberry Pi" src="https://www.engineersgarage.com/wp-content/uploads/2019/07/Table-Listing-Pin-Configuration-40-Pin-Header-Raspberry-Pi.jpg" alt="Table Listing Pin Configuration of 40-Pin Header of Raspberry Pi" /></span></span></div> <div style="text-align: justify;"></div> <div style="text-align: center;"><span style="font-family: verdana,geneva,sans-serif;"><em><span style="font-size: 12.8px;">Fig. 4: Table listing pin configuration of 40-pin header of Raspberry Pi</span></em></span></div> <div style="text-align: justify;"></div> <div> <div style="text-align: justify;"><span style="font-size: 18px;"><span style="font-family: times new roman,times,serif;">In this project, an LED is interfaced to GPIO18 pin of the Raspberry Pi. The board is powered by an USB adapter. </span></span></div> <div style="text-align: justify;"></div> <div style="text-align: justify;"><span style="font-size: 18px;"><span style="font-family: times new roman,times,serif;"><strong>LED &#8211; </strong>An LED is connected at GPIO18 of the Raspberry Pi. Its anode is connected to Raspberry Pi pin and cathode is cathode is connected to ground. The LED is connected to Pi via a 1K ohm pull-up resistor in series. </span></span></div> <div style="text-align: justify;"></div> <div style="text-align: justify;"><span style="font-size: 18px;"><span style="font-family: times new roman,times,serif;"><strong>Power Supply &#8211; </strong>The power source is connected to the Raspberry Pi. The Pi should be powered by a 5V adapter with 2.5 A current output. The adaptor can be connected at Micro USB socket. </span></span></div> <div style="text-align: justify;"></div> <div style="text-align: justify;"><span style="font-size: 18px;"><span style="font-family: times new roman,times,serif;"><strong>How the circuit works &#8211; </strong></span></span></div> <div style="text-align: justify;"></div> <div style="text-align: justify;"><span style="font-size: 18px;"><span style="font-family: times new roman,times,serif;">The IoT device designed here is simply a Raspberry Pi 3 controlling an LED. For controlling the LED and keeping the Pi connected to a FTP server, two separate python scripts need to be run on the daughter board. One python script controls the LED blinking and another python script manages to automatically update the LED blinking script. First of all, the Raspberry Pi needs to loaded with an operating system. Here the official operating system for the Raspberry Pi &#8211; Linux Raspbian is installed on it. While installing the operating system, the Raspberry Pi should be connected to a display monitor using HDMI cable and a keyboard and mouse through USB ports. </span></span></div> <div style="text-align: justify;"></div> <div style="text-align: justify;"><span style="font-size: 18px;"><span style="font-family: times new roman,times,serif;">For installing the Raspbian Operating System on MicroSD card, first download the latest image of Raspbian OS from Raspberry Pi website from the following link &#8211; </span></span></div> <div style="text-align: justify;"></div> <div style="text-align: justify;"><span style="font-size: 18px;"><span style="font-family: times new roman,times,serif;"><a href="https://www.raspberrypi.org/downloads/raspbian/" target="_blank" rel="noopener noreferrer"><strong>Raspbian Operating System </strong></a></span></span></div> <div style="text-align: justify;"></div> <div style="text-align: justify;"><span style="font-size: 18px;"><span style="font-family: times new roman,times,serif;">Copy the image of the latest Raspbian OS in the MicroSD card. If the MicroSD card used is 32 GB or below, it must be formatted to FAT32 (file system) before copying the image or if the MicroSD card is more than 32 GB, it should be formatted to exFAT before copying the image. Extract the OS Zip and copy it to the MicroSD card. The image can be written to the card by connecting the card to a laptop or PC using a MicroSD card reader. After copying the extracted image, insert the card in the MicroSD slot as shown below &#8211;</span></span></div> <div style="text-align: justify;"></div> <div style="text-align: justify;"><span style="font-size: 18px;"><span style="font-family: times new roman,times,serif;"><img decoding="async" style="display: block; margin-left: auto; margin-right: auto;" title="Typical Image of Raspberry Pi 3 MicroSD Card Slot " src="https://www.engineersgarage.com/wp-content/uploads/2019/07/Typical-Image-Raspberry-Pi-3-MicroSD-Card-Slot-1.jpg" alt="Typical Image of Raspberry Pi 3 MicroSD Card Slot " /></span></span></div> <div style="text-align: center;"><span style="font-family: verdana,geneva,sans-serif;"><em><span style="font-size: 12.8px;">Fig. 5: Typical Image of Raspberry Pi 3 MicroSD Card Slot </span></em></span></div> <div style="text-align: justify;"></div> </div> <div> <div style="text-align: justify;"><span style="font-size: 18px;"><span style="font-family: times new roman,times,serif;">Connect the Raspberry Pi with a display monitor using HDMI Cable, a keyboard and a mouse. Power on the board by connecting to a power adaptor. The red LED on the board will start blinking and the OS will start booting from the MicroSD card. The boot process will display on the monitor and once the boot is complete, green LED will light up on the Raspberry Pi. After successfully installing Raspbian OS on Raspberry Pi, it is recommended to perform software update. It can be done by running the following Linux commands in the Linux Terminal &#8211; </span></span></div> <div style="text-align: justify;"></div> <div style="text-align: justify;"><span style="font-size: 18px;"><span style="font-family: times new roman,times,serif;">$ sudo apt-get update</span></span></div> <div style="text-align: justify;"><span style="font-size: 18px;"><span style="font-family: times new roman,times,serif;">$ sudo apt-get upgrade </span></span></div> <div style="text-align: justify;"></div> <div style="text-align: justify;"><span style="font-size: 18px;"><span style="font-family: times new roman,times,serif;">After installing the Raspbian, it&#8217;s time to write and run the python scripts on Raspbian. A python script can be written on Raspbian using a text editor like Leafpad or GNU Nano. The python script can also be written using the default python IDE like Python 2 IDLE or Python 3 IDLE. Open the Python 3 IDLE by navigating through Menu -&gt; Programming -&gt; Python 3 IDLE. A window called Python 3.4.2 Shell will open up. Write the python scripts and save them to a directory. </span></span></div> <div style="text-align: justify;"></div> <div style="text-align: justify;"><span style="font-size: 18px;"><span style="font-family: times new roman,times,serif;"> The python script written for this project should run at the startup as the Pi 3 is powered on. The script runs an infinite loop so it never ends. There are some methods by which the Raspberry Pi can be configured to run a python script on start up. Any of the following methods can be used &#8211; </span></span></div> <div style="text-align: justify;"></div> <div style="text-align: justify;"><span style="font-size: 18px;"><span style="font-family: times new roman,times,serif;">1) Editing rc.local &#8211; </span></span></div> <div style="text-align: justify;"></div> <div style="text-align: justify;"><span style="font-size: 18px;"><span style="font-family: times new roman,times,serif;">The commands can be added to the file /etc/rc.local to run a program or command when the raspberry Pi boots up. This is especially useful if the Pi has to plug in to power headless, and have it run a program without configuration or a manual start. The file should be edited with root by running the following commands in the Linux Terminal &#8211; </span></span></div> <div style="text-align: justify;"></div> <div style="text-align: justify;"><span style="font-size: 18px;"><span style="font-family: times new roman,times,serif;">sudo nano /etc/rc.local </span></span></div> <div style="text-align: justify;"></div> <div style="text-align: justify;"><span style="font-size: 18px;"><span style="font-family: times new roman,times,serif;">Now add commands to execute the python script using complete file path and add an ampersand at the end of the command so that the script runs in a separate process and booting could continue.  The following command should be added where the python scripts are saved as FTP.py and CODE.py- </span></span></div> <div style="text-align: justify;"></div> <div style="text-align: justify;"><span style="font-size: 18px;"><span style="font-family: times new roman,times,serif;">sudo python /home/pi/FTP.py &amp;</span></span></div> <div style="text-align: justify;"><span style="font-size: 18px;"><span style="font-family: times new roman,times,serif;">exit 0</span></span></div> <div style="text-align: justify;"></div> <div style="text-align: justify;"><span style="font-size: 18px;"><span style="font-family: times new roman,times,serif;">The command should be added just before the line exit 0 in the rc.local file. </span></span></div> <div style="text-align: justify;"></div> <div style="text-align: justify;"><span style="font-size: 18px;"><span style="font-family: times new roman,times,serif;">2) Editing .bashrc &#8211; </span></span></div> <div style="text-align: justify;"></div> <div style="text-align: justify;"><span style="font-size: 18px;"><span style="font-family: times new roman,times,serif;">The .bashrc is a hidden file in the home folder that contains user configuration options. Open the .bshrc file by running the following commands in the Linux terminal &#8211; </span></span></div> <div style="text-align: justify;"></div> <div style="text-align: justify;"><span style="font-size: 18px;"><span style="font-family: times new roman,times,serif;">sudo nano /home/pi/.bashrc</span></span></div> <div style="text-align: justify;"></div> <div style="text-align: justify;"><span style="font-size: 18px;"><span style="font-family: times new roman,times,serif;">Add the following lines after the last line in the file &#8211; </span></span></div> <div style="text-align: justify;"></div> <div style="text-align: justify;"><span style="font-size: 18px;"><span style="font-family: times new roman,times,serif;">echo Running at boot </span></span></div> <div style="text-align: justify;"><span style="font-size: 18px;"><span style="font-family: times new roman,times,serif;">sudo python /home/pi/FTP.py</span></span></div> <div style="text-align: justify;"></div> <div style="text-align: justify;"><span style="font-size: 18px;"><span style="font-family: times new roman,times,serif;">3) Adding script to init.d directory &#8211; </span></span></div> <div style="text-align: justify;"></div> <div style="text-align: justify;"><span style="font-size: 18px;"><span style="font-family: times new roman,times,serif;">The  init.d directory contains the scripts which are started during the boot process (in addition, all programs here are  executed when Pi is shutdown or rebooted). Add the script to be run at startup to the init.d directory using the following commands &#8211; </span></span></div> <div style="text-align: justify;"></div> <div style="text-align: justify;"><span style="font-size: 18px;"><span style="font-family: times new roman,times,serif;">sudo cp /home/pi/securitysystem.py /etc/init.d/</span></span></div> <div style="text-align: justify;"></div> <div style="text-align: justify;"><span style="font-size: 18px;"><span style="font-family: times new roman,times,serif;">Move to the init directory and open the python script by running the following commands &#8211; </span></span></div> <div style="text-align: justify;"></div> <div style="text-align: justify;"><span style="font-size: 18px;"><span style="font-family: times new roman,times,serif;">cd /etc/init.d</span></span></div> <div style="text-align: justify;"><span style="font-size: 18px;"><span style="font-family: times new roman,times,serif;">sudo nano FTP.py</span></span></div> <div style="text-align: justify;"></div> <div style="text-align: justify;"><span style="font-size: 18px;"><span style="font-family: times new roman,times,serif;">Add the following lines to the python script to make it a Linux Standard Base (LSB) &#8211; </span></span></div> <div style="text-align: justify;"></div> <div style="text-align: justify;"><span style="font-size: 18px;"><span style="font-family: times new roman,times,serif;"># /etc/init.d/sample.py</span></span></div> <div style="text-align: justify;"><span style="font-size: 18px;"><span style="font-family: times new roman,times,serif;">### BEGIN INIT INFO</span></span></div> <div style="text-align: justify;"><span style="font-size: 18px;"><span style="font-family: times new roman,times,serif;"># Provides:          sample.py</span></span></div> <div style="text-align: justify;"><span style="font-size: 18px;"><span style="font-family: times new roman,times,serif;"># Required-Start:    $remote_fs $syslog</span></span></div> <div style="text-align: justify;"><span style="font-size: 18px;"><span style="font-family: times new roman,times,serif;"># Required-Stop:     $remote_fs $syslog</span></span></div> <div style="text-align: justify;"><span style="font-size: 18px;"><span style="font-family: times new roman,times,serif;"># Default-Start:     2 3 4 5</span></span></div> <div style="text-align: justify;"><span style="font-size: 18px;"><span style="font-family: times new roman,times,serif;"># Default-Stop:      0 1 6</span></span></div> <div style="text-align: justify;"><span style="font-size: 18px;"><span style="font-family: times new roman,times,serif;"># Short-Description: Start daemon at boot time</span></span></div> <div style="text-align: justify;"><span style="font-size: 18px;"><span style="font-family: times new roman,times,serif;"># Description:       Enable service provided by daemon.</span></span></div> <div style="text-align: justify;"><span style="font-size: 18px;"><span style="font-family: times new roman,times,serif;">### END INIT INFO</span></span></div> <div style="text-align: justify;"></div> <div style="text-align: justify;"><span style="font-size: 18px;"><span style="font-family: times new roman,times,serif;">Make the python script in the init directory executable by changing its permission by running the following command &#8211;</span></span></div> <div style="text-align: justify;"></div> <div style="text-align: justify;"><span style="font-size: 18px;"><span style="font-family: times new roman,times,serif;">sudo chmod +x FTP.py </span></span></div> <div style="text-align: justify;"></div> <div style="text-align: justify;"><span style="font-size: 18px;"><span style="font-family: times new roman,times,serif;">Then run the following command &#8211; </span></span></div> <div style="text-align: justify;"></div> <div style="text-align: justify;"><span style="font-size: 18px;"><span style="font-family: times new roman,times,serif;">sudo update-rc.d FTP.py defaults</span></span></div> <div style="text-align: justify;"></div> <div style="text-align: justify;"><span style="font-size: 18px;"><span style="font-family: times new roman,times,serif;">Next reboot the Pi by running the following command &#8211; </span></span></div> <div style="text-align: justify;"></div> <div style="text-align: justify;"><span style="font-size: 18px;"><span style="font-family: times new roman,times,serif;">sudo reboot</span></span></div> <div style="text-align: justify;"></div> <div style="text-align: justify;"><span style="font-size: 18px;"><span style="font-family: times new roman,times,serif;">Any of the above methods can be used to make the python script run on startup. Now the Pi 3 can be disconnected with the display monitor, keyboard and mouse. Interface the LED with the Raspberry Pi and power it up. </span></span></div> <div style="text-align: justify;"></div> <div style="text-align: justify;"><span style="font-size: 18px;"><span style="font-family: times new roman,times,serif;">Now when the Pi will power up, it will run both the scripts on start up. The main script (CODE.py) controls the blinking of LED. It let the LED blink over a period of few seconds. The other script (FTP.py) keeps checking for file on FTP server for version of the main file. The file checked by the script and containing version number is named as &#8216;Readme.txt&#8217; and simply contains version number of the LED Blinking script as plain text. If update script (FTP.py) finds any changes in the version indication file (Readme.txt) on FTP server, which means the application file is changed, (in which case the period of blinking led could have been changed in CODE.py uploaded to FTP server), it indicates that new version of the main file is available. Now the updated version of the main file is downloaded from FTP server. After downloading, the main script is restarted so the changes can take effect and thus the led blink duration is then changed. </span></span></div> <div style="text-align: justify;"><span style="font-size: 18px;"><span style="font-family: times new roman,times,serif;">The FTP.py runs on the startup and checks for the application code (CODE.py) from the FTP server. The FTP.py itself manages to download, install and run the main code i.e. CODE.py. </span></span></div> <div style="text-align: justify;"></div> <div style="text-align: justify;"><span style="font-size: 18px;"><span style="font-family: times new roman,times,serif;"><strong>Programming Guide &#8211; </strong></span></span></div> <div style="text-align: justify;"></div> <div style="text-align: justify;"><span style="font-size: 18px;"><span style="font-family: times new roman,times,serif;">There are two python scripts written which run on the startup. One of the python script simply blinks LED connected to the Raspberry Pi and it is saved as CODE.py. This script begins with importing required libraries &#8211; RPi.GPIO library for handing digital input and output and time library for time delays. RPi.GPIO is a module to control Raspberry Pi GPIO channels. There may be more than one script/circuit on the GPIO of the Raspberry Pi. As a result of this, if RPi.GPIO detects that a pin has been configured to something other than the default (input), it may give a warning when the Pi tries to configure the script. To disable these warnings, false argument is passed to setwarning() method. A variable is initialized which is set to 24. The GPIO numbering system is set to BCM which refers to the channel numbers on Broadcom SoC. The BCM channel number 24 is configured as GPIO output using the setup() method and it is set to LOW using output() method. An infinite loop is run in which the GPIO output is set to HIGH and LOW alternatively using output() method and time delay is provided using sleep() method of time module which accepts delay interval as parameter in milliseconds. </span></span></div> <div style="text-align: justify;"></div> <div style="text-align: justify;"><span style="font-size: 18px;"><span style="font-family: times new roman,times,serif;">The second file (FTP.py) is the update script. The application file can be any script file which in this case is CODE.py. The update script is divided into four parts &#8211;</span></span></div> <div style="text-align: justify;"></div> <div style="text-align: justify;"><span style="font-size: 18px;"><span style="font-family: times new roman,times,serif;">1. Setting FTP server</span></span></div> <div style="text-align: justify;"><span style="font-size: 18px;"><span style="font-family: times new roman,times,serif;">2. Connecting to FTP server </span></span></div> <div style="text-align: justify;"><span style="font-size: 18px;"><span style="font-family: times new roman,times,serif;">3. Downloading Version file and comparing</span></span></div> <div style="text-align: justify;"><span style="font-size: 18px;"><span style="font-family: times new roman,times,serif;">4. Downloading the Application File and restarting the Application</span></span></div> <div style="text-align: justify;"></div> <div style="text-align: justify;"><span style="font-size: 18px;"><span style="font-family: times new roman,times,serif;">1.<strong> Setting Server: </strong>The FTP server must contain two files, readme.txt (Which contains the version information) and code.py (Containing Main application code file). Any open FTP server like www.biz.nf can be used for web hosting. Create an account there and just upload those two files.</span></span></div> <div style="text-align: justify;"></div> <div style="text-align: justify;"><span style="font-size: 18px;"><span style="font-family: times new roman,times,serif;">2. <strong>Connecting to FTP server: </strong>To connect to FTP server a python library that supports FTP commands “ftplib” is imported. It should be imported into top of the update script.</span></span></div> <div style="text-align: justify;"></div> <div style="text-align: justify;"><span style="font-size: 18px;"><span style="font-family: times new roman,times,serif;">import ftplib as ftp</span></span></div> <div style="text-align: justify;"></div> <div style="text-align: justify;"><span style="font-size: 18px;"><span style="font-family: times new roman,times,serif;">To connect to ftp server, the connection is started on a session variable. The server address and its username and password are provided to the variable.</span></span></div> <div style="text-align: justify;"></div> <div style="text-align: justify;"><span style="font-size: 18px;"><span style="font-family: times new roman,times,serif;">session = ftp.FTP(&#8216;192.168.1.100&#8242;,&#8217;iot_user&#8217;,&#8217;123123123&#8242;)</span></span></div> <div style="text-align: justify;"></div> <div style="text-align: justify;"><span style="font-size: 18px;"><span style="font-family: times new roman,times,serif;">3. <strong>Downloading the Version File and Comparing:</strong> The readme file on server contains information about the current version of the Application code. Also in the update script, current version is defined with a variable.</span></span></div> <div style="text-align: justify;"></div> <div style="text-align: justify;"><span style="font-size: 18px;"><span style="font-family: times new roman,times,serif;">c_version = &#8220;1&#8221; </span></span></div> <div style="text-align: justify;"></div> <div style="text-align: justify;"><span style="font-size: 18px;"><span style="font-family: times new roman,times,serif;">The readme file from FTP server is downloaded and stored into a variable “version”. The file is opened and read to detect version number. </span></span></div> <div style="text-align: justify;"></div> <div style="text-align: justify;"><span style="font-size: 18px;"><span style="font-family: times new roman,times,serif;">with open(&#8216;README.txt&#8217;, &#8216;r&#8217;) as myfile:</span></span></div> <div style="text-align: justify;"><span style="font-size: 18px;"><span style="font-family: times new roman,times,serif;">version=myfile.read().replace(&#8216;n&#8217;, &#8221;)</span></span></div> <div style="text-align: justify;"></div> <div style="text-align: justify;"><span style="font-size: 18px;"><span style="font-family: times new roman,times,serif;">After storing, the version variables are compared and if changes are found, the downloading process of Application code from FTP server is initiated.</span></span></div> <div style="text-align: justify;"></div> <div style="text-align: justify;"><span style="font-size: 18px;"><span style="font-family: times new roman,times,serif;">if(version != c_version):</span></span></div> <div style="text-align: justify;"><span style="font-size: 18px;"><span style="font-family: times new roman,times,serif;">global c_version</span></span></div> <div style="text-align: justify;"><span style="font-size: 18px;"><span style="font-family: times new roman,times,serif;">c_version = version</span></span></div> <div style="text-align: justify;"></div> <div style="text-align: justify;"><span style="font-size: 18px;"><span style="font-family: times new roman,times,serif;">4. <strong>Downloading the Application File and restarting the Application:</strong> After the comparison between version and detection of version change,  the download of updated Code.py from FTP server is initiated.</span></span></div> <div style="text-align: justify;"></div> <div style="text-align: justify;"><span style="font-size: 18px;"><span style="font-family: times new roman,times,serif;">session.retrbinary(&#8216;RETR CODE.py&#8217;, open(&#8216;CODE.py&#8217;, &#8216;wb&#8217;).write)</span></span></div> <div style="text-align: justify;"></div> <div style="text-align: justify;"><span style="font-size: 18px;"><span style="font-family: times new roman,times,serif;">The file is retrieved and stored as the same name as the main Application file. First the running application is killed.</span></span></div> <div style="text-align: justify;"><span style="font-size: 18px;"><span style="font-family: times new roman,times,serif;">check_kill_process(&#8220;CODE.py&#8221;)</span></span></div> <div style="text-align: justify;"></div> <div style="text-align: justify;"><span style="font-size: 18px;"><span style="font-family: times new roman,times,serif;">Then, a separate thread is started to restart the application.</span></span></div> <div style="text-align: justify;"></div> <div style="text-align: justify;"><span style="font-size: 18px;"><span style="font-family: times new roman,times,serif;">start = &#8216;sudo python CODE.py&#8217;</span></span></div> <div style="text-align: justify;"><span style="font-size: 18px;"><span style="font-family: times new roman,times,serif;">proc = subprocess.Popen(start, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE)</span></span></div> <div style="text-align: justify;"></div> <div style="text-align: justify;"><span style="font-size: 18px;"><span style="font-family: times new roman,times,serif;">So, this is how the FTP protocol can be used in an IOT application for automatic application update. Check out the python scripts from the code section and try them out. In the <a href="https://www.engineersgarage.com/ssh-file-transfer-protocol-iot-part-45/">next tutorial</a>, learn about SFTP Protocol. SFTP is a secure variant of FTP protocol. </span></span></div> <div></div> </div> </div> <style type="text/css"> @page { margin: 2cm } p { margin-bottom: 0.25cm; direction: ltr; line-height: 120%; text-align: left; orphans: 2; widows: 2 } a:link { color: #0563c1 }</style> <h3>Project Source Code</h3><div style="background-color:#000000;color:#ffffff"><pre><pre> <span style="font-size:12px;">### //Program to import ftplib as ftp import time import os,signal import subprocess version = "" c_version = "1" session = ftp.FTP('192.168.1.100','iot_user','123123123') #stop = 'sudo kill $(ps aux | grep CODE.py | awk '{{print $2}}')' start = 'sudo python CODE.py' def update():<span style="white-space:pre"> </span> #ftp.cwd('debian') #session.retrlines('LIST') session.retrbinary('RETR README.txt', open('README.txt', 'wb').write) with open('README.txt', 'r') as myfile: version=myfile.read().replace('n', '') if(version != c_version): global c_version session.retrbinary('RETR CODE.py', open('CODE.py', 'wb').write) c_version = version time.sleep(1) check_kill_process("CODE.py") print "STOP pass" time.sleep(1) proc = subprocess.Popen(start, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE) print "START Pass" time.sleep(3) print "UPDATED!" else: time.sleep(5) print "NO UPDATES" def check_kill_process(pstring): for line in os.popen("ps ax | grep " + pstring + " | grep -v grep"): fields = line.split() pid = fields[0] os.kill(int(pid), signal.SIGKILL) while True: try: update() except Exception as e: session.quit() print e<span style="white-space:pre"> </span> ###</span></pre> <p> </p></pre></div><br /><h3>Circuit Diagrams</h3><div style="background-color:#ffffff;color:#000000"><table><tr><td><a href='https://www.engineersgarage.com/wp-content/uploads/2019/10/Circuit-Diagram-Raspberry-Pi-3-based-IoT-FTP-Client.jpg' target='_blank'><b>Circuit-Diagram-Raspberry-Pi-3-based-IoT-FTP-Client</b></a></td> <td><a href='https://www.engineersgarage.com/wp-content/uploads/2019/10/Circuit-Diagram-Raspberry-Pi-3-based-IoT-FTP-Client.jpg' target='_blank'><img src='https://www.engineersgarage.com/wp-content/uploads/2019/10/Circuit-Diagram-Raspberry-Pi-3-based-IoT-FTP-Client.jpg' width='250'</a></td></tr></table></div><br /><hr><span class="entry-categories">Filed Under: <a href="https://www.engineersgarage.com/featured-contributions/" rel="category tag">Featured Contributions</a>, <a href="https://www.engineersgarage.com/tutorials/iot-tutorials/" rel="category tag">IoT tutorials</a>, <a href="https://www.engineersgarage.com/tutorials/" rel="category tag">Tutorials</a></span><br /><span class="entry-tags">Tagged With: <a href="https://www.engineersgarage.com/tag/iot/" rel="tag">IoT</a></span><br />&nbsp;<hr><hr /> <nav class="navigation post-navigation" aria-label="Next Article"> <h2 class="screen-reader-text">Next Article</h2> <div class="nav-links"><div class="nav-previous"><a href="https://www.engineersgarage.com/ssh-file-transfer-protocol-iot-part-45/" rel="prev">&larr; Previous Article</a></div><div class="nav-next"><a href="https://www.engineersgarage.com/application-of-ftp-protocol-in-internet-of-things-iot-part-43/" rel="next">Next Article &rarr;</a></div></div> </nav><hr /></div><footer class="entry-footer"></footer></article><section id="custom_html-7" class="widget_text widget widget_custom_html"><div class="widget_text widget-wrap"><div class="textwidget custom-html-widget"><!-- need GAM TAG --></div></div></section> <section id="custom_html-8" class="widget_text widget widget_custom_html"><div class="widget_text widget-wrap"><div class="textwidget custom-html-widget"><center> <div style="display: flex; flex-direction: column; justify-content: center; width: 300px;"> <div align="center"><a href="https://www.engineersgarage.com/subscribe-engineers-garage-newsletter/" target="_blank"><img src="https://www.engineersgarage.com/wp-content/uploads/2023/03/EG-300x100-1.jpg" alt=“engineers garage newsletter”></a></div> <div align="center" style="width: 300px; line-height: 20px; padding-top: 10px;"><span style="font-weight: bold; color: #0c506d; text-align: center; font-size: 20px;">EXPAND YOUR KNOWLEDGE AND STAY CONNECTED</span></div> <div align="center" style="line-height: 16px; padding-top: 5px;"><span style="text-align: center; font-size: 16px;">Get the latest info on technologies, tools and strategies for EE professionals.</span></div> <div align="center" style="padding-top: 10px;"><a href="https://www.engineersgarage.com/subscribe-engineers-garage-newsletter/" target="_blank"><button style="background-color: #57bf9b; color: white; font-weight: bold; border: none; padding: 10px; font-size: 16px; cursor: pointer;">GET THE ENEWSLETTER</button></a></div> </div> </center></div></div></section> </main><aside class="sidebar sidebar-primary widget-area" role="complementary" aria-label="Primary Sidebar"><section id="search-2" class="widget widget_search"><div class="widget-wrap"><form class="search-form" method="get" action="https://www.engineersgarage.com/" role="search"><input class="search-form-input" type="search" name="s" id="searchform-1" placeholder="Search this website"><input class="search-form-submit" type="submit" value="GO"><meta content="https://www.engineersgarage.com/?s={s}"></form></div></section> <section id="custom_html-5" class="widget_text widget widget_custom_html"><div class="widget_text widget-wrap"><div class="textwidget custom-html-widget"><div align="center"> <div id='div-gpt-eg_sidebar1'> <script> googletag.cmd.push(function() { googletag.display('div-gpt-eg_sidebar1'); }); </script> </div> </div></div></div></section> <section id="custom_html-20" class="widget_text widget widget_custom_html"><div class="widget_text widget-wrap"><h4 class="widget-title widgettitle">EE TECH TOOLBOX</h4> <div class="textwidget custom-html-widget"><center> <div style="display: flex; flex-direction: column; justify-content: center; width: 300px;"> <div align="center"><a href="https://www.eeworldonline.com/tech-toolbox-test-measurement/" target="_blank"><img src="https://www.eeworldonline.com/wp-content/uploads/2024/11/EE-TechToolbox-T_and_M_Page_01-scaled.jpg" alt=“ee tech toolbox”></a></div> <div align="center" style="width: 300px; line-height: 20px; padding-top: 10px;"><span style="font-weight: bold; color: #0c506d; text-align: center; font-size: 20px;">Tech Toolbox: Test & Measurement</span></div> <div align="center" style="line-height: 16px; padding-top: 5px;"><span style="text-align: center; font-size: 16px;"> Everything needs testing and testing needs measurement. This Tech Toolbox covers measurement fundamentals, accuracy, precision, and resolution. A look at the Smith chart, a handy tool for RF engineers, is also reviewed. </span></div> <div align="center" style="padding-top: 10px;"><a href="https://www.eeworldonline.com/tech-toolbox-test-measurement/" target="_blank"><button style="background-color: #57bf9b; color: white; font-weight: bold; border: none; padding: 10px; font-size: 16px; cursor: pointer;">Download PDF</button></a></div> <div align="center" style="padding-top: 10px;"><a href="https://www.eeworldonline.com/category/tech-toolboxes/" target="_blank"><button style="background-color: #57bf9b; color: white; font-weight: bold; border: none; padding: 10px; font-size: 16px; cursor: pointer;">View All Tech Toolboxes</button></a></div> </div> </center> </div></div></section> <section id="custom_html-14" class="widget_text widget widget_custom_html"><div class="widget_text widget-wrap"><h4 class="widget-title widgettitle">EE Learning Center</h4> <div class="textwidget custom-html-widget"><center><div style="display: flex; flex-direction: column; width: 270px;"><a href="https://www.eeworldonline.com/learning-center" target="_blank" rel="noopener"><img src="https://www.engineersgarage.com/wp-content/uploads/2024/08/300x250-2-EE-LearnCtr.png" alt="EE Learning Center" style="max-width: 270px;" /></a> <div class="dropdown" style="text-align: center; margin-top: 10px;"> <button class="motion-design-guides">BROWSE CLASSROOMS</button> <div class="dropdown-content"> <a class="motion-design-guide-option" href="https://www.eeworldonline.com/model-based-systems-engineering-classroom" target="_blank">Model-Based System Engineering</a> <a class="motion-design-guide-option" href="https://www.eeworldonline.com/transformers-ii-classroom" target="_blank">Transformers II</a> <a class="motion-design-guide-option" href="https://www.eeworldonline.com/automotive-connectivity-classroom" target="_blank">Automotive Connectivity</a> <a class="motion-design-guide-option" href="https://www.eeworldonline.com/capacitators-classroom" target="_blank">Capacitors</a> <a class="motion-design-guide-option" href="https://www.eeworldonline.com/programmable-power-classroom" target="_blank">Programmable Power</a> <a class="motion-design-guide-option" href="https://www.eeworldonline.com/inductors" target="_blank">Inductors</a> <a class="motion-design-guide-option" href="https://www.eeworldonline.com/classroom-fpga" target="_blank">FPGA</a> <a class="motion-design-guide-option" href="https://www.eeworldonline.com/silicon-carbide-classroom" target="_blank">Silicon Carbide</a> <a class="motion-design-guide-option" href="https://www.eeworldonline.com/adas-classroom" target="_blank">ADAS</a> <a class="motion-design-guide-option" href="https://www.eeworldonline.com/classroom-high-voltage" target="_blank">High Voltage Power</a> <a class="motion-design-guide-option" href="https://www.eeworldonline.com/emi-rfi-classroom" target="_blank">Electromagnetic & Radio Frequency Interference</a> <a class="motion-design-guide-option" href="https://www.eeworldonline.com/testing-radio-frequency-classroom" target="_blank">Testing Basics Radio Frequency</a> </div> </div></div> </center> <center> <div class="dropdown" style="text-align: center; padding-top: 10px;"> <button class="motion-design-guides">Browse Design Guides</button> <div class="dropdown-content"> <a class="motion-design-guide-option" href="https://eeworldonline.tradepub.com/free/w_defa6026/?p=w_defa6026" target="_blank">USB-Based Oscilloscopes</a> <a class="motion-design-guide-option" href="https://eeworldonline.tradepub.com/free/w_defa3554/" target="_blank">Connectors</a> <a class="motion-design-guide-option" href="https://eeworldonline.tradepub.com/free/w_defa3475/" target="_blank">5G Connectivity</a> <a class="motion-design-guide-option" href="https://eeworldonline.tradepub.com/free/w_defa3454/" target="_blank">Capacitors</a> <a class="motion-design-guide-option" href="https://eeworldonline.tradepub.com/free/w_rene01/" target="_blank">Bluetooth & Connectivity</a> <a class="motion-design-guide-option" href="https://eeworldonline.tradepub.com/free/w_defa2728/" target="_blank">WiFi & the IOT</a> <a class="motion-design-guide-option" href="https://dw-resources.designworldonline.com/free/w_defa2978/" target="_blank">Linear Position Sensors</a> <a class="motion-design-guide-option" href="https://eeworldonline.tradepub.com/free/w_defa3337/" target="_blank">Relays</a> </div> </div> </center></div></div></section> <section id="custom_html-19" class="widget_text widget widget_custom_html"><div class="widget_text widget-wrap"><div class="textwidget custom-html-widget"><center> <div style="display: flex; flex-direction: column; justify-content: center; width: 300px;"> <div align="center"><a href="https://www.engineersgarage.com/subscribe-engineers-garage-newsletter/" target="_blank"><img src="https://www.engineersgarage.com/wp-content/uploads/2023/03/EG-300x100-1.jpg" alt=“engineers garage newsletter”></a></div> <div align="center" style="width: 300px; line-height: 20px; padding-top: 10px;"><span style="font-weight: bold; color: #0c506d; text-align: center; font-size: 20px;">EXPAND YOUR KNOWLEDGE AND STAY CONNECTED</span></div> <div align="center" style="line-height: 16px; padding-top: 5px;"><span style="text-align: center; font-size: 16px;">Get the latest info on technologies, tools and strategies for EE professionals.</span></div> <div align="center" style="padding-top: 10px;"><a href="https://www.engineersgarage.com/subscribe-engineers-garage-newsletter/" target="_blank"><button style="background-color: #57bf9b; color: white; font-weight: bold; border: none; padding: 10px; font-size: 16px; cursor: pointer;">GET THE ENEWSLETTER</button></a></div> </div> </center></div></div></section> <section id="custom_html-15" class="widget_text widget widget_custom_html"><div class="widget_text widget-wrap"><h4 class="widget-title widgettitle">HAVE A QUESTION?</h4> <div class="textwidget custom-html-widget"><div id="digital" style="padding: 0 15px 10px 15px;"> <span style="font-size: 12px;font-weight:bold"> Have a technical question about an article or other engineering questions? Check out our engineering forums <a href="https://www.edaboard.com" target="_blank" style="color:red">EDABoard.com</a> and <a href="https://www.electro-tech-online.com" target="_blank" style="color:red">Electro-Tech-Online.com</a> where you can get those questions asked and answered by your peers! </span> <br /> <br /> <div align="Center"> <div style="float: center;"><a href="https://www.edaboard.com/?utm_source=EG&utm_medium=widget&utm_campaign=question&utm_term=HaveQuestion" target="_blank" rel="nofollow"><button class="greenbutton">EDA Board</button></a></div> <br /> <div style="float: center;"><a href="https://www.electro-tech-online.com/?utm_source=EG&utm_medium=widget&utm_campaign=question&utm_term=HaveQuestion" target="_blank" rel="nofollow"><button class="greenbutton">Electro-Tech-Online</button></a></div> </div> </div> </div></div></section> <section id="rss-2" class="widget widget_rss"><div class="widget-wrap"><h4 class="widget-title widgettitle"><a class="rsswidget rss-widget-feed" href="http://www.edaboard.com/external.php?type=RSS"><img class="rss-widget-icon" style="border:0" width="14" height="14" src="https://www.engineersgarage.com/wp-includes/images/rss.png" alt="RSS" loading="lazy" /></a> <a class="rsswidget rss-widget-title" href="https://www.edaboard.com/">EDABOARD.com Discussions</a></h4> <ul><li><a class='rsswidget' href='https://www.edaboard.com/threads/relative-phase-compensation-technique.413067/'>Relative phase compensation technique</a></li><li><a class='rsswidget' href='https://www.edaboard.com/threads/top-benefits-of-using-cable-cleats-for-secure-and-efficient-cable-management.413164/'>Top Benefits of Using Cable Cleats for Secure and Efficient Cable Management</a></li><li><a class='rsswidget' href='https://www.edaboard.com/threads/restoring-a-wards-airline-radio-model-93br-1201-wards-airline-radio-model-93br-1201.413102/'>Restoring A WARDS AIRLINE RADIO MODEL 93BR-1201 WARDS AIRLINE RADIO MODEL 93BR-1201</a></li><li><a class='rsswidget' href='https://www.edaboard.com/threads/all-black-screen-after-booting-zorin-os-16-on-hp-notebook-with-11th-gen-intel-cpu.413069/'>All black Screen After Booting Zorin OS 16 on HP Notebook with 11th Gen Intel CPU</a></li><li><a class='rsswidget' href='https://www.edaboard.com/threads/how-parallel-patterns-are-pulsed-during-shift.413158/'>How parallel patterns are pulsed during shift?</a></li></ul></div></section> <section id="rss-3" class="widget widget_rss"><div class="widget-wrap"><h4 class="widget-title widgettitle"><a class="rsswidget rss-widget-feed" href="https://www.electro-tech-online.com/forums/-/index.rss"><img class="rss-widget-icon" style="border:0" width="14" height="14" src="https://www.engineersgarage.com/wp-includes/images/rss.png" alt="RSS" loading="lazy" /></a> <a class="rsswidget rss-widget-title" href="https://www.electro-tech-online.com/">Electro-Tech-Online.com Discussions</a></h4> <ul><li><a class='rsswidget' href='https://www.electro-tech-online.com/threads/pic-basic-finger-print-scanner-as608.166942/'>Pic basic finger print scanner AS608</a></li><li><a class='rsswidget' href='https://www.electro-tech-online.com/threads/filtering-for-a-signal-level-detector.166547/'>Filtering for a signal level detector</a></li><li><a class='rsswidget' href='https://www.electro-tech-online.com/threads/help-put-switch-back-together-on-cookerhood.166879/'>Help! Put switch back together on cookerhood</a></li><li><a class='rsswidget' href='https://www.electro-tech-online.com/threads/display-tft-st7789-oshonsoft-basic.166219/'>Display TFT ST7789 (OshonSoft Basic).</a></li><li><a class='rsswidget' href='https://www.electro-tech-online.com/threads/varying-voltage-in-a-circuit.166946/'>Varying voltage in a circuit</a></li></ul></div></section> <section id="category-posts-2" class="widget cat-post-widget"><div class="widget-wrap"><h4 class="widget-title widgettitle">Featured Series -Iot Tutorials (48 Part series)</h4> <ul id="category-posts-2-internal" class="category-posts-internal"> <li class='cat-post-item'><div><a class="cat-post-thumbnail cat-post-dark" href="https://www.engineersgarage.com/secure-client-server-communication-over-tls-security-protocol-using-mosquitto-broker-iot-part-42/" title="Secure client server communication over TLS security protocol using Mosquitto Broker: IOT Part 42"><span class="cat-post-crop cat-post-format cat-post-format-standard"><img width="150" height="95" src="https://www.engineersgarage.com/wp-content/uploads/2019/07/Image-Showing-Secure-Client-Server-Communication-Over-TLS-Protocol-Using-Mosquitto-Broker.jpg" class="attachment- size- wp-image-52222 wp-post-image" alt="" data-cat-posts-width="150" data-cat-posts-height="95" decoding="async" loading="lazy" srcset="https://www.engineersgarage.com/wp-content/uploads/2019/07/Image-Showing-Secure-Client-Server-Communication-Over-TLS-Protocol-Using-Mosquitto-Broker.jpg 588w, https://www.engineersgarage.com/wp-content/uploads/2019/07/Image-Showing-Secure-Client-Server-Communication-Over-TLS-Protocol-Using-Mosquitto-Broker-300x123.jpg 300w, https://www.engineersgarage.com/wp-content/uploads/2019/07/Image-Showing-Secure-Client-Server-Communication-Over-TLS-Protocol-Using-Mosquitto-Broker-368x151.jpg 368w" sizes="auto, (max-width: 150px) 100vw, 150px" /></span></a> <h6 class="widget-title"><a class="cat-post-title" href="https://www.engineersgarage.com/secure-client-server-communication-over-tls-security-protocol-using-mosquitto-broker-iot-part-42/" rel="bookmark">Secure client server communication over TLS security protocol using Mosquitto Broker: IOT Part 42</a></h6></div></li><li class='cat-post-item'><div><a class="cat-post-thumbnail cat-post-dark" href="https://www.engineersgarage.com/application-of-ftp-protocol-in-internet-of-things-iot-part-43/" title="Application of FTP Protocol in Internet of Things &#8211; IOT Part 43"><span class="cat-post-crop cat-post-format cat-post-format-standard"><img width="150" height="95" src="https://www.engineersgarage.com/wp-content/uploads/2019/07/Representational-Image-FTP-Protocol.jpg" class="attachment- size- wp-image-52475 wp-post-image" alt="" data-cat-posts-width="150" data-cat-posts-height="95" decoding="async" loading="lazy" srcset="https://www.engineersgarage.com/wp-content/uploads/2019/07/Representational-Image-FTP-Protocol.jpg 633w, https://www.engineersgarage.com/wp-content/uploads/2019/07/Representational-Image-FTP-Protocol-300x201.jpg 300w, https://www.engineersgarage.com/wp-content/uploads/2019/07/Representational-Image-FTP-Protocol-355x238.jpg 355w" sizes="auto, (max-width: 150px) 100vw, 150px" /></span></a> <h6 class="widget-title"><a class="cat-post-title" href="https://www.engineersgarage.com/application-of-ftp-protocol-in-internet-of-things-iot-part-43/" rel="bookmark">Application of FTP Protocol in Internet of Things &#8211; IOT Part 43</a></h6></div></li><li class='cat-post-item cat-post-current'><div><a class="cat-post-thumbnail cat-post-dark" href="https://www.engineersgarage.com/automatic-software-update-by-iot-device-over-ftp-protocol-iot-part-44/" title="Automatic Software Update by IoT Device over FTP Protocol &#8211; IOT Part 44"><span class="cat-post-crop cat-post-format cat-post-format-standard"><img width="150" height="95" src="https://www.engineersgarage.com/wp-content/uploads/2019/07/Block-Diagram-Raspberry-Pi-3-based-IoT-FTP-Client.jpg" class="attachment- size- wp-image-52286 wp-post-image" alt="" data-cat-posts-width="150" data-cat-posts-height="95" decoding="async" loading="lazy" srcset="https://www.engineersgarage.com/wp-content/uploads/2019/07/Block-Diagram-Raspberry-Pi-3-based-IoT-FTP-Client.jpg 1200w, https://www.engineersgarage.com/wp-content/uploads/2019/07/Block-Diagram-Raspberry-Pi-3-based-IoT-FTP-Client-300x180.jpg 300w, https://www.engineersgarage.com/wp-content/uploads/2019/07/Block-Diagram-Raspberry-Pi-3-based-IoT-FTP-Client-768x460.jpg 768w, https://www.engineersgarage.com/wp-content/uploads/2019/07/Block-Diagram-Raspberry-Pi-3-based-IoT-FTP-Client-1024x613.jpg 1024w, https://www.engineersgarage.com/wp-content/uploads/2019/07/Block-Diagram-Raspberry-Pi-3-based-IoT-FTP-Client-368x220.jpg 368w" sizes="auto, (max-width: 150px) 100vw, 150px" /></span></a> <h6 class="widget-title"><a class="cat-post-title" href="https://www.engineersgarage.com/automatic-software-update-by-iot-device-over-ftp-protocol-iot-part-44/" rel="bookmark">Automatic Software Update by IoT Device over FTP Protocol &#8211; IOT Part 44</a></h6></div></li><li class='cat-post-item'><div><a class="cat-post-thumbnail cat-post-dark" href="https://www.engineersgarage.com/ssh-file-transfer-protocol-iot-part-45/" title="SSH File Transfer Protocol &#8211; IOT Part 45"><span class="cat-post-crop cat-post-format cat-post-format-standard"><img width="150" height="95" src="https://www.engineersgarage.com/wp-content/uploads/2019/07/Symbol-SSH-File-Transfer-Protocol-SFTP.jpg" class="attachment- size- wp-image-54321 wp-post-image" alt="" data-cat-posts-width="150" data-cat-posts-height="95" decoding="async" loading="lazy" srcset="https://www.engineersgarage.com/wp-content/uploads/2019/07/Symbol-SSH-File-Transfer-Protocol-SFTP.jpg 465w, https://www.engineersgarage.com/wp-content/uploads/2019/07/Symbol-SSH-File-Transfer-Protocol-SFTP-300x234.jpg 300w, https://www.engineersgarage.com/wp-content/uploads/2019/07/Symbol-SSH-File-Transfer-Protocol-SFTP-306x238.jpg 306w, https://www.engineersgarage.com/wp-content/uploads/2019/07/Symbol-SSH-File-Transfer-Protocol-SFTP-216x168.jpg 216w" sizes="auto, (max-width: 150px) 100vw, 150px" /></span></a> <h6 class="widget-title"><a class="cat-post-title" href="https://www.engineersgarage.com/ssh-file-transfer-protocol-iot-part-45/" rel="bookmark">SSH File Transfer Protocol &#8211; IOT Part 45</a></h6></div></li><li class='cat-post-item'><div><a class="cat-post-thumbnail cat-post-dark" href="https://www.engineersgarage.com/raspberry-pi-server-based-hotel-restaurant-order-management-system-on-iot-iot-part-46/" title="Raspberry Pi Server based Hotel/Restaurant Order Management System on IoT &#8211; IOT Part 46"><span class="cat-post-crop cat-post-format cat-post-format-standard"><img width="150" height="95" src="https://www.engineersgarage.com/wp-content/uploads/2021/02/hotel-restaurant-order-project-featured.jpg" class="attachment- size- wp-image-63002 wp-post-image" alt="" data-cat-posts-width="150" data-cat-posts-height="95" decoding="async" loading="lazy" srcset="https://www.engineersgarage.com/wp-content/uploads/2021/02/hotel-restaurant-order-project-featured.jpg 770w, https://www.engineersgarage.com/wp-content/uploads/2021/02/hotel-restaurant-order-project-featured-300x195.jpg 300w, https://www.engineersgarage.com/wp-content/uploads/2021/02/hotel-restaurant-order-project-featured-768x499.jpg 768w, https://www.engineersgarage.com/wp-content/uploads/2021/02/hotel-restaurant-order-project-featured-368x238.jpg 368w" sizes="auto, (max-width: 150px) 100vw, 150px" /></span></a> <h6 class="widget-title"><a class="cat-post-title" href="https://www.engineersgarage.com/raspberry-pi-server-based-hotel-restaurant-order-management-system-on-iot-iot-part-46/" rel="bookmark">Raspberry Pi Server based Hotel/Restaurant Order Management System on IoT &#8211; IOT Part 46</a></h6></div></li><li class='cat-post-item'><div><a class="cat-post-thumbnail cat-post-dark" href="https://www.engineersgarage.com/imap-protocol-iot-part-47-2/" title="IMAP Protocol- IOT Part 47"><span class="cat-post-crop cat-post-format cat-post-format-standard"><img width="150" height="95" src="https://www.engineersgarage.com/wp-content/uploads/2019/07/Image-Showing-Protocol-Email-Retrieving-Algorithm.jpg" class="attachment- size- wp-image-52474 wp-post-image" alt="" data-cat-posts-width="150" data-cat-posts-height="95" decoding="async" loading="lazy" srcset="https://www.engineersgarage.com/wp-content/uploads/2019/07/Image-Showing-Protocol-Email-Retrieving-Algorithm.jpg 473w, https://www.engineersgarage.com/wp-content/uploads/2019/07/Image-Showing-Protocol-Email-Retrieving-Algorithm-184x300.jpg 184w, https://www.engineersgarage.com/wp-content/uploads/2019/07/Image-Showing-Protocol-Email-Retrieving-Algorithm-146x238.jpg 146w" sizes="auto, (max-width: 150px) 100vw, 150px" /></span></a> <h6 class="widget-title"><a class="cat-post-title" href="https://www.engineersgarage.com/imap-protocol-iot-part-47-2/" rel="bookmark">IMAP Protocol- IOT Part 47</a></h6></div></li></ul> </div></section> <section id="recent-posts-2" class="widget widget_recent_entries"><div class="widget-wrap"> <h4 class="widget-title widgettitle">Recent Articles</h4> <ul> <li> <a href="https://www.engineersgarage.com/top-spy-gadgets-you-can-actually-own/">What are the most practical and useful modern spy gadgets?</a> </li> <li> <a href="https://www.engineersgarage.com/st-releases-radio-enabled-mcus-with-15-year-battery-life/">ST releases radio-enabled MCUs with 15+ year battery life</a> </li> <li> <a href="https://www.engineersgarage.com/infineons-space-grade-512-mbit-flash-memory-supports-data-rates-up-to-133-mhz-for-fpga-boot/">Infineon’s space-grade 512 Mbit Flash memory supports data rates up to 133 MHz for FPGA Boot</a> </li> <li> <a href="https://www.engineersgarage.com/same-sky-expands-usb-portfolio-with-5-9-mm-type-c-series/">Same Sky expands USB portfolio with 5.9 mm Type-C series</a> </li> <li> <a href="https://www.engineersgarage.com/renesas-ddr5-chipset-reaches-12800-mt-s-transfer-speed/">Renesas DDR5 chipset reaches 12,800 MT/s transfer speed</a> </li> </ul> </div></section> <section id="custom_html-3" class="widget_text widget widget_custom_html"><div class="widget_text widget-wrap"><div class="textwidget custom-html-widget"> <div id='div-gpt-eg_sidebarbottom'> <script> googletag.cmd.push(function() { googletag.display('div-gpt-eg_sidebarbottom'); }); </script> </div> </div></div></section> <section id="custom_html-18" class="widget_text widget widget_custom_html"><div class="widget_text widget-wrap"><h4 class="widget-title widgettitle">EE ENGINEERING TRAINING DAYS</h4> <div class="textwidget custom-html-widget"><center><div style="display: flex; flex-direction: column; width: 270px;"><a href="https://eetrainingdays.com/" target="_blank" rel="noopener"><img src="https://www.eeworldonline.com/wp-content/uploads/2024/01/300x250-side-bar-graphic.png" alt="engineering" /></a> </div> </center></div></div></section> <section id="custom_html-17" class="widget_text widget widget_custom_html"><div class="widget_text widget-wrap"><h4 class="widget-title widgettitle">Submit a Guest Post</h4> <div class="textwidget custom-html-widget"><center> <a href="/join-us-as-a-guest-post-writer/"> <img src="/wp-content/uploads/2022/10/guest-post-banner.jpg" alt="submit a guest post"> </a> </center></div></div></section> </aside></div></div></div><div class="footer-socials"><div class="wrap"><label style="color:#ffffff">Connect with Engineers Garage</label> <a href="https://www.facebook.com/engineersgarage" target="_blank" rel="noopener noreferrer"><i class="icon-facebook"></i></a><a href="https://twitter.com/EngineersGarage" target="_blank" rel="noopener noreferrer"><i class="icon-twitter"></i></a><a href="https://www.youtube.com/@engineersgarage" target="_blank" rel="noopener noreferrer"><i class="icon-youtube"></i></a></div></div><footer class="site-footer"><div class="wrap"><div class="row"><div class="footer-logo"><a href="https://www.engineersgarage.com">Engineers Garage</a></div><div class="footer-menu"><div class="menu-footer-nav-container"><ul id="menu-footer-nav" class="menu"><li id="menu-item-55876" class="menu-item"><a target="_blank" href="http://www.analogictips.com/">Analog IC TIps</a></li> <li id="menu-item-55877" class="menu-item"><a target="_blank" href="https://www.connectortips.com/">Connector Tips</a></li> <li id="menu-item-80507" class="menu-item"><a href="https://www.batterypowertips.com/">Battery Power Tips</a></li> <li id="menu-item-55872" class="menu-item"><a target="_blank" href="https://www.DesignFast.com/">DesignFast</a></li> <li id="menu-item-55873" class="menu-item"><a target="_blank" href="http://www.edaboard.com/">EDABoard Forums</a></li> <li id="menu-item-55881" class="menu-item"><a target="_blank" href="https://www.eeworldonline.com">EE World Online</a></li> <li id="menu-item-55874" class="menu-item"><a target="_blank" href="http://www.electro-tech-online.com/">Electro-Tech-Online Forums</a></li> <li id="menu-item-79699" class="menu-item"><a target="_blank" href="https://www.evengineeringonline.com/">EV Engineering</a></li> <li id="menu-item-55875" class="menu-item"><a target="_blank" href="http://www.microcontrollertips.com/">Microcontroller Tips</a></li> <li id="menu-item-55878" class="menu-item"><a target="_blank" href="http://www.powerelectronictips.com/">Power Electronic Tips</a></li> <li id="menu-item-55879" class="menu-item"><a target="_blank" href="http://www.sensortips.com/">Sensor Tips</a></li> <li id="menu-item-55880" class="menu-item"><a target="_blank" href="http://www.testandmeasurementtips.com/">Test and Measurement Tips</a></li> <li id="menu-item-60429" class="menu-item"><a target="_blank" href="https://www.5gtechnologyworld.com/">5G Technology World</a></li> <li id="menu-item-79962" class="menu-item"><a href="https://www.engineersgarage.com/subscribe-engineers-garage-newsletter/">Subscribe to our newsletter</a></li> <li id="menu-item-55885" class="menu-item"><a href="https://www.engineersgarage.com/about-us/">About Us</a></li> <li id="menu-item-55886" class="menu-item"><a href="https://www.engineersgarage.com/contact-us/">Contact Us</a></li> <li id="menu-item-55887" class="menu-item"><a target="_blank" href="https://marketing.wtwhmedia.com/2024-ee-world-online-media-guide/">Advertise</a></li> </ul></div></div><div class="footer-copyright"><p>Copyright &copy; 2024 WTWH Media LLC. All Rights Reserved. The material on this site may not be reproduced, distributed, transmitted, cached or otherwise used, except with the prior written permission of WTWH Media<br /> <a href="http://www.wtwhmedia.com/privacy-policy/" target="_blank">Privacy Policy</a> </p></div></div></div></footer></div><div class="site-search"><div class="wrap"><div class="search-inner"><h2>Search Engineers Garage</h2><form class="search-form" method="get" action="https://www.engineersgarage.com/" role="search"><input class="search-form-input" type="search" name="s" id="searchform-2" placeholder="Search this website"><input class="search-form-submit" type="submit" value="GO"><meta content="https://www.engineersgarage.com/?s={s}"></form></div></div></div> <!-- xyzzy bottom --> </div> <script> var GAMaccountID = 5272491; var GAMnetworkName = 'ee_network'; var GAMadUnitName = 'eg_prestitial'; googletag.slots = googletag.slots || {}; </script> <script type="text/javascript"> function genesisBlocksShare( url, title, w, h ){ var left = ( window.innerWidth / 2 )-( w / 2 ); var top = ( window.innerHeight / 2 )-( h / 2 ); return window.open(url, title, 'toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=no, resizable=no, copyhistory=no, width=600, height=600, top='+top+', left='+left); } </script> <!-- Google Tag Manager (noscript) Global --> <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-MMC9PJ9" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript> <!-- End Google Tag Manager (noscript) --> <!-- Google Tag Manager (noscript) --> <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-NJMRR6Z" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript> <!-- End Google Tag Manager (noscript) --> <div id='div-gpt-eg_wallpaper'> <script> googletag.cmd.push(function() { googletag.display('div-gpt-eg_wallpaper'); }); </script> </div> <div id='div-gpt-eg_allstreamflex'> <script> googletag.cmd.push(function() { googletag.display('div-gpt-eg_allstreamflex'); }); </script> </div> <div id='div-gpt-eg_allstreamprelude'> <script> googletag.cmd.push(function() { googletag.display('div-gpt-eg_allstreamprelude'); }); </script> </div> <div id="sidr-mobile-menu" class="sidr right"><a class="sidr-menu-close" href="#"><i class="icon-close"></i></a><div class="menu-main-nav-container"><ul id="menu-main-nav" class="menu"><li id="menu-item-61908" class="menu-item menu-item-has-children"><a href="https://www.engineersgarage.com/projects-and-tutorials/">Electronics Projects and Tutorials</a> <ul class="sub-menu"> <li id="menu-item-39808" class="menu-item menu-item-has-children"><a href="https://www.engineersgarage.com/electronic-projects/">Electronic Projects</a> <ul class="sub-menu"> <li id="menu-item-81272" class="menu-item"><a href="https://www.engineersgarage.com/arduino/">Arduino Projects</a></li> <li id="menu-item-81273" class="menu-item"><a href="https://www.engineersgarage.com/electronic-projects/avr/">AVR</a></li> <li id="menu-item-80793" class="menu-item"><a href="https://www.engineersgarage.com/raspberry-pi-electronic-projects/">Raspberry pi</a></li> <li id="menu-item-78430" class="menu-item"><a href="https://www.engineersgarage.com/electronic-projects/esp8266-electronic-projects/">ESP8266</a></li> <li id="menu-item-78434" class="menu-item"><a href="https://www.engineersgarage.com/electronic-projects/beaglebone-electronic-projects/">BeagleBone</a></li> <li id="menu-item-80794" class="menu-item"><a href="https://www.engineersgarage.com/electronic-projects/8051-microcontroller/">8051 Microcontroller</a></li> <li id="menu-item-55864" class="menu-item"><a href="https://www.engineersgarage.com/electronic-projects/arm-electronic-projects-electronic-projects/">ARM</a></li> <li id="menu-item-80795" class="menu-item"><a href="https://www.engineersgarage.com/electronic-projects/pic-microcontroller-electronic-projects/">PIC Microcontroller</a></li> <li id="menu-item-60239" class="menu-item"><a href="https://www.engineersgarage.com/electronic-projects/stm32-electronic-projects-electronic-projects/">STM32</a></li> </ul> </li> <li id="menu-item-7268" class="menu-item menu-item-has-children"><a href="https://www.engineersgarage.com/tutorials/">Tutorials</a> <ul class="sub-menu"> <li id="menu-item-78818" class="menu-item"><a href="https://www.engineersgarage.com/tutorials/audio-tutorials/">Audio Electronics</a></li> <li id="menu-item-78819" class="menu-item"><a href="https://www.engineersgarage.com/tutorials/battery-management-systems/">Battery Management</a></li> <li id="menu-item-78820" class="menu-item"><a href="https://www.engineersgarage.com/tutorials/brainwave/">Brainwave</a></li> <li id="menu-item-78833" class="menu-item"><a href="https://www.engineersgarage.com/tutorials/evs/">Electric Vehicles</a></li> <li id="menu-item-78822" class="menu-item"><a href="https://www.engineersgarage.com/tutorials/emc-emi/">EMI/EMC/RFI</a></li> <li id="menu-item-78823" class="menu-item"><a href="https://www.engineersgarage.com/tutorials/filters/">Hardware Filters</a></li> <li id="menu-item-78826" class="menu-item"><a href="https://www.engineersgarage.com/tutorials/iot-tutorials/">IoT tutorials</a></li> <li id="menu-item-80151" class="menu-item"><a href="https://www.engineersgarage.com/tutorials/power/">Power Tutorials</a></li> <li id="menu-item-78835" class="menu-item"><a href="https://www.engineersgarage.com/tutorials/python/">Python</a></li> <li id="menu-item-78829" class="menu-item"><a href="https://www.engineersgarage.com/tutorials/sensors-tutorials/">Sensors</a></li> <li id="menu-item-78830" class="menu-item"><a href="https://www.engineersgarage.com/tutorials/usb/">USB</a></li> <li id="menu-item-78832" class="menu-item"><a href="https://www.engineersgarage.com/tutorials/vhdl-tutorials/">VHDL</a></li> </ul> </li> <li id="menu-item-56096" class="menu-item"><a href="https://www.engineersgarage.com/circuit_design/">Circuit Design</a></li> <li id="menu-item-62725" class="menu-item"><a target="_blank" href="https://www.youtube.com/user/engineersgarage">Project Videos</a></li> <li id="menu-item-7269" class="menu-item"><a href="https://www.engineersgarage.com/components/">Components</a></li> </ul> </li> <li id="menu-item-39810" class="menu-item menu-item-has-children"><a href="https://www.engineersgarage.com/article_page/">Articles</a> <ul class="sub-menu"> <li id="menu-item-63122" class="menu-item"><a href="https://www.engineersgarage.com/tech-articles/">Tech Articles</a></li> <li id="menu-item-13371" class="menu-item"><a href="https://www.engineersgarage.com/insight/">Insight</a></li> <li id="menu-item-13399" class="menu-item"><a href="https://www.engineersgarage.com/invention-stories/">Invention Stories</a></li> <li id="menu-item-13326" class="menu-item"><a href="https://www.engineersgarage.com/how_to/">How to</a></li> <li id="menu-item-59366" class="menu-item"><a href="https://www.engineersgarage.com/what_is/">What Is</a></li> </ul> </li> <li id="menu-item-1863" class="menu-item menu-item-has-children"><a href="#">News</a> <ul class="sub-menu"> <li id="menu-item-39809" class="menu-item"><a href="https://www.engineersgarage.com/news/">Electronic Product News</a></li> <li id="menu-item-77696" class="menu-item"><a href="https://www.engineersgarage.com/news/business-news/">Business News</a></li> <li id="menu-item-77697" class="menu-item"><a href="https://www.engineersgarage.com/news/company-start-up-news/">Company/Start-up News</a></li> <li id="menu-item-14489" class="menu-item"><a href="https://www.engineersgarage.com/reviews/">DIY Reviews</a></li> <li id="menu-item-14287" class="menu-item"><a href="https://www.engineersgarage.com/guest_post/">Guest Post</a></li> </ul> </li> <li id="menu-item-55871" class="menu-item menu-item-has-children"><a>Forums</a> <ul class="sub-menu"> <li id="menu-item-55870" class="menu-item"><a href="https://www.edaboard.com/">EDABoard.com</a></li> <li id="menu-item-55869" class="menu-item"><a href="https://www.electro-tech-online.com/">Electro-Tech-Online</a></li> <li id="menu-item-1851" class="menu-item"><a href="https://forums.engineersgarage.com/">EG Forum Archive</a></li> </ul> </li> <li id="menu-item-1868" class="menu-item menu-item-has-children"><a target="_blank" href="https://wtwh.me/9mk">DigiKey Store</a> <ul class="sub-menu"> <li id="menu-item-1869" class="menu-item"><a target="_blank" href="https://wtwh.me/9ml">Cables, Wires</a></li> <li id="menu-item-1870" class="menu-item"><a target="_blank" href="https://wtwh.me/9mm">Connectors, Interconnect</a></li> <li id="menu-item-1871" class="menu-item"><a target="_blank" href="https://wtwh.me/9mn">Discrete</a></li> <li id="menu-item-1872" class="menu-item"><a target="_blank" href="https://wtwh.me/9mo">Electromechanical</a></li> <li id="menu-item-1873" class="menu-item"><a target="_blank" href="https://wtwh.me/9mp">Embedded Computers</a></li> <li id="menu-item-1874" class="menu-item"><a target="_blank" href="https://wtwh.me/9mq">Enclosures, Hardware, Office</a></li> <li id="menu-item-1875" class="menu-item"><a target="_blank" href="https://wtwh.me/9mr">Integrated Circuits (ICs)</a></li> <li id="menu-item-1876" class="menu-item"><a target="_blank" href="https://wtwh.me/9ms">Isolators</a></li> <li id="menu-item-1877" class="menu-item"><a target="_blank" href="https://wtwh.me/9mt">LED/Optoelectronics</a></li> <li id="menu-item-1878" class="menu-item"><a target="_blank" href="https://wtwh.me/9mu">Passive</a></li> <li id="menu-item-1879" class="menu-item"><a target="_blank" href="https://wtwh.me/9mv">Power, Circuit Protection</a></li> <li id="menu-item-1880" class="menu-item"><a target="_blank" href="https://wtwh.me/9mw">Programmers</a></li> <li id="menu-item-1881" class="menu-item"><a target="_blank" href="https://wtwh.me/9mx">RF, Wireless</a></li> <li id="menu-item-1882" class="menu-item"><a target="_blank" href="https://wtwh.me/9mk">Semiconductors</a></li> <li id="menu-item-1883" class="menu-item"><a target="_blank" href="https://wtwh.me/9my">Sensors, Transducers</a></li> <li id="menu-item-1884" class="menu-item"><a target="_blank" href="https://wtwh.me/9mz">Test Products</a></li> <li id="menu-item-1885" class="menu-item"><a target="_blank" href="https://wtwh.me/9mA">Tools</a></li> </ul> </li> <li id="menu-item-56062" class="menu-item menu-item-has-children"><a href="https://www.eeworldonline.com/learning-center">Learn</a> <ul class="sub-menu"> <li id="menu-item-80114" class="menu-item"><a href="https://www.eeworldonline.com/category/tech-tips/">eBooks/Tech Tips</a></li> <li id="menu-item-76567" class="menu-item"><a target="_blank" href="https://www.eeworldonline.com/design-guide-library">Design Guides</a></li> <li id="menu-item-77221" class="menu-item"><a target="_blank" href="https://www.eeworldonline.com/learning-center">Learning Center</a></li> <li id="menu-item-81739" class="menu-item"><a target="_blank" href="https://www.eeworldonline.com/category/tech-toolboxes/">Tech Toolboxes</a></li> <li id="menu-item-80113" class="menu-item"><a href="https://gateway.on24.com/wcc/experience/elitewtwhmedia/2927718/4415581/eeworld">Webinars &#038; Digital Events</a></li> </ul> </li> <li id="menu-item-55895" class="menu-item menu-item-has-children"><a>Resources</a> <ul class="sub-menu"> <li id="menu-item-77693" class="menu-item"><a href="https://www.eeworldonline.com/category/digital-issues/">Digital Issues</a></li> <li id="menu-item-77694" class="menu-item"><a href="https://eetrainingdays.com/">EE Training Days</a></li> <li id="menu-item-55899" class="menu-item"><a target="_blank" href="https://www.eeworldonline.com/2023-leap-awards-winners-are-announced/">LEAP Awards</a></li> <li id="menu-item-77695" class="menu-item"><a href="https://www.eeworldonline.com/category/podcasts/">Podcasts</a></li> <li id="menu-item-77375" class="menu-item"><a target="_blank" href="https://www.eeworldonline.com/ee-world-webinars-and-digital-events/">Webinars / Digital Events</a></li> <li id="menu-item-55898" class="menu-item"><a href="http://www.engineeringwhitepapers.com/category/electricalelectronic/">White Papers</a></li> <li id="menu-item-62203" class="menu-item"><a href="https://www.designworldonline.com/category/news/engineering-diversity/">Engineering Diversity &#038; Inclusion</a></li> <li id="menu-item-55896" class="menu-item"><a href="https://www.DesignFast.com">DesignFast</a></li> </ul> </li> <li id="menu-item-80115" class="menu-item"><a href="https://www.engineersgarage.com/subscribe-engineers-garage-newsletter/">Subscribe</a></li> <li id="menu-item-80423" class="menu-item"><a href="https://www.engineersgarage.com/join-us-as-a-guest-post-writer/">Guest Post Guidelines</a></li> </ul></div></div></div><style type="text/css" media="screen"></style><script type="text/javascript" src="https://www.engineersgarage.com/wp-content/plugins/prestitial/assets/js/adlogic.js?ver=1.1.0" id="wtwh_prestitial_core_js-js"></script> <script type="text/javascript" src="https://www.engineersgarage.com/wp-content/plugins/genesis-blocks/dist/assets/js/dismiss.js?ver=1720775797" id="genesis-blocks-dismiss-js-js"></script> <script type="text/javascript" src="https://www.engineersgarage.com/wp-content/themes/ThemeWTWHv2/assets/js/global-min.js?ver=1629218360" id="ea-global-js"></script> <script type="text/javascript" src="https://www.engineersgarage.com/wp-includes/js/jquery/ui/core.min.js?ver=1.13.3" id="jquery-ui-core-js"></script> <script type="text/javascript" src="https://www.engineersgarage.com/wp-includes/js/jquery/ui/tabs.min.js?ver=1.13.3" id="jquery-ui-tabs-js"></script> <script type="text/javascript" src="https://www.engineersgarage.com/wp-includes/js/hoverIntent.min.js?ver=1.10.2" id="hoverIntent-js"></script> <script type="text/javascript" src="https://www.engineersgarage.com/wp-content/plugins/megamenu/js/maxmegamenu.js?ver=3.4" id="megamenu-js"></script> <script type="text/javascript" async data-no-optimize="1" src="https://www.engineersgarage.com/wp-content/plugins/perfmatters/vendor/instant-page/pminstantpage.min.js?ver=2.3.4" id="perfmatters-instant-page-js"></script> <script type="text/javascript">jQuery(document).ready(function($) { $(".ui-tabs").tabs(); });</script> <script>"undefined"!=typeof jQuery&&jQuery(document).ready(function(){"objectFit"in document.documentElement.style==!1&&(jQuery(".cat-post-item figure").removeClass("cat-post-crop"),jQuery(".cat-post-item figure").addClass("cat-post-crop-not-supported")),(document.documentMode||/Edge/.test(navigator.userAgent))&&(jQuery(".cat-post-item figure img").height("+=1"),window.setTimeout(function(){jQuery(".cat-post-item figure img").height("-=1")},0))});</script> <script type="text/javascript"> if (typeof jQuery !== 'undefined') { var cat_posts_namespace = window.cat_posts_namespace || {}; cat_posts_namespace.layout_wrap_text = cat_posts_namespace.layout_wrap_text || {}; cat_posts_namespace.layout_img_size = cat_posts_namespace.layout_img_size || {}; cat_posts_namespace.layout_wrap_text = { preWrap : function (widget) { jQuery(widget).find('.cat-post-item').each(function(){ var _that = jQuery(this); _that.find('p.cpwp-excerpt-text').addClass('cpwp-wrap-text'); _that.find('p.cpwp-excerpt-text').closest('div').wrap('<div class="cpwp-wrap-text-stage"></div>'); }); return; }, add : function(_this){ var _that = jQuery(_this); if (_that.find('p.cpwp-excerpt-text').height() < _that.find('.cat-post-thumbnail').height()) { _that.find('p.cpwp-excerpt-text').closest('.cpwp-wrap-text-stage').removeClass( "cpwp-wrap-text" ); _that.find('p.cpwp-excerpt-text').addClass( "cpwp-wrap-text" ); }else{ _that.find('p.cpwp-excerpt-text').removeClass( "cpwp-wrap-text" ); _that.find('p.cpwp-excerpt-text').closest('.cpwp-wrap-text-stage').addClass( "cpwp-wrap-text" ); } return; }, handleLazyLoading : function(_this) { var width = jQuery(_this).find('img').width(); if( 0 !== width ){ cat_posts_namespace.layout_wrap_text.add(_this); } else { jQuery(_this).find('img').one("load", function(){ cat_posts_namespace.layout_wrap_text.add(_this); }); } return; }, setClass : function (widget) { // var _widget = jQuery(widget); jQuery(widget).find('.cat-post-item').each(function(){ cat_posts_namespace.layout_wrap_text.handleLazyLoading(this); }); return; } } cat_posts_namespace.layout_img_size = { replace : function(_this){ var _that = jQuery(_this), resp_w = _that.width(), resp_h = _that.height(), orig_w = _that.data('cat-posts-width'), orig_h = _that.data('cat-posts-height'); if( resp_w < orig_w ){ _that.height( resp_w * orig_h / orig_w ); } else { _that.height( '' ); } return; }, handleLazyLoading : function(_this) { var width = jQuery(_this).width(); if( 0 !== width ){ cat_posts_namespace.layout_img_size.replace(_this); } else { jQuery(_this).one("load", function(){ cat_posts_namespace.layout_img_size.replace(_this); }); } return; }, setHeight : function (widget) { jQuery(widget).find('.cat-post-item img').each(function(){ cat_posts_namespace.layout_img_size.handleLazyLoading(this); }); return; } } let widget = jQuery('#category-posts-2-internal'); jQuery( document ).ready(function () { cat_posts_namespace.layout_wrap_text.setClass(widget); cat_posts_namespace.layout_img_size.setHeight(widget); }); jQuery(window).on('load resize', function() { cat_posts_namespace.layout_wrap_text.setClass(widget); cat_posts_namespace.layout_img_size.setHeight(widget); }); // low-end mobile cat_posts_namespace.layout_wrap_text.preWrap(widget); cat_posts_namespace.layout_wrap_text.setClass(widget); cat_posts_namespace.layout_img_size.setHeight(widget); } </script> </body></html>

Pages: 1 2 3 4 5 6 7 8 9 10