PageSourceSearch

https://eloquentarduino.github.io/category/programming/arduino-machine-learning/

html eloquentarduino.github.io collected 2026-10-03 09:09:10 UTC 63,436 bytes, 122 lines download raw bytes

1<!DOCTYPE html><html lang="en-US"><head profile="http://gmpg.org/xfn/11">
2	<link rel="canonical" href="https://eloquentarduino.com/arduino-machine-learning/" />
3	<meta http-equiv="Refresh" content="0; url='https://eloquentarduino.com/arduino-machine-learning/'" />
4	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" ><link rel="stylesheet" media="print" onload="this.onload=null;this.media='all';" id="ao_optimized_gfonts" href="https://fonts.googleapis.com/css?family=Lato%3A400%2C700%2C400italic%2C700italic%7CLato:400,700&amp;display=swap" /><link media="all" href="https://eloquentarduino.github.io/wp-content/cache/autoptimize/css/autoptimize_e2fdc59a59b9968cbab490d2ebf1408e.css" rel="stylesheet" /><title>Arduino Machine learning Archive - Eloquent Arduino Blog</title><meta name="robots" content="index, follow" /><meta name="googlebot" content="index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1" /><meta name="bingbot" content="index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1" /><link rel="canonical" href="https://eloquentarduino.github.io/category/programming/arduino-machine-learning/" /><link rel="next" href="https://eloquentarduino.github.io/category/programming/arduino-machine-learning/page/2/" /><meta property="og:locale" content="en_US" /><meta property="og:type" content="article" /><meta property="og:title" content="Arduino Machine learning Archive - Eloquent Arduino Blog" /><meta property="og:url" content="https://eloquentarduino.github.io/category/programming/arduino-machine-learning/" /><meta property="og:site_name" content="Eloquent Arduino Blog" /><meta name="twitter:card" content="summary_large_image" /> 
4<script type="application/ld+json" class="yoast-schema-graph">{"@context":"https://schema.org","@graph":[{"@type":["Person","Organization"],"@id":"https://eloquentarduino.github.io/#/schema/person/c35265597251f0133ecca5b413d12901","name":"simone","image":{"@type":"ImageObject","@id":"https://eloquentarduino.github.io/#personlogo","inLanguage":"en-US","url":"https://eloquentarduino.github.io/wp-content/uploads/2019/12/avatar.jpg","width":330,"height":330,"caption":"simone"},"logo":{"@id":"https://eloquentarduino.github.io/#personlogo"}},{"@type":"WebSite","@id":"https://eloquentarduino.github.io/#website","url":"https://eloquentarduino.github.io/","name":"Eloquent Arduino Blog","description":"Machine learning on Arduino, programming &amp; electronics","publisher":{"@id":"https://eloquentarduino.github.io/#/schema/person/c35265597251f0133ecca5b413d12901"},"potentialAction":[{"@type":"SearchAction","target":"https://eloquentarduino.github.io/?s={search_term_string}","query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"CollectionPage","@id":"https://eloquentarduino.github.io/category/programming/arduino-machine-learning/#webpage","url":"https://eloquentarduino.github.io/category/programming/arduino-machine-learning/","name":"Arduino Machine learning Archive - Eloquent Arduino Blog","isPartOf":{"@id":"https://eloquentarduino.github.io/#website"},"inLanguage":"en-US"}]}</script>
4 <link rel='dns-prefetch' href='//use.fontawesome.com' /><link rel='dns-prefetch' href='//s.w.org' /><link href='https://fonts.gstatic.com' crossorigin='anonymous' rel='preconnect' /><link rel="alternate" type="application/rss+xml" title="Eloquent Arduino Blog &raquo; Feed" href="https://eloquentarduino.github.io/feed/" /><link rel="alternate" type="application/rss+xml" title="Eloquent Arduino Blog &raquo; Comments Feed" href="https://eloquentarduino.github.io/comments/feed/" /><link rel="alternate" type="application/rss+xml" title="Eloquent Arduino Blog &raquo; Arduino Machine learning Category Feed" href="https://eloquentarduino.github.io/category/programming/arduino-machine-learning/feed/" /><link rel='stylesheet' id='font-awesome-official-css'  href='https://use.fontawesome.com/releases/v5.12.0/css/all.css' type='text/css' media='all' integrity="sha384-REHJTs1r2ErKBuJB0fCK99gCYsVjwxHrSU0N7I1zl9vZbggVJXRMsv/sLlOAGb4M" crossorigin="anonymous" /><link rel='stylesheet' id='font-awesome-official-v4shim-css'  href='https://use.fontawesome.com/releases/v5.12.0/css/v4-shims.css' type='text/css' media='all' integrity="sha384-AL44/7DEVqkvY9j8IjGLGZgFmHAjuHa+2RIWKxDliMNIfSs9g14/BRpYwHrWQgz6" crossorigin="anonymous" /> 
4<script type='text/javascript' src='https://eloquentarduino.github.io/wp-includes/js/jquery/jquery.js?ver=1.12.4-wp'></script>
4 <link rel='https://api.w.org/' href='https://eloquentarduino.github.io/wp-json/' /><link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://eloquentarduino.github.io/xmlrpc.php?rsd" /><meta name="generator" content="WordPress 5.3.6" /> 
4<script data-name="BMC-Widget" src="https://cdnjs.buymeacoffee.com/1.0.0/widget.prod.min.js" data-id="eloquentarduino" data-description="Support me on Buy Me a Coffee!" data-message="Thank you for visiting. You can now buy me a coffee!" data-color="#5F7FFF" data-position="right" data-x_margin="18" data-y_margin="18"></script>
4 <meta name="google-site-verification" content="xgigjPrbbYDemskTaGLT9WGhmw8wgdeFtpDxVak0awI" /><link rel="alternate" type="application/feed+json" title="Eloquent Arduino Blog &raquo; JSON Feed" href="https://eloquentarduino.github.io/feed/json/" /><link rel="alternate" type="application/feed+json" title="Eloquent Arduino Blog &raquo; Arduino Machine learning Category Feed" href="https://eloquentarduino.github.io/category/programming/arduino-machine-learning/feed/json/" /></head><body class="archive category category-arduino-machine-learning category-8 has-body"><div class="wrapper"><div class="sidebar"><div class="blog-header"> <a class="blog-logo" href='https://eloquentarduino.github.io' title='Eloquent Arduino Blog &mdash; Machine learning on Arduino, programming &amp; electronics' rel='home'> <noscript><img src="https://eloquentarduino.github.io/wp-content/uploads/2019/12/logo-completo.png" alt="Eloquent Arduino Blog"></noscript><img class="lazyload" src='data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20viewBox=%220%200%20210%20140%22%3E%3C/svg%3E' data-src="https://eloquentarduino.github.io/wp-content/uploads/2019/12/logo-completo.png" alt="Eloquent Arduino Blog"> </a></div><div class="nav-toggle toggle"><p> <span class="show">Show menu</span> <span class="hide">Hide menu</span></p><div class="bars"><div class="bar"></div><div class="bar"></div><div class="bar"></div><div class="clear"></div></div></div><div class="blog-menu"><ul class="navigation"><li id="menu-item-461" class="menu-item menu-item-type-taxonomy menu-item-object-category current-menu-item menu-item-461"><a href="https://eloquentarduino.github.io/category/programming/arduino-machine-learning/" aria-current="page">Arduino Machine learning</a></li><li id="menu-item-462" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-462"><a href="https://eloquentarduino.github.io/category/programming/eloquent-library/">Eloquent library</a></li></ul><div class="clear"></div></div><div class="mobile-menu"><ul class="navigation"><li class="menu-item menu-item-type-taxonomy menu-item-object-category current-menu-item menu-item-461"><a href="https://eloquentarduino.github.io/category/programming/arduino-machine-learning/" aria-current="page">Arduino Machine learning</a></li><li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-462"><a href="https://eloquentarduino.github.io/category/programming/eloquent-library/">Eloquent library</a></li></ul></div><div class="widgets" role="complementary"><div class="widget_text widget widget_custom_html"><div class="widget_text widget-content"><div class="textwidget custom-html-widget"><div style="text-align: center"> <noscript><img src="/wp-content/uploads/2020/04/profilo.png" alt="Profile pic" style="width: 125px" /></noscript><img class="lazyload" src='data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20viewBox=%220%200%20210%20140%22%3E%3C/svg%3E' data-src="/wp-content/uploads/2020/04/profilo.png" alt="Profile pic" style="width: 125px" /> <a href="/about-me" style="display: block; font-size: 18px">About me</a></div></div></div><div class="clear"></div></div><div class="widget widget_search"><div class="widget-content"><form method="get" class="searchform" action="https://eloquentarduino.github.io" id="searchform"><div role="search" class="searchbox__wrapper"> <input id="search-input" type="search" name="search" placeholder="Search the blog" autocomplete="off" required="required" class="searchbox__input"> <button type="submit" title="Submit your search query." class="searchbox__submit" > <svg role="img" aria-label="Search"> <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#sbx-icon-search-13"></use> </svg> </button> <button type="reset" title="Clear the search query." class="searchbox__reset hide"> <svg role="img" aria-label="Reset"> <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#sbx-icon-clear-3"></use> </svg> </button></div></form></div><div class="clear"></div></div><div class="widget widget_recent_entries"><div class="widget-content"><h3 class="widget-title">Recent Posts</h3><ul><li> <a href="https://eloquentarduino.github.io/2021/11/3-lines-of-code-person-detection-on-arduino-portenta-and-esp32/">Person Detection on Arduino Portenta Vision Shield and ESP32 with Just 3 Lines of Code</a></li><li> <a href="https://eloquentarduino.github.io/2021/10/arduino-gesture-recognition-the-easy-way-with-machine-learning/">Arduino gesture recognition: the easy way with Machine Learning</a></li><li> <a href="https://eloquentarduino.github.io/2021/09/rgb-histogram-of-esp32-cam-images/">RGB histogram of ESP32-CAM images</a></li><li> <a href="https://eloquentarduino.github.io/2021/07/tftrackpad-ai-powered-
4programmable-diy-trackpad/">TfTrackpad: AI-powered, programmable DIY trackpad</a></li><li> <a href="https://eloquentarduino.github.io/2021/06/covid-patient-health-assessing-device-using-sliding-window/">Covid Patient Health Assessing Device Using Sliding Window</a></li></ul></div><div class="clear"></div></div><div class="widget widget_sub_categories"><div class="widget-content"><h3 class="widget-title">Programming</h3><ul><li class="cat-item cat-item-8 current-cat"><a aria-current="page" href="https://eloquentarduino.github.io/category/programming/arduino-machine-learning/">Arduino Machine learning</a><ul class='children'><li class="cat-item cat-item-23"><a href="https://eloquentarduino.github.io/category/programming/arduino-machine-learning/arduino-machine-learning-project/">Arduino Machine Learning project</a></li><li class="cat-item cat-item-24"><a href="https://eloquentarduino.github.io/category/programming/arduino-machine-learning/arduino-machine-learning-tutorial/">Arduino Machine Learning tutorial</a></li><li class="cat-item cat-item-26"><a href="https://eloquentarduino.github.io/category/programming/arduino-machine-learning/tinyml/">TinyML</a></li></ul></li><li class="cat-item cat-item-12"><a href="https://eloquentarduino.github.io/category/programming/computer-vision/">Computer vision</a></li><li class="cat-item cat-item-7"><a href="https://eloquentarduino.github.io/category/programming/eloquent-library/">Eloquent library</a></li></ul></div><div class="clear"></div></div><div class="widget widget_tag_cloud"><div class="widget-content"><h3 class="widget-title">TAGS</h3><div class="tagcloud"><a href="https://eloquentarduino.github.io/tag/camera/" class="tag-cloud-link tag-link-11 tag-link-position-1" style="font-size: 15.12962962963pt;" aria-label="camera (6 items)">camera</a> <a href="https://eloquentarduino.github.io/tag/eloquent/" class="tag-cloud-link tag-link-4 tag-link-position-2" style="font-size: 11.888888888889pt;" aria-label="eloquent (3 items)">eloquent</a> <a href="https://eloquentarduino.github.io/tag/esp32/" class="tag-cloud-link tag-link-10 tag-link-position-3" style="font-size: 15.12962962963pt;" aria-label="esp32 (6 items)">esp32</a> <a href="https://eloquentarduino.github.io/tag/howto/" class="tag-cloud-link tag-link-27 tag-link-position-4" style="font-size: 10.333333333333pt;" aria-label="howto (2 items)">howto</a> <a href="https://eloquentarduino.github.io/tag/incremental-learning/" class="tag-cloud-link tag-link-16 tag-link-position-5" style="font-size: 8pt;" aria-label="incremental-learning (1 item)">incremental-learning</a> <a href="https://eloquentarduino.github.io/tag/microml/" class="tag-cloud-link tag-link-5 tag-link-position-6" style="font-size: 22pt;" aria-label="microml (23 items)">microml</a> <a href="https://eloquentarduino.github.io/tag/ml/" class="tag-cloud-link tag-link-17 tag-link-position-7" style="font-size: 14.222222222222pt;" aria-label="ml (5 items)">ml</a> <a href="https://eloquentarduino.github.io/tag/online-learning/" class="tag-cloud-link tag-link-15 tag-link-position-8" style="font-size: 10.333333333333pt;" aria-label="online-learning (2 items)">online-learning</a> <a href="https://eloquentarduino.github.io/tag/pca/" class="tag-cloud-link tag-link-21 tag-link-position-9" style="font-size: 8pt;" aria-label="pca (1 item)">pca</a> <a href="https://eloquentarduino.github.io/tag/portenta/" class="tag-cloud-link tag-link-30 tag-link-position-10" style="font-size: 8pt;" aria-label="portenta (1 item)">portenta</a> <a href="https://eloquentarduino.github.io/tag/rvm/" class="tag-cloud-link tag-link-13 tag-link-position-11" style="font-size: 8pt;" aria-label="rvm (1 item)">rvm</a> <a href="https://eloquentarduino.github.io/tag/svm/" class="tag-cloud-link tag-link-14 tag-link-position-12" style="font-size: 18.111111111111pt;" aria-label="svm (11 items)">svm</a> <a href="https://eloquentarduino.github.io/tag/tinyml/" class="tag-cloud-link tag-link-20 tag-link-position-13" style="font-size: 17.074074074074pt;" aria-label="tinyml (9 items)">tinyml</a> <a href="https://eloquentarduino.github.io/tag/tutorial/" class="tag-cloud-link tag-link-29 tag-link-position-14" style="font-size: 8pt;" aria-label="tutorial (1 item)">
4tutorial</a> <a href="https://eloquentarduino.github.io/tag/you-may-not-need-neural-networks/" class="tag-cloud-link tag-link-28 tag-link-position-15" style="font-size: 8pt;" aria-label="you may not need neural networks (1 item)">you may not need neural networks</a></div></div><div class="clear"></div></div></div></div><div class="content"><div class="page-title"><h4> Category<span class="name">Arduino Machine learning</span></h4></div><div class="posts"><div id="post-1670" class="post-1670 post type-post status-publish format-standard hentry category-arduino-machine-learning-project category-arduino-machine-learning-tutorial category-tinyml tag-esp32 tag-portenta tag-tinyml"><div class="post-inner"><div class="post-header"><h2 class="post-title"> <a href="https://eloquentarduino.github.io/2021/11/3-lines-of-code-person-detection-on-arduino-portenta-and-esp32/" rel="bookmark" title="Person Detection on Arduino Portenta Vision Shield and ESP32 with Just 3 Lines of Code">Person Detection on Arduino Portenta Vision Shield and ESP32 with Just 3 Lines of Code</a></h2><div class="post-meta"> <span class="post-date"><a href="https://eloquentarduino.github.io/2021/11/3-lines-of-code-person-detection-on-arduino-portenta-and-esp32/" title="Person Detection on Arduino Portenta Vision Shield and ESP32 with Just 3 Lines of Code">10 November 2021</a></span> <span class="date-sep"> / </span> <span class="post-author"><a href="https://eloquentarduino.github.io/author/simone/" title="Posts by simone" rel="author">simone</a></span></div></div><div class="post-content"><div class="has-content-area" data-url="https://eloquentarduino.github.io/2021/11/3-lines-of-code-person-detection-on-arduino-portenta-and-esp32/" data-title="Person Detection on Arduino Portenta Vision Shield and ESP32 with Just 3 Lines of Code" data-hashtags=""><p>Have you ever wanted to perform person detection on Arduino or ESP32 boards? Found it difficult to custimize the sketch to suit your needs? Fear no more!</p><p>Person detection on Arduino and ESP32 microcontrollers doesn't have to be difficult: with the right library, you only need <strong>3 lines of code to perform state-of-the-art person detection</strong>. You use TensorFlow Neural Networks without any boilerplate and verbose code using the <a href="https://github.com/eloquentarduino/EloquentTinyML">EloquentTinyML library</a>.</p><p><noscript><img src="https://eloquentarduino.github.io/wp-content/uploads/2021/11/Arduino-Portenta-Person-Detection-cover-1024x568.png" alt="Arduino Portenta Person Detection cover" /></noscript><img class="lazyload" src='data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20viewBox=%220%200%20210%20140%22%3E%3C/svg%3E' data-src="https://eloquentarduino.github.io/wp-content/uploads/2021/11/Arduino-Portenta-Person-Detection-cover-1024x568.png" alt="Arduino Portenta Person Detection cover" /></p><p> <a href="https://eloquentarduino.github.io/2021/11/3-lines-of-code-person-detection-on-arduino-portenta-and-esp32/#more-1670" class="more-link">Continue reading</a></p></div></div><div class="clear"></div></div></div><div id="post-1637" class="post-1637 post type-post status-publish format-standard hentry category-arduino-machine-learning category-arduino-machine-learning-project category-arduino-machine-learning-tutorial category-tinyml tag-tutorial"><div class="post-inner"><div class="post-header"><h2 class="post-title"> <a href="https://eloquentarduino.github.io/2021/10/arduino-gesture-recognition-the-easy-way-with-machine-learning/" rel="bookmark" title="Arduino gesture recognition: the easy way with Machine Learning">Arduino gesture recognition: the easy way with Machine Learning</a></h2><div class="post-meta"> <span class="post-date"><a href="https://eloquentarduino.github.io/2021/10/arduino-gesture-recognition-the-easy-way-with-machine-learning/" title="Arduino gesture recognition: the easy way with Machine Learning">17 October 2021</a></span> <span class="date-sep"> / </span> <span class="post-author"><a href="https://eloquentarduino.github.io/author/simone/" title="Posts by simone" rel="author">simone</a></span></div></div><div class="post-content"><div class="has-content-area" data-url="https://eloquentarduino.github.io/2021/10/arduino-gesture-recognition-the-easy-way-with-machine-learning/" data-title="Arduino gesture recognition: the easy way with Machine Learning" data-hashtags=""><p>Are you looking for a project to get started with Machine Learning on Arduino and don't know 
4where to start?</p><p>Do most of the tutorials on Arduino gesture recognition you found on the internet look too complicated for you?</p><p>You're in the right place!</p><p>In this tutorial I'm going to show you one of the easiest possible ways to get started with Machine Learning on Arduino boards while also creating something useful: a <strong>gesture recognition system based on an accelerometer.</strong></p><p><noscript><img src="https://eloquentarduino.github.io/wp-content/uploads/2021/10/Arduino-gesture-recognition-Vertical-gesture.png" alt="Arduino gesture recognition - Vertical gesture" /></noscript><img class="lazyload" src='data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20viewBox=%220%200%20210%20140%22%3E%3C/svg%3E' data-src="https://eloquentarduino.github.io/wp-content/uploads/2021/10/Arduino-gesture-recognition-Vertical-gesture.png" alt="Arduino gesture recognition - Vertical gesture" /></p><p> <a href="https://eloquentarduino.github.io/2021/10/arduino-gesture-recognition-the-easy-way-with-machine-learning/#more-1637" class="more-link">Continue reading</a></p></div></div><div class="clear"></div></div></div><div id="post-1573" class="post-1573 post type-post status-publish format-standard hentry category-arduino-machine-learning-project tag-tinyml tag-you-may-not-need-neural-networks"><div class="post-inner"><div class="post-header"><h2 class="post-title"> <a href="https://eloquentarduino.github.io/2021/06/covid-patient-health-assessing-device-using-sliding-window/" rel="bookmark" title="Covid Patient Health Assessing Device Using Sliding Window">Covid Patient Health Assessing Device Using Sliding Window</a></h2><div class="post-meta"> <span class="post-date"><a href="https://eloquentarduino.github.io/2021/06/covid-patient-health-assessing-device-using-sliding-window/" title="Covid Patient Health Assessing Device Using Sliding Window">26 June 2021</a></span> <span class="date-sep"> / </span> <span class="post-author"><a href="https://eloquentarduino.github.io/author/simone/" title="Posts by simone" rel="author">simone</a></span></div></div><div class="post-content"><div class="has-content-area" data-url="https://eloquentarduino.github.io/2021/06/covid-patient-health-assessing-device-using-sliding-window/" data-title="Covid Patient Health Assessing Device Using Sliding Window" data-hashtags=""><p>In this short post we'll take a project that uses Edge Implulse and a Neural Network to classify Covid patients' health and implement it using a completely different approach: a sliding window with basic statistics (min/max/mean/std).</p><p>At the end of the post you may be wandering: &quot;do I really need Neural Networks?&quot;</p><p><noscript><img src="https://eloquentarduino.github.io/wp-content/uploads/2021/06/Stable-Covid.png" alt="" /></noscript><img class="lazyload" src='data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20viewBox=%220%200%20210%20140%22%3E%3C/svg%3E' data-src="https://eloquentarduino.github.io/wp-content/uploads/2021/06/Stable-Covid.png" alt="" /></p><p> <a href="https://eloquentarduino.github.io/2021/06/covid-patient-health-assessing-device-using-sliding-window/#more-1573" class="more-link">Continue reading</a></p></div></div><div class="clear"></div></div></div><div id="post-1564" class="post-1564 post type-post status-publish format-standard hentry category-arduino-machine-learning-project tag-howto tag-tinyml"><div class="post-inner"><div class="post-header"><h2 class="post-title"> <a href="https://eloquentarduino.github.io/2021/06/howto-load-tensorflow-lite-tinyml-model-from-internet-on-arduino/" rel="bookmark" title="HowTo: Load Tensorflow Lite Tinyml model from internet on Arduino">HowTo: Load Tensorflow Lite Tinyml model from internet on Arduino</a></h2><div class="post-meta"> <span class="post-date"><a href="https://eloquentarduino.github.io/2021/06/howto-load-tensorflow-lite-tinyml-model-from-internet-on-arduino/" title="HowTo: Load Tensorflow Lite Tinyml model from internet on Arduino">6 June 2021</a></span> <span class="date-sep"> / </span> <span class="post-author"><a href="https://eloquentarduino.github.io/author/simone/" title="Posts by simone" rel="author">simone</a></span></div></div><div class="post-content"><div class="has-content-area" data-url="https://eloquentarduino.github.io/2021/06/howto-load-tensorflow-lite-tinyml-model-from-internet-on-arduino/" data-title="HowTo: Load Tensorflow Lite Tinyml model from internet on Arduino" data-hashtags=""><p>If you have an internet-connected board, you can now load Tensorflow Lite Tinyml models on-demand directly from the internet! This way you can repurpose your board for different applications without flashing new firmware. Let's see how in this tutorial.</p><p><noscript><img src="https://eloquentarduino.github.io/wp-content/uploads/2021/06/Tf-from-internet.png" alt="Tensorflow Tinyml from internet" /></noscript><img class="lazyload" src='data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20viewBox=%220%200%20210%20140%22%3E%3C/svg%3E' data-src="https://eloquentarduino.github.io/wp-content/uploads/2021/06/Tf-from-internet.png" alt="Tensorflow Tinyml from internet" /></p><hr /><p>
4A few days ago I showed you <a href="/2021/05/load-tensorflow-lite-model-from-sd-card-in-arduino/">how to load Tensorflow Lite Tinyml models from an SD card in Arduino</a>. This time I'll show you <strong>how to download models from internet</strong>.</p><p>Why?</p><p>If your board has internet connectivity (either Ethernet or Wifi), you may want to load different models as per user needs, or maybe you host your own models and want to keep them updated so they improve the end user experience without requiring firmware update.</p><p>Whatever your use-case, it really is very easy to download a model from the internet, much similar to how we did for the SD card. It is a 3 step process:</p><ol><li>connect to internet (either Ethernet or WiFi)</li><li>download model from URL</li><li>initialize Tensorflow from the downloaded model</li></ol><p>The whole sketch is quite short and mostly contains boilerplate code (connect to wifi, make HTTP request, run Tensorflow tinyml inference). I will make use of the <a href="https://github.com/eloquentarduino/EloquentTinyML">EloquentTinyML</a> library because it makes using Tf painless.</p><p>The sketch should work on many different boards without any (significant) modification: I tested it on an ESP32, but you could use the new Arduino RP2040 Connect for example.</p><p>As always, we'll load the sine model from an HTTP server (in a next post I will show the HTTPS version).</p><pre><code class="language-cpp">#include &lt;SPI.h&gt;
5#include &lt;WiFi.h&gt;
6// include WifiNINA instead of WiFi for Arduino boards
7// #include &lt;WiFiNINA.h&gt;
8#include &lt;HttpClient.h&gt;
9#include &lt;EloquentTinyML.h&gt;
10#include &lt;eloquent_tinyml/tensorflow.h&gt;
11
12#define N_INPUTS 1
13#define N_OUTPUTS 1
14#define TENSOR_ARENA_SIZE 2*1024
15
16char SSID[] = &quot;NetworkSSID&quot;;
17char PASS[] = &quot;Password&quot;;
18
19// this is a server I owe that doesn&#039;t require HTTPS, you can replace with whatever server you have at hand
20// that supports HTTP
21const char server[] = &quot;152.228.173.213&quot;;
22const char path[] = &quot;/sine.bin&quot;;
23
24WiFiClient client;
25HttpClient http(client);
26
27uint8_t *model;
28Eloquent::TinyML::TensorFlow::TensorFlow&lt;N_INPUTS, N_OUTPUTS, TENSOR_ARENA_SIZE&gt; tf;
29
30void setup() {
31    Serial.begin(115200);
32    delay(2000);
33
34    wifi_connect();
35    download_model();
36
37    // init Tf from loaded model
38    if (!tf.begin(model)) {
39        Serial.println(&quot;Cannot inialize model&quot;);
40        Serial.println(ml.errorMessage());
41        delay(60000);
42    }
43    else {
44        Serial.println(&quot;Model loaded, starting inference&quot;);
45    }
46}
47
48void loop() {
49    // pick up a random x and predict its sine
50    float x = 3.14 * random(100) / 100;
51    float y = sin(x);
52    float input[1] = { x };
53    float predicted = tf.predict(input);
54
55    Serial.print(&quot;sin(&quot;);
56    Serial.print(x);
57    Serial.print(&quot;) = &quot;);
58    Serial.print(y);
59    Serial.print(&quot;\t predicted: &quot;);
60    Serial.println(predicted);
61    delay(1000);
62}
63
64/**
65 * Connect to wifi
66 */
67void wifi_connect() {
68    int status = WL_IDLE_STATUS;
69
70    while (status != WL_CONNECTED) {
71        Serial.print(&quot;Attempting to connect to SSID: &quot;);
72        Serial.println(SSID);
73        status = WiFi.begin(SSID, PASS);
74
75        delay(1000);
76    }
77
78    Serial.println(&quot;Connected to wifi&quot;);
79}
80
81/**
82 * Download model from URL
83 */
84void download_model() {
85    http.get(server, path);
86    http.responseStatusCode();
87    http.skipResponseHeaders();
88
89    int modelSize = http.contentLength();
90
91    Serial.print(&quot;Model size is: &quot;);
92    Serial.println(modelSize);
93    Serial.println();
94
95    model = (uint8_t*) malloc(modelSize);
96
97    http.read(model, modelSize);
98}</code></pre><hr><p>Check the full project code on <a href="https://github.com/eloquentarduino/EloquentTinyML/blob/master/examples/SineFromInternetExample/SineFromInternetExample.ino" target="_blank" rel="noopener noreferrer">Github</a> and remember to star!</p></div></div><div class="clear"></div></div></div><div id="post-1551" class="post-1551 post type-post status-publish format-standard hentry category-arduino-machine-learning-project category-tinyml tag-howto tag-tinyml"><div class="post-inner"><div class="post-header"><h2 class="post-title"> <a href="https://eloquentarduino.github.io/2021/05/load-tensorflow-lite-model-from-sd-card-in-arduino/" rel="bookmark" title="HowTo: Load Tensorflow Lite model from SD card in Arduino">HowTo: Load Tensorflow Lite model from SD card in Arduino</a></h2><div class="post-meta"> <span class="post-date"><a href="https://eloquentarduino.github.io/2021/05/load-tensorflow-lite-model-from-sd-card-in-arduino/" title="HowTo: Load Tensorflow Lite model from SD card in Arduino">22 May 2021</a></span> <span class="date-sep"> / </span> <span class="post-author"><a href="https://eloquentarduino.github.io/author/simone/" title="Posts by simone" rel="author">simone</a></span></div></div><div class="post-content"><div class="has-content-area" data-url="https://eloquentarduino.github.io/2021/05/load-tensorflow-lite-model-from-sd-card-in-arduino/" data-title="HowTo: Load Tensorflow Lite model from SD card in Arduino" data-hashtags=""><p>In this short post we'll take a look at how lo load Tensorflow Lite models exported as a C header file from the filesystem, be it an SD card or the built-in SPIFFS filesystem on ESP32 devices.</p><p><noscript><img src="https://eloquentarduino.github.io/wp-content/uploads/2021/05/Load-Tensorflow-model-from-SD-card.png" alt="Load Tensorflow model from SD card" /></noscript><img class="lazyload" src='data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20viewBox=%220%200%20210%20140%22%3E%3C/svg%3E' data-src="https://eloquentarduino.github.io/wp-content/uploads/2021/05/Load-Tensorflow-model-from-SD-card.png" alt="Load Tensorflow model from SD card" /></p><p> <a href="https://eloquentarduino.github.io/2021/05/load-tensorflow-lite-model-from-sd-card-in-arduino/#more-1551" class="more-link">Continue reading</a></p></div></div><div class="clear"></div></div></div><div id="post-1532" class="post-1532 post type-post status-publish format-standard hentry category-arduino-machine-learning category-tinyml tag-tinyml"><div class="post-inner"><div class="post-header"><h2 class="post-title"> <a href="https://eloquentarduino.github.io/2021/04/tinyml-benchmark-fully-connected-neural-networks/" rel="bookmark" title="TinyML Benchmark: Fully Connected Neural Networks (now with Raspberry Pi Pico!)">TinyML Benchmark: Fully Connected Neural Networks (now with Raspberry Pi Pico!)</a></h2><div class="post-meta"> <span class="post-date"><a href="https://eloquentarduino.github.io/2021/04/tinyml-benchmark-fully-connected-neural-networks/" title="TinyML Benchmark: Fully Connected Neural Networks (now with Raspberry Pi Pico!)">5 April 2021</a></span> <span class="date-sep"> / </span> <span class="post-author"><a href="https://eloquentarduino.github.io/author/simone/" title="Posts by simone" rel="author">simone</a></span></div></div><div class="post-content"><div class="has-content-area" data-url="https://eloquentarduino.github.io/2021/04/tinyml-benchmark-fully-connected-neural-networks/" data-title="TinyML Benchmark: Fully Connected Neural Networks (now with Raspberry Pi Pico!)" data-hashtags=""><p>Ever wandered how fast are the major microcontroller boards to run Tensorflow Lite neural networks? In this post we'll find it out for the case of Fully Connected networks.</p><p><noscript><img src="https://eloquentarduino.github.io/wp-content/uploads/2021/04/Fully-connected-benchmarks.png" alt="Fully connected benchmarks" /></noscript><img class="lazyload" src='data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20viewBox=%220%200%20210%20140%22%3E%3C/svg%3E' data-src="https://eloquentarduino.github.io/wp-content/uploads/2021/04/Fully-connected-benchmarks.png" alt="Fully connected benchmarks" /></p><p> <a href="https://eloquentarduino.github.io/2021/04/tinyml-benchmark-fully-connected-neural-networks/#more-1532" class="more-link">Continue reading</a></p></div></div><div class="clear"></div></div></div><div id="post-1516" class="post-1516 post type-post status-publish format-standard hentry category-arduino-machine-learning category-tinyml tag-tinyml"><div class="post-inner"><div class="post-header"><h2 class="post-title"> <a href="https://eloquentarduino.github.io/2021/03/tinyml-classification-example-wine-dataset/" rel="bookmark" title="TinyML classification example: Wine dataset">TinyML classification example: Wine dataset</a></h2><div class="post-meta"> <span class="post-date"><a href="https://eloquentarduino.github.io/2021/03/tinyml-classification-example-wine-dataset/" title="TinyML classification example: Wine dataset">23 March 2021</a></span> <span class="date-sep"> / </span> <span class="post-author"><a href="https://eloquentarduino.github.io/author/simone/" title="Posts by simone" rel="author">simone</a></span></div></div><div class="post-content"><div class="has-content-area" data-url="https://eloquentarduino.github.io/2021/03/tinyml-classification-example-wine-dataset/" data-title="TinyML classification example: Wine dataset" data-hashtags=""><p>This post is a step by step tutorial on how to train, export and run a Tensorflow Neural Network on an Arduino-compatible microcontroller for the task of classification: in particular, we will classify the Wine dataset.</p><p><noscript><img src="https://eloquentarduino.github.io/wp-content/uploads/2021/03/TinyML-Arduino.png" alt="TinyML Arduino" /></noscript><img class="lazyload" src='data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20viewBox=%220%200%20210%20140%22%3E%3C/svg%3E' data-src="https://eloquentarduino.github.io/wp-content/uploads/2021/03/TinyML-Arduino.png" alt="TinyML Arduino" /></p><p> <a href="https://eloquentarduino.github.io/2021/03/tinyml-classification-example-wine-dataset/#more-1516" class="more-link">Continue reading</a></p></div></div><div class="clear"></div></div></div><div id="post-1502" class="post-1502 post type-post status-publish format-standard hentry category-arduino-machine-learning tag-tinyml"><div class="post-inner"><div class="post-header"><h2 class="post-title"> <a href="https://eloquentarduino.github.io/2021/01/tinyml-benchmark-arduino-portenta-h7-vs-teensy-4-0-vs-stm32-nucleo-h743zi2/" rel="bookmark" title="TinyML benchmark: Arduino Portenta H7 vs Teensy 4.0 vs STM32 Nucleo H743ZI2">TinyML benchmark: Arduino Portenta H7 vs Teensy 4.0 vs STM32 Nucleo H743ZI2</a></h2><div class="post-meta"> <span class="post-date"><a href="https://eloquentarduino.github.io/2021/01/tinyml-benchmark-arduino-portenta-h7-vs-teensy-4-0-vs-stm32-nucleo-h743zi2/" title="TinyML benchmark: Arduino Portenta H7 vs Teensy 4.0 vs STM32 Nucleo H743ZI2">23 January 2021</a></span> <span class="date-sep"> / </span> <span class="post-author"><a href="https://eloquentarduino.github.io/author/simone/" title="Posts by simone" rel="author">simone</a></span></div></div><div class="post-content"><div class="has-content-area" data-url="https://eloquentarduino.github.io/2021/01/tinyml-benchmark-arduino-portenta-h7-vs-teensy-4-0-vs-stm32-nucleo-h743zi2/" data-title="TinyML benchmark: Arduino Portenta H7 vs Teensy 4.0 vs STM32 Nucleo H743ZI2" data-hashtags=""><p>A few days ago I asked a poll on my Twitter for who do you think would be the fastest board for TinyML among Arduino Portenta H7, Teensy 4.0 and STM32 Nucleo H743ZI2. Both Portenta and Nucleo ranked on par at first position, leaving Teensy behind.</p><p>This post will answer that poll with real-world numbers: all of them share an ARM Cortex M7 cpu, but which one is the winner?</p><p>Let's check it out (it includes a lot of charts)!</p><p><noscript><img src="https://eloquentarduino.github.io/wp-content/uploads/2021/01/Arduino-Portenta-H7-vs-Teensy-4-vs-STM32-Nucleo-H743ZI2.png" alt="Arduino Portenta H7 vs Teensy 4 vs STM32 Nucleo H743ZI2" /></noscript><img class="lazyload" src='data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20viewBox=%220%200%20210%20140%22%3E%3C/svg%3E' data-src="https://eloquentarduino.github.io/wp-content/uploads/2021/01/Arduino-Portenta-H7-vs-Teensy-4-vs-STM32-Nucleo-H743ZI2.png" alt="Arduino Portenta H7 vs Teensy 4 vs STM32 Nucleo H743ZI2" /></p><p> <a href="https://eloquentarduino.github.io/2021/01/tinyml-benchmark-arduino-portenta-h7-vs-teensy-4-0-vs-stm32-nucleo-h743zi2/#more-1502" class="more-link">Continue reading</a></p></div></div><div class="clear"></div></div></div><div id="post-1416" class="post-1416 post type-post status-publish format-standard hentry category-arduino-machine-learning"><div class="post-inner"><div class="post-header"><h2 class="post-title">
98 <a href="https://eloquentarduino.github.io/2020/12/tinyml-benchmark-table/" rel="bookmark" title="The Grand Benchmark Table of Embedded Machine Learning">The Grand Benchmark Table of Embedded Machine Learning</a></h2><div class="post-meta"> <span class="post-date"><a href="https://eloquentarduino.github.io/2020/12/tinyml-benchmark-table/" title="The Grand Benchmark Table of Embedded Machine Learning">16 December 2020</a></span> <span class="date-sep"> / </span> <span class="post-author"><a href="https://eloquentarduino.github.io/author/simone/" title="Posts by simone" rel="author">simone</a></span></div></div><div class="post-content"><div class="has-content-area" data-url="https://eloquentarduino.github.io/2020/12/tinyml-benchmark-table/" data-title="The Grand Benchmark Table of Embedded Machine Learning" data-hashtags=""><p>How tiny is TinyML? How <em>fast</em> is TinyML?</p><p>Do you want to get some <em>REAL</em> numbers on embedded machine learning on Arduino, STM32, ESP32, Seeedstudio boards (and more coming)?</p><p>This page will answer all your questions!</p><p><noscript><img src="https://eloquentarduino.github.io/wp-content/uploads/2020/12/Inference-time-vs-Accuracy-scatter-plot.png" alt="Inference time vs Accuracy scatter plot" /></noscript><img class="lazyload" src='data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20viewBox=%220%200%20210%20140%22%3E%3C/svg%3E' data-src="https://eloquentarduino.github.io/wp-content/uploads/2020/12/Inference-time-vs-Accuracy-scatter-plot.png" alt="Inference time vs Accuracy scatter plot" /></p><p> <a href="https://eloquentarduino.github.io/2020/12/tinyml-benchmark-table/#more-1416" class="more-link">Continue reading</a></p></div></div><div class="clear"></div></div></div><div id="post-1264" class="post-1264 post type-post status-publish format-standard hentry category-arduino-machine-learning category-arduino-machine-learning-tutorial tag-microml tag-ml"><div class="post-inner"><div class="post-header"><h2 class="post-title"> <a href="https://eloquentarduino.github.io/2020/10/decision-tree-random-forest-and-xgboost-on-arduino/" rel="bookmark" title="Decision Tree, Random Forest and XGBoost on Arduino">Decision Tree, Random Forest and XGBoost on Arduino</a></h2><div class="post-meta"> <span class="post-date"><a href="https://eloquentarduino.github.io/2020/10/decision-tree-random-forest-and-xgboost-on-arduino/" title="Decision Tree, Random Forest and XGBoost on Arduino">19 October 2020</a></span> <span class="date-sep"> / </span> <span class="post-author"><a href="https://eloquentarduino.github.io/author/simone/" title="Posts by simone" rel="author">simone</a></span></div></div><div class="post-content"><div class="has-content-area" data-url="https://eloquentarduino.github.io/2020/10/decision-tree-random-forest-and-xgboost-on-arduino/" data-title="Decision Tree, Random Forest and XGBoost on Arduino" data-hashtags=""><p>You will be surprised by how much accuracy you can achieve in just a few kylobytes of resources: <strong>Decision Tree, Random Forest and XGBoost (Extreme Gradient Boosting)</strong> are now available on your microcontrollers: highly RAM-optmized implementations for super-fast classification on embedded devices.</p><p><noscript><img src="https://eloquentarduino.github.io/wp-content/uploads/2020/08/DecisionTree.png" alt="DecisionTree" /></noscript><img class="lazyload" src='data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20viewBox=%220%200%20210%20140%22%3E%3C/svg%3E' data-src="https://eloquentarduino.github.io/wp-content/uploads/2020/08/DecisionTree.png" alt="DecisionTree" /></p><p> <a href="https://eloquentarduino.github.io/2020/10/decision-tree-random-forest-and-xgboost-on-arduino/#more-1264" class="more-link">Continue reading</a></p></div></div><div class="clear"></div></div></div></div><div class="archive-nav"> <a href="https://eloquentarduino.github.io/category/programming/arduino-machine-learning/page/2/" class="post-nav-older">Older<span> posts</span></a><div class="clear"></div></div><div class="footer section large-padding bg-dark"><div class="clear"></div></div><div class="credits"><div class="credits-inner"><p class="credits-left">&copy; 2021 <a href="https://eloquentarduino.github.io" title="Eloquent Arduino Blog">Eloquent Arduino Blog</a></p><p class="credits-right"><span>Theme by <a href="https://www.andersnoren.se">Anders Nor&eacute;n</a></span> &mdash; <a title="To the top" class="tothetop">Up &uarr;</a></p><div class="clear"></div></div></div></div><div class="clear"></div></div> 
98<script src="//cdn.jsdelivr.net/algoliasearch/3/algoliasearch.min.js"></script>
98 
98<script src="//cdn.jsdelivr.net/autocomplete.js/0/autocomplete.min.js"></script>
vendor: 65 bytes, line 98
98  <script async src="https://www.googletagmanager.com/gtag/js?id=
98UA-154550080-1
vendor: 12 bytes, line 98
98"></script> 
98<script>if (window.location.href.indexOf("eloquentarduino.github.io") > -1) {
99  
vendor: 134 bytes, lines 99-103
99window.dataLayer = window.dataLayer || [];
100  function gtag(){dataLayer.push(arguments);}
101  gtag('js', new Date());
102
103  gtag('config', '
103UA-154550080-1
vendor: 4 bytes, line 103
103');
104}</script>
104  
104<script>(function() {
105setTimeout(function() {
106  var d = document, s = d.createElement('script');
107  s.src = 'https://eloquent-arduino.disqus.com/embed.js';
108  s.setAttribute('data-timestamp', +new Date());
109  (d.head || d.body).appendChild(s);},
1101000);
111})();</script>
111  <noscript><style>.lazyload{display:none;}</style></noscript>
111<script data-noptimize="1">window.lazySizesConfig=window.lazySizesConfig||{};window.lazySizesConfig.loadMode=1;</script>
111<script async data-noptimize="1" src='https://eloquentarduino.github.io/wp-content/plugins/autoptimize/classes/external/js/lazysizes.min.js?ao_version=2.9.2'></script>
111<div class="highlight-and-share-wrapper-inline highlight-and-share-wrapper"><div class="has_twitter" style="display: none;" data-type="twitter"><a href="https://twitter.com/intent/tweet?via=%username%&url=%url%&text=%prefix%%text%%suffix%&hashtags=%hashtags%" target="_blank"><svg class="has-icon"><use xlink:href="#has-twitter-icon"></use></svg><span class="has-text">&nbsp;Tweet</span></a></div><div class="has_facebook" style="display: none;" data-type="facebook"><a href="https://www.facebook.com/dialog/share?app_id=2530754057166153&display=popup&amp;quote=%prefix%%text%%suffix%&href=%url%" target="_blank"><svg class="has-icon"><use xlink:href="#has-facebook-icon"></use></svg><span class="has-text">&nbsp;Share</span></a></div></div><div class="highlight-and-share-wrapper-cts highlight-and-share-wrapper"><div class="has_twitter" style="display: none;" data-type="twitter"><a href="https://twitter.com/intent/tweet?via=%username%&url=%url%&text=%prefix%%text%%suffix%&hashtags=%hashtags%" target="_blank"><svg class="has-icon"><use xlink:href="#has-twitter-icon"></use></svg><span class="has-text">&nbsp;Tweet</span></a></div><div class="has_facebook" style="display: none;" data-type="facebook"><a href="https://www.facebook.com/dialog/share?app_id=2530754057166153&display=popup&amp;quote=%prefix%%text%%suffix%&href=%url%" target="_blank"><svg class="has-icon"><use xlink:href="#has-facebook-icon"></use></svg><span class="has-text">&nbsp;Share</span></a></div></div><div class="highlight-and-share-wrapper"><div class="has_twitter" style="display: none;" data-type="twitter"><a href="https://twitter.com/intent/tweet?via=%username%&url=%url%&text=%prefix%%text%%suffix%&hashtags=%hashtags%" target="_blank"><svg class="has-icon"><use xlink:href="#has-twitter-icon"></use></svg><span class="has-text">&nbsp;Tweet</span></a></div><div class="has_facebook" style="display: none;" data-type="facebook"><a href="https://www.facebook.com/dialog/share?app_id=2530754057166153&display=popup&amp;quote=%prefix%%text%%suffix%&href=%url%" target="_blank"><svg class="has-icon"><use xlink:href="#has-facebook-icon"></use></svg><span class="has-text">&nbsp;Share</span></a></div><div class="has_linkedin" style="display: none;" data-type="linkedin"><a href="https://www.linkedin.com/shareArticle?mini=true&url=%url%&title=%title%" target="_blank"><svg class="has-icon"><use xlink:href="#has-linkedin-icon"></use></svg><span class="has-text">&nbsp;LinkedIn</span></a></div></div> <svg width="0" height="0" class="hidden" style="display: none;"> <symbol aria-hidden="true" data-prefix="fas" data-icon="twitter" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" id="has-twitter-icon"> <path fill="currentColor" d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"></path> </symbol> <symbol aria-hidden="true" data-prefix="fas" data-icon="facebook" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512" id="has-facebook-icon"> <path fill="currentColor" d="M279.14 288l14.22-92.66h-88.91v-60.13c0-25.35 12.42-50.06 52.24-50.06h40.42V6.26S260.43 0 225.36 0c-73.22 0-121.08 44.38-121.08 124.72v70.62H22.89V288h81.39v224h100.17V288z"></path> </symbol> <symbol aria-hidden="true" data-prefix="fas" data-icon="at" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" id="has-email-icon"> <path fill="currentColor" d="M256 8C118.941 8 8 118.919 8 256c0 137.059 110.919 248 248 248 48.154 0 95.342-14.14 135.408-40.223 12.005-7.815 14.625-24.288 5.552-35.372l-10.177-12.433c-7.671-9.371-21.179-11.667-31.373-5.129C325.92 429.757 291.314 440 256 440c-101.458 0-184-82.542-184-184
111S154.542 72 256 72c100.139 0 184 57.619 184 160 0 38.786-21.093 79.742-58.17 83.693-17.349-.454-16.91-12.857-13.476-30.024l23.433-121.11C394.653 149.75 383.308 136 368.225 136h-44.981a13.518 13.518 0 0 0-13.432 11.993l-.01.092c-14.697-17.901-40.448-21.775-59.971-21.775-74.58 0-137.831 62.234-137.831 151.46 0 65.303 36.785 105.87 96 105.87 26.984 0 57.369-15.637 74.991-38.333 9.522 34.104 40.613 34.103 70.71 34.103C462.609 379.41 504 307.798 504 232 504 95.653 394.023 8 256 8zm-21.68 304.43c-22.249 0-36.07-15.623-36.07-40.771 0-44.993 30.779-72.729 58.63-72.729 22.292 0 35.601 15.241 35.601 40.77 0 45.061-33.875 72.73-58.161 72.73z"></path> </symbol> <symbol aria-hidden="true" data-prefix="fas" data-icon="linkedin" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512" id="has-linkedin-icon"> <path fill="currentColor" d="M100.28 448H7.4V148.9h92.88zM53.79 108.1C24.09 108.1 0 83.5 0 53.8a53.79 53.79 0 0 1 107.58 0c0 29.7-24.1 54.3-53.79 54.3zM447.9 448h-92.68V302.4c0-34.7-.7-79.2-48.29-79.2-48.29 0-55.69 37.7-55.69 76.7V448h-92.78V148.9h89.08v40.8h1.3c12.4-23.5 42.69-48.3 87.88-48.3 94 0 111.28 61.9 111.28 142.3V448z"></path> </symbol> <symbol aria-hidden="true" data-prefix="fas" data-icon="xing" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512" id="has-xing-icon"> <path fill="currentColor" d="M162.7 210c-1.8 3.3-25.2 44.4-70.1 123.5-4.9 8.3-10.8 12.5-17.7 12.5H9.8c-7.7 0-12.1-7.5-8.5-14.4l69-121.3c.2 0 .2-.1 0-.3l-43.9-75.6c-4.3-7.8.3-14.1 8.5-14.1H100c7.3 0 13.3 4.1 18 12.2l44.7 77.5zM382.6 46.1l-144 253v.3L330.2 466c3.9 7.1.2 14.1-8.5 14.1h-65.2c-7.6 0-13.6-4-18-12.2l-92.4-168.5c3.3-5.8 51.5-90.8 144.8-255.2 4.6-8.1 10.4-12.2 17.5-12.2h65.7c8 0 12.3 6.7 8.5 14.1z"></path> </symbol> <symbol aria-hidden="true" data-prefix="fas" data-icon="whatsapp" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512" id="has-whatsapp-icon"> <path fill="currentColor" d="M380.9 97.1C339 55.1 283.2 32 223.9 32c-122.4 0-222 99.6-222 222 0 39.1 10.2 77.3 29.6 111L0 480l117.7-30.9c32.4 17.7 68.9 27 106.1 27h.1c122.3 0 224.1-99.6 224.1-222 0-59.3-25.2-115-67.1-157zm-157 341.6c-33.2 0-65.7-8.9-94-25.7l-6.7-4-69.8 18.3L72 359.2l-4.4-7c-18.5-29.4-28.2-63.3-28.2-98.2 0-101.7 82.8-184.5 184.6-184.5 49.3 0 95.6 19.2 130.4 54.1 34.8 34.9 56.2 81.2 56.1 130.5 0 101.8-84.9 184.6-186.6 184.6zm101.2-138.2c-5.5-2.8-32.8-16.2-37.9-18-5.1-1.9-8.8-2.8-12.5 2.8-3.7 5.6-14.3 18-17.6 21.8-3.2 3.7-6.5 4.2-12 1.4-32.6-16.3-54-29.1-75.5-66-5.7-9.8 5.7-9.1 16.3-30.3 1.8-3.7.9-6.9-.5-9.7-1.4-2.8-12.5-30.1-17.1-41.2-4.5-10.8-9.1-9.3-12.5-9.5-3.2-.2-6.9-.2-10.6-.2-3.7 0-9.7 1.4-14.8 6.9-5.1 5.6-19.4 19-19.4 46.3 0 27.3 19.9 53.7 22.6 57.4 2.8 3.7 39.1 59.7 94.8 83.8 35.2 15.2 49 16.5 66.6 13.9 10.7-1.6 32.8-13.4 37.4-26.4 4.6-13 4.6-24.1 3.2-26.4-1.3-2.5-5-3.9-10.5-6.6z"></path> </symbol> <symbol aria-hidden="true" data-prefix="fas" data-icon="copy" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512" id="has-copy-icon"> <path fill="currentColor" d="M320 448v40c0 13.255-10.745 24-24 24H24c-13.255 0-24-10.745-24-24V120c0-13.255 10.745-24 24-24h72v296c0 30.879 25.121 56 56 56h168zm0-344V0H152c-13.255 0-24 10.745-24 24v368c0 13.255 10.745 24 24 24h272c13.255 0 24-10.745 24-24V128H344c-13.2 0-24-10.8-24-24zm120.971-31.029L375.029 7.029A24 24 0 0 0 358.059 0H352v96h96v-6.059a24 24 0 0 0-7.029-16.97z"></path> </symbol> <symbol aria-hidden="true" data-prefix="fas" data-icon="share" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512" id="has-share-icon"> <path fill="currentColor" d="M352 320c-22.608 0-43.387 7.819-59.79 20.895l-102.486-64.054a96.551 96.551 0 0 0 0-41.683l102.486-64.054C308.613 184.181 329.392 192 352 192c53.019 0 96-42.981 96-96S405.019 0 352 0s-96 42.981-96 96c0 7.158.79 14.13 2.276 20.841L155.79 180.895C139.387 167.819 118.608 160 96 160c-53.019 0-96 42.981-96 96s42.981 96 96 96c22.608 0 43.387-7.819 59.79-20.895l102.486 64.054A96.301 96.301 0 0 0 256 416c0 53.019 42.981 96 96 96s96-42.981 96-96-42.981-96-96-96z"></path> </symbol> <symbol aria-hidden="true" data-prefix="fab" data-icon="reddit" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" id="has-reddit-icon">
111 <path fill="currentColor" d="M440.3 203.5c-15 0-28.2 6.2-37.9 15.9-35.7-24.7-83.8-40.6-137.1-42.3L293 52.3l88.2 19.8c0 21.6 17.6 39.2 39.2 39.2 22 0 39.7-18.1 39.7-39.7s-17.6-39.7-39.7-39.7c-15.4 0-28.7 9.3-35.3 22l-97.4-21.6c-4.9-1.3-9.7 2.2-11 7.1L246.3 177c-52.9 2.2-100.5 18.1-136.3 42.8-9.7-10.1-23.4-16.3-38.4-16.3-55.6 0-73.8 74.6-22.9 100.1-1.8 7.9-2.6 16.3-2.6 24.7 0 83.8 94.4 151.7 210.3 151.7 116.4 0 210.8-67.9 210.8-151.7 0-8.4-.9-17.2-3.1-25.1 49.9-25.6 31.5-99.7-23.8-99.7zM129.4 308.9c0-22 17.6-39.7 39.7-39.7 21.6 0 39.2 17.6 39.2 39.7 0 21.6-17.6 39.2-39.2 39.2-22 .1-39.7-17.6-39.7-39.2zm214.3 93.5c-36.4 36.4-139.1 36.4-175.5 0-4-3.5-4-9.7 0-13.7 3.5-3.5 9.7-3.5 13.2 0 27.8 28.5 120 29 149 0 3.5-3.5 9.7-3.5 13.2 0 4.1 4 4.1 10.2.1 13.7zm-.8-54.2c-21.6 0-39.2-17.6-39.2-39.2 0-22 17.6-39.7 39.2-39.7 22 0 39.7 17.6 39.7 39.7-.1 21.5-17.7 39.2-39.7 39.2z"></path> </symbol> <symbol aria-hidden="true" data-prefix="fab" data-icon="telegram" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512" id="has-telegram-icon"> <path fill="currentColor" d="M446.7 98.6l-67.6 318.8c-5.1 22.5-18.4 28.1-37.3 17.5l-103-75.9-49.7 47.8c-5.5 5.5-10.1 10.1-20.7 10.1l7.4-104.9 190.9-172.5c8.3-7.4-1.8-11.5-12.9-4.1L117.8 284 16.2 252.2c-22.1-6.9-22.5-22.1 4.6-32.7L418.2 66.4c18.4-6.9 34.5 4.1 28.5 32.2z"></path> </symbol> <symbol aria-hidden="true" data-prefix="fab" data-icon="signal" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 256 256" id="has-signal-icon"> <g> <path d="M97.2800192,3.739673 L100.160021,15.3787704 C88.8306631,18.1647705 77.9879854,22.6484879 68.0000023,28.6777391 L61.8399988,18.3985363 C72.8467373,11.7537029 84.7951803,6.81153332 97.2800192,3.739673 Z M158.720055,3.739673 L155.840053,15.3787704 C167.169411,18.1647705 178.012089,22.6484879 188.000072,28.6777391 L194.200075,18.3985363 C183.180932,11.7499974 171.218739,6.80771878 158.720055,3.739673 L158.720055,3.739673 Z M18.3999736,61.8351679 C11.7546212,72.8410466 6.81206547,84.7885562 3.73996516,97.2724198 L15.3799719,100.152197 C18.1661896,88.8237238 22.6502573,77.981893 28.6799796,67.9946902 L18.3999736,61.8351679 Z M11.9999699,127.990038 C11.9961044,122.172725 12.4306685,116.363392 13.2999707,110.611385 L1.43996383,108.811525 C-0.479938607,121.525138 -0.479938607,134.454937 1.43996383,147.168551 L13.2999707,145.36869 C12.4306685,139.616684 11.9961044,133.807351 11.9999699,127.990038 L11.9999699,127.990038 Z M194.160075,237.581539 L188.000072,227.302336 C178.024494,233.327885 167.195565,237.811494 155.880053,240.601305 L158.760055,252.240403 C171.231048,249.164732 183.165742,244.222671 194.160075,237.581539 L194.160075,237.581539 Z M244.000104,127.990038 C244.00397,133.807351 243.569406,139.616684 242.700103,145.36869 L254.56011,147.168551 C256.480013,134.454937 256.480013,121.525138 254.56011,108.811525 L242.700103,110.611385 C243.569406,116.363392 244.00397,122.172725 244.000104,127.990038 Z M252.260109,158.707656 L240.620102,155.827879 C237.833884,167.156352 233.349817,177.998183 227.320094,187.985385 L237.6001,194.184905 C244.249159,183.166622 249.191823,171.205364 252.260109,158.707656 L252.260109,158.707656 Z M145.380047,242.701142 C133.858209,244.43447 122.141865,244.43447 110.620027,242.701142 L108.820026,254.560223 C121.534632,256.479975 134.465442,256.479975 147.180048,254.560223 L145.380047,242.701142 Z M221.380091,196.804701 C214.461479,206.174141 206.175877,214.452354 196.800077,221.362797 L203.920081,231.022048 C214.262958,223.418011 223.404944,214.303705 231.040097,203.984145 L221.380091,196.804701 Z M196.800077,34.6172785 C206.177345,41.5338058 214.463023,49.8188367 221.380091,59.1953726 L231.040097,51.9959309 C223.429284,41.6822474 214.31457,32.5682452 204.000081,24.9580276 L196.800077,34.6172785 Z M34.619983,59.1953726 C41.5370506,49.8188367 49.8227288,41.5338058 59.1999972,34.6172785 L51.9999931,24.9580276 C41.6855038,32.5682452 32.5707896,41.6822474 24.9599774,51.9959309 L34.619983,59.1953726 Z M237.6001,61.8351679 L227.320094,67.9946902 C233.346114,77.969489 237.830073,88.7975718 240.620102,100.1122 L252.260109,97.2324229 C249.184198,84.7624043 244.241751,72.8286423 237.6001,61.8351679 L237.6001,61.8351679 Z M110.620027,13.2989317 C122.141865,11.5656035 133.858209,11.5656035 145.380047,13.2989317 L147.180048,1.43985134 C134.465442,-0.479901112 121.534632,-0.479901112 108.820026,1.43985134 L110.620027,13.2989317 Z M4
1110.7799866,234.201801 L15.9999722,239.981353 L21.7799756,215.203275 L10.0999688,212.463487 L4.3199655,237.241566 C3.3734444,241.28318 4.58320332,245.526897 7.51859925,248.462064 C10.4539952,251.39723 14.6980441,252.606895 18.7399738,251.660448 L43.4999881,245.980888 L40.7799866,234.201801 Z M12.5999703,201.764317 L24.279977,204.484106 L28.2799793,187.305438 C22.4496684,177.507146 18.1025197,166.899584 15.3799719,155.827879 L3.73996516,158.707656 C6.34937618,169.311891 10.3154147,179.535405 15.539972,189.125297 L12.5999703,201.764317 Z M68.6000027,227.762301 L51.4199927,231.761991 L54.1399943,243.441085 L66.7800016,240.501313 C76.3706428,245.725462 86.5949557,249.691191 97.2000192,252.300398 L100.080021,240.6613 C89.0307035,237.906432 78.4495684,233.532789 68.6800027,227.682307 L68.6000027,227.762301 Z M128.000037,23.9980665 C90.1565244,24.0177003 55.3105242,44.590631 37.01511,77.715217 C18.7196958,110.839803 19.8628631,151.287212 39.9999861,183.325747 L29.9999803,225.982439 L72.660005,215.983214 C110.077932,239.548522 158.307237,236.876754 192.892851,209.322653 C227.478464,181.768552 240.856271,135.358391 226.242944,93.6248278 C211.629616,51.8912646 172.221191,23.9617202 128.000037,23.9980665 Z" fill="currentColor"></path> </g> </symbol> <symbol aria-hidden="true" data-prefix="ok" data-icon="logo" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" id="has-ok-icon"> <g> <path fill="currentColor" d="M357.1,324.5c-24.1,15.3-57.2,21.4-79.1,23.6l18.4,18.1l67,67c24.5,25.1-15.4,64.4-40.2,40.2c-16.8-17-41.4-41.6-67-67.3
112 l-67,67.2c-24.8,24.2-64.7-15.5-39.9-40.2c17-17,41.4-41.6,67-67l18.1-18.1c-21.6-2.3-55.3-8-79.6-23.6
113 c-28.6-18.5-41.2-29.3-30.1-51.8c6.5-12.8,24.3-23.6,48-5c0,0,31.9,25.4,83.4,25.4s83.4-25.4,83.4-25.4c23.6-18.5,41.4-7.8,48,5
114 C398.3,295.1,385.7,305.9,357.1,324.5L357.1,324.5z M142,145c0-63,51.2-114,114-114s114,51,114,114c0,62.7-51.2,113.7-114,113.7
115 S142,207.7,142,145L142,145z M200,145c0,30.8,25.1,56,56,56s56-25.1,56-56c0-31.1-25.1-56.2-56-56.2S200,113.9,200,145z"/> </g> </symbol> <symbol aria-hidden="true" data-prefix="vk" data-icon="logo" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 700 700" id="has-vk-icon"> <g
116 style="fill:none;fill-rule:evenodd"
117 transform="translate(0,664)"
118 > <path fill="currentColor" d="m 1073.3513,-606.40537 h 196.278 c 179.2103,0 221.8795,42.66915 221.8795,221.8795 v 196.27799 c 0,179.2103512 -42.6692,221.879451 -221.8795,221.879451 h -196.278 c -179.21038,0 -221.87951,-42.6691298 -221.87951,-221.879451 v -196.27801 c 0,-179.21035 42.66913,-221.87946 221.87951,-221.87948 z" /> <path fill="currentColor" d="m 1375.0576,-393.98425 c 2.9513,-9.7072 0,-16.85429 -14.1342,-16.85429 h -46.6693 c -11.8763,0 -17.3521,6.16927 -20.3212,12.97854 0,0 -23.7347,56.82106 -57.3544,93.74763 -10.8806,10.66728 -15.8232,14.08081 -21.7613,14.08081 -2.969,0 -7.2715,-3.39577 -7.2715,-13.12075 v -90.83194 c 0,-11.66288 -3.4491,-16.85429 -13.3341,-16.85429 h -73.3553 c -7.4138,0 -11.8763,5.40476 -11.8763,10.54286 0,11.0406 16.8188,13.60078 18.5433,44.67814 v 67.52388 c 0,14.80973 -2.7202,17.49433 -8.6583,17.49433 -15.8231,0 -54.3143,-57.08773 -77.16,-122.40705 -4.4447,-12.71185 -8.9427,-17.83214 -20.8723,-17.83214 h -46.68718 c -13.3341,0 -16.0009,6.16925 -16.0009,12.97852 0,12.12515 15.8232,72.35973 73.69318,152.02656 38.58,54.40315 92.8942,83.89819 142.3726,83.89819 29.6729,0 33.3353,-6.54262 33.3353,-17.83216 v -41.12238 c 0,-13.10297 2.809,-15.71646 12.214,-15.71646 6.9338,0 18.7922,3.41353 46.4916,29.63728 31.6463,31.09512 36.8555,45.03372 54.6698,45.03372 h 46.6694 c 13.3341,0 20.0189,-6.54262 16.1787,-19.46781 -4.2313,-12.88962 -19.3433,-31.57515 -39.38,-53.74532 -10.8807,-12.62294 -27.2016,-26.22375 -32.1441,-33.03302 -6.9338,-8.72941 -4.9603,-12.62294 0,-20.39227 0,0 56.8566,-78.68897 62.7947,-105.41058 z" /> <path fill="currentColor" d="m 567.69877,-429.06912 c 3.15618,-10.38133 0,-18.0247 -15.11579,-18.0247 h -49.91013 c -12.70096,0 -18.55706,6.59763 -21.73232,13.87977 0,0 -25.38286,60.76685 -61.33724,100.25768 -11.63627,11.40806 -16.92197,15.05863 -23.27242,15.05863 -3.17519,0 -7.77644,-3.63156 -7.77644,-14.0319 v -97.13948 c 0,-12.47278 -3.68869,-18.0247 -14.26014,-18.0247 h -78.44923 c -7.92857,0 
118-12.70097,5.78005 -12.70097,11.27491 0,11.80736 17.98666,14.54527 19.83094,47.78071 v 72.21293 c 0,15.83815 -2.9091,18.70918 -9.25948,18.70918 -16.92197,0 -58.08598,-61.05206 -82.51817,-130.90731 -4.75337,-13.59458 -9.56381,-19.07042 -22.32175,-19.07042 h -49.92915 c -14.26014,0 -17.11213,6.59763 -17.11213,13.87977 0,12.96714 16.92197,77.38454 78.81059,162.58363 41.25909,58.18101 99.34506,89.72424 152.25931,89.72424 31.73343,0 35.65018,-6.99691 35.65018,-19.07043 v -43.978 c 0,-14.01288 3.00405,-16.80786 13.0622,-16.80786 7.41521,0 20.09716,3.65057 49.71998,31.69536 33.84387,33.25443 39.41486,48.16093 58.46622,48.16093 h 49.91026 c 14.26,0 21.40913,-6.99691 17.30216,-20.81966 -4.5252,-13.78473 -20.68653,-33.76783 -42.11468,-57.47752 -11.63621,-13.49953 -29.09043,-28.04479 -34.37631,-35.32694 -7.41508,-9.33557 -5.30458,-13.4995 0,-21.80835 0,0 60.80491,-84.15334 67.15549,-112.73048 z" /> </g> </symbol> </svg><link rel='stylesheet' id='fontawesome5-css'  href='https://use.fontawesome.com/releases/v5.5.0/css/all.css' type='text/css' media='all' /> 
118<script type='text/javascript' src='https://eloquentarduino.github.io/wp-includes/js/dist/vendor/wp-polyfill.min.js?ver=7.4.4'></script>
118 
118<script type='text/javascript'>( 'fetch' in window ) || document.write( '
118<script src="https://eloquentarduino.github.io/wp-includes/js/dist/vendor/wp-polyfill-fetch.min.js?ver=3.0.0"></scr' + 'ipt>' );( document.contains ) || document.write( '
118<script src="https://eloquentarduino.github.io/wp-includes/js/dist/vendor/wp-polyfill-node-contains.min.js?ver=3.26.0-0"></scr' + 'ipt>' );( window.FormData && window.FormData.prototype.keys ) || document.write( '
118<script src="https://eloquentarduino.github.io/wp-includes/js/dist/vendor/wp-polyfill-formdata.min.js?ver=3.0.12"></scr' + 'ipt>' );( Element.prototype.matches && Element.prototype.closest ) || document.write( '
118<script src="https://eloquentarduino.github.io/wp-includes/js/dist/vendor/wp-polyfill-element-closest.min.js?ver=2.0.2"></scr' + 'ipt>' );</script>
118 
118<script type='text/javascript' src='https://eloquentarduino.github.io/wp-includes/js/dist/i18n.min.js?ver=3.6.1'></script>
118 
118<script type='text/javascript'>var highlight_and_share = {"show_facebook":"1","show_twitter":"1","show_linkedin":"1","show_ok":"","show_vk":"","show_email":"","show_xing":"","show_copy":"","show_whatsapp":"","twitter_username":"EloquentArduino","mobile":"","content":".has-content-area","tweet_text":"Tweet","facebook_text":"Share","linkedin_text":"LinkedIn","ok_text":"Odnoklassniki","vk_text":"VKontakte","whatsapp_text":"WhatsApp","xing_text":"Xing","copy_text":"Copy","email_text":"E-mail","icons":"1","facebook_app_id":"2530754057166153","email_your_name_value":"","email_from_value":"","nonce":"e3213bac11","ajax_url":"http:\/\/eloquentarduino.github.io\/wp-admin\/admin-ajax.php","email_share":"Share This Post Via Email","email_subject":"Your Subject","email_your_name":"Your Name","email_send_email":"Send to Email Address","email_subject_text":"[Shared Post] %title%","email_from":"Your Email Address","email_send":"Send Email","email_cancel":"Cancel","email_close":"Close","email_loading":"http:\/\/eloquentarduino.github.io\/wp-content\/plugins\/highlight-and-share\/img\/loading.gif","email_subject_error":"You must fill in a subject.","email_email_to":"Send to Email Address is blank.","email_email_from":"Your email address is blank.","email_email_name":"Your name is blank.","email_sending":"Sending...","customizer_preview":"","prefix":"","suffix":""};</script>
118 
118<script type='text/javascript'>( function( domain, translations ) {
119	var localeData = translations.locale_data[ domain ] || translations.locale_data.messages;
120	localeData[""].domain = domain;
121	wp.i18n.setLocaleData( localeData, domain );
122} )( "highlight-and-share", { "locale_data": { "messages": { "": {} } } } );</script>
122 
122<script defer src="https://eloquentarduino.github.io/wp-content/cache/autoptimize/js/autoptimize_c4959f54af6748cada6376024c80b2c3.js"></script>
122</body></html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.