mirror of
https://github.com/jomjol/AI-on-the-edge-device-docs.git
synced 2025-12-06 19:46:56 +03:00
1090 lines
41 KiB
HTML
1090 lines
41 KiB
HTML
|
||
<!DOCTYPE html>
|
||
|
||
<html class="no-js" lang="en">
|
||
<head>
|
||
<meta charset="utf-8"/>
|
||
<meta content="width=device-width,initial-scale=1" name="viewport"/>
|
||
<link href="https://jomjol.github.io/AI-on-the-edge-device-docs/Installation/" rel="canonical"/>
|
||
<link href=".." rel="prev"/>
|
||
<link href="../initial-setup/" rel="next"/>
|
||
<link href="../img/favicon.ico" rel="icon"/>
|
||
<meta content="mkdocs-1.6.1, mkdocs-material-9.5.40" name="generator"/>
|
||
<title>Installation - AI on the Edge Device</title>
|
||
<link href="../assets/stylesheets/main.8c3ca2c6.min.css" rel="stylesheet"/>
|
||
<link href="../assets/stylesheets/palette.06af60db.min.css" rel="stylesheet"/>
|
||
<link crossorigin="" href="https://fonts.gstatic.com" rel="preconnect"/>
|
||
<link href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback" rel="stylesheet"/>
|
||
<style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
|
||
<script>__md_scope=new URL("..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
|
||
</head>
|
||
<body data-md-color-accent="indigo" data-md-color-primary="blue" data-md-color-scheme="default" dir="ltr">
|
||
<input autocomplete="off" class="md-toggle" data-md-toggle="drawer" id="__drawer" type="checkbox"/>
|
||
<input autocomplete="off" class="md-toggle" data-md-toggle="search" id="__search" type="checkbox"/>
|
||
<label class="md-overlay" for="__drawer"></label>
|
||
<div data-md-component="skip">
|
||
<a class="md-skip" href="#installation">1.
|
||
Skip to content
|
||
</a>
|
||
</div>
|
||
<div data-md-component="announce">
|
||
</div>
|
||
<header class="md-header md-header--shadow" data-md-component="header">
|
||
<nav aria-label="Header" class="md-header__inner md-grid">
|
||
<a aria-label="AI on the Edge Device" class="md-header__button md-logo" data-md-component="logo" href=".." title="AI on the Edge Device">
|
||
<img alt="logo" src="../img/logo.svg"/>
|
||
</a>
|
||
<label class="md-header__button md-icon" for="__drawer">
|
||
<svg viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z"></path></svg>
|
||
</label>
|
||
<div class="md-header__title" data-md-component="header-title">
|
||
<div class="md-header__ellipsis">
|
||
<div class="md-header__topic">
|
||
<span class="md-ellipsis">
|
||
AI on the Edge Device
|
||
</span>
|
||
</div>
|
||
<div class="md-header__topic" data-md-component="header-topic">
|
||
<span class="md-ellipsis">
|
||
|
||
Installation
|
||
|
||
</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<label class="md-header__button md-icon" for="__search">
|
||
<svg viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"></path></svg>
|
||
</label>
|
||
<div class="md-search" data-md-component="search" role="dialog">
|
||
<label class="md-search__overlay" for="__search"></label>
|
||
<div class="md-search__inner" role="search">
|
||
<form class="md-search__form" name="search">
|
||
<input aria-label="Search" autocapitalize="off" autocomplete="off" autocorrect="off" class="md-search__input" data-md-component="search-query" name="query" placeholder="Search" required="" spellcheck="false" type="text"/>
|
||
<label class="md-search__icon md-icon" for="__search">
|
||
<svg viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"></path></svg>
|
||
<svg viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"></path></svg>
|
||
</label>
|
||
<nav aria-label="Search" class="md-search__options">
|
||
<button aria-label="Clear" class="md-search__icon md-icon" tabindex="-1" title="Clear" type="reset">
|
||
<svg viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"></path></svg>
|
||
</button>
|
||
</nav>
|
||
</form>
|
||
<div class="md-search__output">
|
||
<div class="md-search__scrollwrap" data-md-scrollfix="" tabindex="0">
|
||
<div class="md-search-result" data-md-component="search-result">
|
||
<div class="md-search-result__meta">
|
||
Initializing search
|
||
</div>
|
||
<ol class="md-search-result__list" role="presentation"></ol>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="md-header__source">
|
||
<a class="md-source" data-md-component="source" href="https://github.com/jomjol/AI-on-the-edge-device-docs" title="Go to repository">
|
||
<div class="md-source__icon md-icon">
|
||
<svg viewbox="0 0 448 512" xmlns="http://www.w3.org/2000/svg"><!--! Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81"></path></svg>
|
||
</div>
|
||
<div class="md-source__repository">
|
||
GitHub
|
||
</div>
|
||
</a>
|
||
</div>
|
||
</nav>
|
||
</header>
|
||
<div class="md-container" data-md-component="container">
|
||
<main class="md-main" data-md-component="main">
|
||
<div class="md-main__inner md-grid">
|
||
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation">
|
||
<div class="md-sidebar__scrollwrap">
|
||
<div class="md-sidebar__inner">
|
||
<nav aria-label="Navigation" class="md-nav md-nav--primary" data-md-level="0">
|
||
<label class="md-nav__title" for="__drawer">
|
||
<a aria-label="AI on the Edge Device" class="md-nav__button md-logo" data-md-component="logo" href=".." title="AI on the Edge Device">
|
||
<img alt="logo" src="../img/logo.svg"/>
|
||
</a>
|
||
AI on the Edge Device
|
||
</label>
|
||
<div class="md-nav__source">
|
||
<a class="md-source" data-md-component="source" href="https://github.com/jomjol/AI-on-the-edge-device-docs" title="Go to repository">
|
||
<div class="md-source__icon md-icon">
|
||
<svg viewbox="0 0 448 512" xmlns="http://www.w3.org/2000/svg"><!--! Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81"></path></svg>
|
||
</div>
|
||
<div class="md-source__repository">
|
||
GitHub
|
||
</div>
|
||
</a>
|
||
</div>
|
||
<ul class="md-nav__list" data-md-scrollfix="">
|
||
<li class="md-nav__item md-nav__item--active md-nav__item--nested">
|
||
<input checked="" class="md-nav__toggle md-toggle" id="__nav_1" type="checkbox"/>
|
||
<label class="md-nav__link" for="__nav_1" id="__nav_1_label" tabindex="0">
|
||
<span class="md-ellipsis">
|
||
Getting Started
|
||
</span>
|
||
<span class="md-nav__icon md-icon"></span>
|
||
</label>
|
||
<nav aria-expanded="true" aria-labelledby="__nav_1_label" class="md-nav" data-md-level="1">
|
||
<label class="md-nav__title" for="__nav_1">
|
||
<span class="md-nav__icon md-icon"></span>
|
||
Getting Started
|
||
</label>
|
||
<ul class="md-nav__list" data-md-scrollfix="">
|
||
<li class="md-nav__item">
|
||
<a class="md-nav__link" href="..">
|
||
<span class="md-ellipsis">
|
||
Welcome
|
||
</span>
|
||
</a>
|
||
</li>
|
||
<li class="md-nav__item md-nav__item--active">
|
||
<input class="md-nav__toggle md-toggle" id="__toc" type="checkbox"/>
|
||
<label class="md-nav__link md-nav__link--active" for="__toc">
|
||
<span class="md-ellipsis">
|
||
Installation
|
||
</span>
|
||
<span class="md-nav__icon md-icon"></span>
|
||
</label>
|
||
<a class="md-nav__link md-nav__link--active" href="./">
|
||
<span class="md-ellipsis">
|
||
Installation
|
||
</span>
|
||
</a>
|
||
<nav aria-label="Table of contents" class="md-nav md-nav--secondary">
|
||
<label class="md-nav__title" for="__toc">
|
||
<span class="md-nav__icon md-icon"></span>
|
||
Table of contents
|
||
</label>
|
||
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix="">
|
||
<li class="md-nav__item">
|
||
<a class="md-nav__link" href="#1-hardware">1.1
|
||
<span class="md-ellipsis">
|
||
1. Hardware
|
||
</span>
|
||
</a>
|
||
<nav aria-label="1. Hardware" class="md-nav">
|
||
<ul class="md-nav__list">
|
||
<li class="md-nav__item">
|
||
<a class="md-nav__link" href="#esp32-cam">1.1.1
|
||
<span class="md-ellipsis">
|
||
ESP32-CAM
|
||
</span>
|
||
</a>
|
||
</li>
|
||
<li class="md-nav__item">
|
||
<a class="md-nav__link" href="#usb-uart-interface">1.1.2
|
||
<span class="md-ellipsis">
|
||
USB->UART interface
|
||
</span>
|
||
</a>
|
||
</li>
|
||
<li class="md-nav__item">
|
||
<a class="md-nav__link" href="#power-supply">1.1.3
|
||
<span class="md-ellipsis">
|
||
Power supply
|
||
</span>
|
||
</a>
|
||
</li>
|
||
<li class="md-nav__item">
|
||
<a class="md-nav__link" href="#housing">1.1.4
|
||
<span class="md-ellipsis">
|
||
Housing
|
||
</span>
|
||
</a>
|
||
</li>
|
||
<li class="md-nav__item">
|
||
<a class="md-nav__link" href="#wiring">1.1.5
|
||
<span class="md-ellipsis">
|
||
Wiring
|
||
</span>
|
||
</a>
|
||
</li>
|
||
</ul>
|
||
</nav>
|
||
</li>
|
||
<li class="md-nav__item">
|
||
<a class="md-nav__link" href="#2-firmware">1.2
|
||
<span class="md-ellipsis">
|
||
2. Firmware
|
||
</span>
|
||
</a>
|
||
<nav aria-label="2. Firmware" class="md-nav">
|
||
<ul class="md-nav__list">
|
||
<li class="md-nav__item">
|
||
<a class="md-nav__link" href="#web-installer">1.2.1
|
||
<span class="md-ellipsis">
|
||
Web Installer
|
||
</span>
|
||
</a>
|
||
</li>
|
||
<li class="md-nav__item">
|
||
<a class="md-nav__link" href="#manual-flashing">1.2.2
|
||
<span class="md-ellipsis">
|
||
Manual Flashing
|
||
</span>
|
||
</a>
|
||
<nav aria-label="Manual Flashing" class="md-nav">
|
||
<ul class="md-nav__list">
|
||
<li class="md-nav__item">
|
||
<a class="md-nav__link" href="#files">1.2.2.1
|
||
<span class="md-ellipsis">
|
||
Files
|
||
</span>
|
||
</a>
|
||
</li>
|
||
<li class="md-nav__item">
|
||
<a class="md-nav__link" href="#flashing-using-the-flash-tool-from-espressif-gui">1.2.2.2
|
||
<span class="md-ellipsis">
|
||
Flashing using the Flash Tool from Espressif (GUI)
|
||
</span>
|
||
</a>
|
||
</li>
|
||
<li class="md-nav__item">
|
||
<a class="md-nav__link" href="#flashing-using-the-python-based-esptool-console">1.2.2.3
|
||
<span class="md-ellipsis">
|
||
Flashing using the Python based esptool (Console)
|
||
</span>
|
||
</a>
|
||
</li>
|
||
</ul>
|
||
</nav>
|
||
</li>
|
||
</ul>
|
||
</nav>
|
||
</li>
|
||
<li class="md-nav__item">
|
||
<a class="md-nav__link" href="#3-sd-card">1.3
|
||
<span class="md-ellipsis">
|
||
3. SD Card
|
||
</span>
|
||
</a>
|
||
<nav aria-label="3. SD Card" class="md-nav">
|
||
<ul class="md-nav__list">
|
||
<li class="md-nav__item">
|
||
<a class="md-nav__link" href="#notes">1.3.0.1
|
||
<span class="md-ellipsis">
|
||
Notes
|
||
</span>
|
||
</a>
|
||
</li>
|
||
<li class="md-nav__item">
|
||
<a class="md-nav__link" href="#manual-setup-with-an-sd-card-reader-on-a-pc">1.3.1
|
||
<span class="md-ellipsis">
|
||
Manual Setup with an SD Card Reader on a PC
|
||
</span>
|
||
</a>
|
||
</li>
|
||
<li class="md-nav__item">
|
||
<a class="md-nav__link" href="#remote-setup-using-the-built-in-access-point">1.3.2
|
||
<span class="md-ellipsis">
|
||
Remote Setup using the built-in Access Point
|
||
</span>
|
||
</a>
|
||
</li>
|
||
</ul>
|
||
</nav>
|
||
</li>
|
||
<li class="md-nav__item">
|
||
<a class="md-nav__link" href="#4-initial-startup">1.4
|
||
<span class="md-ellipsis">
|
||
4. Initial Startup
|
||
</span>
|
||
</a>
|
||
</li>
|
||
</ul>
|
||
</nav>
|
||
</li>
|
||
<li class="md-nav__item">
|
||
<a class="md-nav__link" href="../initial-setup/">
|
||
<span class="md-ellipsis">
|
||
Initial Setup
|
||
</span>
|
||
</a>
|
||
</li>
|
||
<li class="md-nav__item">
|
||
<a class="md-nav__link" href="../Hardware-Compatibility/">
|
||
<span class="md-ellipsis">
|
||
Hardware Compatibility
|
||
</span>
|
||
</a>
|
||
</li>
|
||
<li class="md-nav__item">
|
||
<a class="md-nav__link" href="../Best-Practice/">
|
||
<span class="md-ellipsis">
|
||
Best Practice
|
||
</span>
|
||
</a>
|
||
</li>
|
||
<li class="md-nav__item">
|
||
<a class="md-nav__link" href="../FAQs/">
|
||
<span class="md-ellipsis">
|
||
Frequently Asked Questions
|
||
</span>
|
||
</a>
|
||
</li>
|
||
</ul>
|
||
</nav>
|
||
</li>
|
||
<li class="md-nav__item md-nav__item--nested">
|
||
<input class="md-nav__toggle md-toggle" id="__nav_2" type="checkbox"/>
|
||
<label class="md-nav__link" for="__nav_2" id="__nav_2_label" tabindex="0">
|
||
<span class="md-ellipsis">
|
||
Configuration
|
||
</span>
|
||
<span class="md-nav__icon md-icon"></span>
|
||
</label>
|
||
<nav aria-expanded="false" aria-labelledby="__nav_2_label" class="md-nav" data-md-level="1">
|
||
<label class="md-nav__title" for="__nav_2">
|
||
<span class="md-nav__icon md-icon"></span>
|
||
Configuration
|
||
</label>
|
||
<ul class="md-nav__list" data-md-scrollfix="">
|
||
<li class="md-nav__item">
|
||
<a class="md-nav__link" href="../Reference-Image/">
|
||
<span class="md-ellipsis">
|
||
Reference Image
|
||
</span>
|
||
</a>
|
||
</li>
|
||
<li class="md-nav__item">
|
||
<a class="md-nav__link" href="../Alignment/">
|
||
<span class="md-ellipsis">
|
||
Alignment References
|
||
</span>
|
||
</a>
|
||
</li>
|
||
<li class="md-nav__item">
|
||
<a class="md-nav__link" href="../ROI-Configuration/">
|
||
<span class="md-ellipsis">
|
||
ROIs (Regions of Interest)
|
||
</span>
|
||
</a>
|
||
</li>
|
||
<li class="md-nav__item">
|
||
<a class="md-nav__link" href="../Configuration/">
|
||
<span class="md-ellipsis">
|
||
Graphical Configuration
|
||
</span>
|
||
</a>
|
||
</li>
|
||
<li class="md-nav__item">
|
||
<a class="md-nav__link" href="../Choosing-the-Model/">
|
||
<span class="md-ellipsis">
|
||
Model Selection
|
||
</span>
|
||
</a>
|
||
</li>
|
||
<li class="md-nav__item">
|
||
<a class="md-nav__link" href="../ota/">
|
||
<span class="md-ellipsis">
|
||
Over-The-Air (OTA) Update
|
||
</span>
|
||
</a>
|
||
</li>
|
||
</ul>
|
||
</nav>
|
||
</li>
|
||
<li class="md-nav__item md-nav__item--nested">
|
||
<input class="md-nav__toggle md-toggle" id="__nav_3" type="checkbox"/>
|
||
<label class="md-nav__link" for="__nav_3" id="__nav_3_label" tabindex="0">
|
||
<span class="md-ellipsis">
|
||
Advanced
|
||
</span>
|
||
<span class="md-nav__icon md-icon"></span>
|
||
</label>
|
||
<nav aria-expanded="false" aria-labelledby="__nav_3_label" class="md-nav" data-md-level="1">
|
||
<label class="md-nav__title" for="__nav_3">
|
||
<span class="md-nav__icon md-icon"></span>
|
||
Advanced
|
||
</label>
|
||
<ul class="md-nav__list" data-md-scrollfix="">
|
||
<li class="md-nav__item">
|
||
<a class="md-nav__link" href="../Parameters/">
|
||
<span class="md-ellipsis">
|
||
Parameters
|
||
</span>
|
||
</a>
|
||
</li>
|
||
<li class="md-nav__item">
|
||
<a class="md-nav__link" href="../Integration-Home-Assistant/">
|
||
<span class="md-ellipsis">
|
||
Integration into Home Assistant
|
||
</span>
|
||
</a>
|
||
</li>
|
||
<li class="md-nav__item">
|
||
<a class="md-nav__link" href="../External-LED/">
|
||
<span class="md-ellipsis">
|
||
External LED
|
||
</span>
|
||
</a>
|
||
</li>
|
||
<li class="md-nav__item">
|
||
<a class="md-nav__link" href="../data-logging/">
|
||
<span class="md-ellipsis">
|
||
Data Logging
|
||
</span>
|
||
</a>
|
||
</li>
|
||
<li class="md-nav__item">
|
||
<a class="md-nav__link" href="../rolling-installation/">
|
||
<span class="md-ellipsis">
|
||
Living on the Edge
|
||
</span>
|
||
</a>
|
||
</li>
|
||
<li class="md-nav__item">
|
||
<a class="md-nav__link" href="../Watermeter-specific-analog---digital-transition/">
|
||
<span class="md-ellipsis">
|
||
Analog/Digital Transition on Water Meters
|
||
</span>
|
||
</a>
|
||
</li>
|
||
<li class="md-nav__item">
|
||
<a class="md-nav__link" href="../collect-new-images/">
|
||
<span class="md-ellipsis">
|
||
Collect images to improve the models
|
||
</span>
|
||
</a>
|
||
</li>
|
||
<li class="md-nav__item">
|
||
<a class="md-nav__link" href="../Learn-models-with-your-own-images/">
|
||
<span class="md-ellipsis">
|
||
Learn a model with your own images
|
||
</span>
|
||
</a>
|
||
</li>
|
||
<li class="md-nav__item">
|
||
<a class="md-nav__link" href="../Correction%20Algorithm/">
|
||
<span class="md-ellipsis">
|
||
Correction Algorithm
|
||
</span>
|
||
</a>
|
||
</li>
|
||
<li class="md-nav__item">
|
||
<a class="md-nav__link" href="../Neural-Network-Types/">
|
||
<span class="md-ellipsis">
|
||
Neural Network Types
|
||
</span>
|
||
</a>
|
||
</li>
|
||
<li class="md-nav__item">
|
||
<a class="md-nav__link" href="../Additional-Information/">
|
||
<span class="md-ellipsis">
|
||
Additional Information
|
||
</span>
|
||
</a>
|
||
</li>
|
||
<li class="md-nav__item">
|
||
<a class="md-nav__link" href="../New-Releases-Notification/">
|
||
<span class="md-ellipsis">
|
||
Notification about new Releases
|
||
</span>
|
||
</a>
|
||
</li>
|
||
<li class="md-nav__item">
|
||
<a class="md-nav__link" href="../prometheus-openmetrics/">
|
||
<span class="md-ellipsis">
|
||
Prometheus/OpenMetrics
|
||
</span>
|
||
</a>
|
||
</li>
|
||
</ul>
|
||
</nav>
|
||
</li>
|
||
<li class="md-nav__item md-nav__item--nested">
|
||
<input class="md-nav__toggle md-toggle" id="__nav_4" type="checkbox"/>
|
||
<label class="md-nav__link" for="__nav_4" id="__nav_4_label" tabindex="0">
|
||
<span class="md-ellipsis">
|
||
Troubleshooting
|
||
</span>
|
||
<span class="md-nav__icon md-icon"></span>
|
||
</label>
|
||
<nav aria-expanded="false" aria-labelledby="__nav_4_label" class="md-nav" data-md-level="1">
|
||
<label class="md-nav__title" for="__nav_4">
|
||
<span class="md-nav__icon md-icon"></span>
|
||
Troubleshooting
|
||
</label>
|
||
<ul class="md-nav__list" data-md-scrollfix="">
|
||
<li class="md-nav__item">
|
||
<a class="md-nav__link" href="../Error-Codes/">
|
||
<span class="md-ellipsis">
|
||
Reduced webinterface (error codes)
|
||
</span>
|
||
</a>
|
||
</li>
|
||
<li class="md-nav__item">
|
||
<a class="md-nav__link" href="../StatusLED-BlinkCodes/">
|
||
<span class="md-ellipsis">
|
||
Board status LED (blink codes)
|
||
</span>
|
||
</a>
|
||
</li>
|
||
<li class="md-nav__item">
|
||
<a class="md-nav__link" href="../WLAN-disconnect-reason/">
|
||
<span class="md-ellipsis">
|
||
WLAN disconnect reasons
|
||
</span>
|
||
</a>
|
||
</li>
|
||
<li class="md-nav__item">
|
||
<a class="md-nav__link" href="../Error-Debugging/">
|
||
<span class="md-ellipsis">
|
||
Often observed issues
|
||
</span>
|
||
</a>
|
||
</li>
|
||
<li class="md-nav__item">
|
||
<a class="md-nav__link" href="../Frequent-Reboots/">
|
||
<span class="md-ellipsis">
|
||
Basic hardware/config issues
|
||
</span>
|
||
</a>
|
||
</li>
|
||
<li class="md-nav__item">
|
||
<a class="md-nav__link" href="../Demo-Mode/">
|
||
<span class="md-ellipsis">
|
||
Demo mode
|
||
</span>
|
||
</a>
|
||
</li>
|
||
</ul>
|
||
</nav>
|
||
</li>
|
||
<li class="md-nav__item md-nav__item--nested">
|
||
<input class="md-nav__toggle md-toggle" id="__nav_5" type="checkbox"/>
|
||
<label class="md-nav__link" for="__nav_5" id="__nav_5_label" tabindex="0">
|
||
<span class="md-ellipsis">
|
||
Quick Links
|
||
</span>
|
||
<span class="md-nav__icon md-icon"></span>
|
||
</label>
|
||
<nav aria-expanded="false" aria-labelledby="__nav_5_label" class="md-nav" data-md-level="1">
|
||
<label class="md-nav__title" for="__nav_5">
|
||
<span class="md-nav__icon md-icon"></span>
|
||
Quick Links
|
||
</label>
|
||
<ul class="md-nav__list" data-md-scrollfix="">
|
||
<li class="md-nav__item">
|
||
<a class="md-nav__link" href="https://github.com/jomjol/AI-on-the-edge-device/releases">
|
||
<span class="md-ellipsis">
|
||
Releases
|
||
</span>
|
||
</a>
|
||
</li>
|
||
<li class="md-nav__item">
|
||
<a class="md-nav__link" href="https://jomjol.github.io/AI-on-the-edge-device/index.html">
|
||
<span class="md-ellipsis">
|
||
Web Installer/Console
|
||
</span>
|
||
</a>
|
||
</li>
|
||
<li class="md-nav__item">
|
||
<a class="md-nav__link" href="https://github.com/jomjol/AI-on-the-edge-device/issues">
|
||
<span class="md-ellipsis">
|
||
Create an Issue
|
||
</span>
|
||
</a>
|
||
</li>
|
||
<li class="md-nav__item">
|
||
<a class="md-nav__link" href="https://github.com/jomjol/AI-on-the-edge-device/discussions">
|
||
<span class="md-ellipsis">
|
||
Join a Discussion
|
||
</span>
|
||
</a>
|
||
</li>
|
||
</ul>
|
||
</nav>
|
||
</li>
|
||
<li class="md-nav__item md-nav__item--nested">
|
||
<input class="md-nav__toggle md-toggle" id="__nav_6" type="checkbox"/>
|
||
<label class="md-nav__link" for="__nav_6" id="__nav_6_label" tabindex="0">
|
||
<span class="md-ellipsis">
|
||
API's
|
||
</span>
|
||
<span class="md-nav__icon md-icon"></span>
|
||
</label>
|
||
<nav aria-expanded="false" aria-labelledby="__nav_6_label" class="md-nav" data-md-level="1">
|
||
<label class="md-nav__title" for="__nav_6">
|
||
<span class="md-nav__icon md-icon"></span>
|
||
API's
|
||
</label>
|
||
<ul class="md-nav__list" data-md-scrollfix="">
|
||
<li class="md-nav__item">
|
||
<a class="md-nav__link" href="../REST-API/">
|
||
<span class="md-ellipsis">
|
||
REST API
|
||
</span>
|
||
</a>
|
||
</li>
|
||
<li class="md-nav__item">
|
||
<a class="md-nav__link" href="../MQTT-API/">
|
||
<span class="md-ellipsis">
|
||
MQTT API
|
||
</span>
|
||
</a>
|
||
</li>
|
||
<li class="md-nav__item">
|
||
<a class="md-nav__link" href="../Influx-DB/">
|
||
<span class="md-ellipsis">
|
||
Influx DB
|
||
</span>
|
||
</a>
|
||
</li>
|
||
<li class="md-nav__item">
|
||
<a class="md-nav__link" href="../Webhook/">
|
||
<span class="md-ellipsis">
|
||
Webhook
|
||
</span>
|
||
</a>
|
||
</li>
|
||
</ul>
|
||
</nav>
|
||
</li>
|
||
<li class="md-nav__item md-nav__item--nested">
|
||
<input class="md-nav__toggle md-toggle" id="__nav_7" type="checkbox"/>
|
||
<label class="md-nav__link" for="__nav_7" id="__nav_7_label" tabindex="0">
|
||
<span class="md-ellipsis">
|
||
Development
|
||
</span>
|
||
<span class="md-nav__icon md-icon"></span>
|
||
</label>
|
||
<nav aria-expanded="false" aria-labelledby="__nav_7_label" class="md-nav" data-md-level="1">
|
||
<label class="md-nav__title" for="__nav_7">
|
||
<span class="md-nav__icon md-icon"></span>
|
||
Development
|
||
</label>
|
||
<ul class="md-nav__list" data-md-scrollfix="">
|
||
<li class="md-nav__item">
|
||
<a class="md-nav__link" href="../Build-Instructions/">
|
||
<span class="md-ellipsis">
|
||
Build the Project
|
||
</span>
|
||
</a>
|
||
</li>
|
||
<li class="md-nav__item">
|
||
<a class="md-nav__link" href="../Upload-files-by-script/">
|
||
<span class="md-ellipsis">
|
||
Scripted File Upload
|
||
</span>
|
||
</a>
|
||
</li>
|
||
<li class="md-nav__item">
|
||
<a class="md-nav__link" href="../Testing/">
|
||
<span class="md-ellipsis">
|
||
Testing Option for VSCode
|
||
</span>
|
||
</a>
|
||
</li>
|
||
<li class="md-nav__item">
|
||
<a class="md-nav__link" href="../Release-creation/">
|
||
<span class="md-ellipsis">
|
||
Release Procedure
|
||
</span>
|
||
</a>
|
||
</li>
|
||
</ul>
|
||
</nav>
|
||
</li>
|
||
<li class="md-nav__item md-nav__item--nested">
|
||
<input class="md-nav__toggle md-toggle" id="__nav_8" type="checkbox"/>
|
||
<label class="md-nav__link" for="__nav_8" id="__nav_8_label" tabindex="0">
|
||
<span class="md-ellipsis">
|
||
Old Pages (no longer maintained)
|
||
</span>
|
||
<span class="md-nav__icon md-icon"></span>
|
||
</label>
|
||
<nav aria-expanded="false" aria-labelledby="__nav_8_label" class="md-nav" data-md-level="1">
|
||
<label class="md-nav__title" for="__nav_8">
|
||
<span class="md-nav__icon md-icon"></span>
|
||
Old Pages (no longer maintained)
|
||
</label>
|
||
<ul class="md-nav__list" data-md-scrollfix="">
|
||
<li class="md-nav__item">
|
||
<a class="md-nav__link" href="../outdated--Integrated-Functions/">
|
||
<span class="md-ellipsis">
|
||
Integrated Functions
|
||
</span>
|
||
</a>
|
||
</li>
|
||
</ul>
|
||
</nav>
|
||
</li>
|
||
<li class="md-nav__item">
|
||
<a class="md-nav__link" href="..">
|
||
<span class="md-ellipsis">
|
||
Assorted Pages
|
||
</span>
|
||
</a>
|
||
</li>
|
||
</ul>
|
||
</nav>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc">
|
||
<div class="md-sidebar__scrollwrap">
|
||
<div class="md-sidebar__inner">
|
||
<nav aria-label="Table of contents" class="md-nav md-nav--secondary">
|
||
<label class="md-nav__title" for="__toc">
|
||
<span class="md-nav__icon md-icon"></span>
|
||
Table of contents
|
||
</label>
|
||
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix="">
|
||
<li class="md-nav__item">
|
||
<a class="md-nav__link" href="#1-hardware">1.1
|
||
<span class="md-ellipsis">
|
||
1. Hardware
|
||
</span>
|
||
</a>
|
||
<nav aria-label="1. Hardware" class="md-nav">
|
||
<ul class="md-nav__list">
|
||
<li class="md-nav__item">
|
||
<a class="md-nav__link" href="#esp32-cam">1.1.1
|
||
<span class="md-ellipsis">
|
||
ESP32-CAM
|
||
</span>
|
||
</a>
|
||
</li>
|
||
<li class="md-nav__item">
|
||
<a class="md-nav__link" href="#usb-uart-interface">1.1.2
|
||
<span class="md-ellipsis">
|
||
USB->UART interface
|
||
</span>
|
||
</a>
|
||
</li>
|
||
<li class="md-nav__item">
|
||
<a class="md-nav__link" href="#power-supply">1.1.3
|
||
<span class="md-ellipsis">
|
||
Power supply
|
||
</span>
|
||
</a>
|
||
</li>
|
||
<li class="md-nav__item">
|
||
<a class="md-nav__link" href="#housing">1.1.4
|
||
<span class="md-ellipsis">
|
||
Housing
|
||
</span>
|
||
</a>
|
||
</li>
|
||
<li class="md-nav__item">
|
||
<a class="md-nav__link" href="#wiring">1.1.5
|
||
<span class="md-ellipsis">
|
||
Wiring
|
||
</span>
|
||
</a>
|
||
</li>
|
||
</ul>
|
||
</nav>
|
||
</li>
|
||
<li class="md-nav__item">
|
||
<a class="md-nav__link" href="#2-firmware">1.2
|
||
<span class="md-ellipsis">
|
||
2. Firmware
|
||
</span>
|
||
</a>
|
||
<nav aria-label="2. Firmware" class="md-nav">
|
||
<ul class="md-nav__list">
|
||
<li class="md-nav__item">
|
||
<a class="md-nav__link" href="#web-installer">1.2.1
|
||
<span class="md-ellipsis">
|
||
Web Installer
|
||
</span>
|
||
</a>
|
||
</li>
|
||
<li class="md-nav__item">
|
||
<a class="md-nav__link" href="#manual-flashing">1.2.2
|
||
<span class="md-ellipsis">
|
||
Manual Flashing
|
||
</span>
|
||
</a>
|
||
<nav aria-label="Manual Flashing" class="md-nav">
|
||
<ul class="md-nav__list">
|
||
<li class="md-nav__item">
|
||
<a class="md-nav__link" href="#files">1.2.2.1
|
||
<span class="md-ellipsis">
|
||
Files
|
||
</span>
|
||
</a>
|
||
</li>
|
||
<li class="md-nav__item">
|
||
<a class="md-nav__link" href="#flashing-using-the-flash-tool-from-espressif-gui">1.2.2.2
|
||
<span class="md-ellipsis">
|
||
Flashing using the Flash Tool from Espressif (GUI)
|
||
</span>
|
||
</a>
|
||
</li>
|
||
<li class="md-nav__item">
|
||
<a class="md-nav__link" href="#flashing-using-the-python-based-esptool-console">1.2.2.3
|
||
<span class="md-ellipsis">
|
||
Flashing using the Python based esptool (Console)
|
||
</span>
|
||
</a>
|
||
</li>
|
||
</ul>
|
||
</nav>
|
||
</li>
|
||
</ul>
|
||
</nav>
|
||
</li>
|
||
<li class="md-nav__item">
|
||
<a class="md-nav__link" href="#3-sd-card">1.3
|
||
<span class="md-ellipsis">
|
||
3. SD Card
|
||
</span>
|
||
</a>
|
||
<nav aria-label="3. SD Card" class="md-nav">
|
||
<ul class="md-nav__list">
|
||
<li class="md-nav__item">
|
||
<a class="md-nav__link" href="#notes">1.3.0.1
|
||
<span class="md-ellipsis">
|
||
Notes
|
||
</span>
|
||
</a>
|
||
</li>
|
||
<li class="md-nav__item">
|
||
<a class="md-nav__link" href="#manual-setup-with-an-sd-card-reader-on-a-pc">1.3.1
|
||
<span class="md-ellipsis">
|
||
Manual Setup with an SD Card Reader on a PC
|
||
</span>
|
||
</a>
|
||
</li>
|
||
<li class="md-nav__item">
|
||
<a class="md-nav__link" href="#remote-setup-using-the-built-in-access-point">1.3.2
|
||
<span class="md-ellipsis">
|
||
Remote Setup using the built-in Access Point
|
||
</span>
|
||
</a>
|
||
</li>
|
||
</ul>
|
||
</nav>
|
||
</li>
|
||
<li class="md-nav__item">
|
||
<a class="md-nav__link" href="#4-initial-startup">1.4
|
||
<span class="md-ellipsis">
|
||
4. Initial Startup
|
||
</span>
|
||
</a>
|
||
</li>
|
||
</ul>
|
||
</nav>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="md-content" data-md-component="content">
|
||
<article class="md-content__inner md-typeset">
|
||
<h1 id="installation"><span class="enumerate-headings-plugin enumerate-heading-plugin">1.</span> Installation</h1>
|
||
<p>The installation requires multiple steps:</p>
|
||
<ol>
|
||
<li>Get the right hardware and wire it up</li>
|
||
<li>Flash the firmware onto the ESP32</li>
|
||
<li>Write the data to the SD card</li>
|
||
<li>Start it</li>
|
||
</ol>
|
||
<p>For point 2 and 3 we provide multiple ways to do it. Pick the one that looks the easiest for you!</p>
|
||
<h2 id="1-hardware"><span class="enumerate-headings-plugin enumerate-heading-plugin">1.1</span> 1. Hardware</h2>
|
||
<h3 id="esp32-cam"><span class="enumerate-headings-plugin enumerate-heading-plugin">1.1.1</span> ESP32-CAM</h3>
|
||
<ul>
|
||
<li>OV2640 camera module</li>
|
||
<li>Micro SD card slot </li>
|
||
<li>4 or 8 MB PSRAM. </li>
|
||
</ul>
|
||
<p>It can be easily found on the typical internet stores, searching for ESP32-CAM for less than 10 EUR.
|
||
How ever since the hardware is cheap and coming from China, you unluckily could pick a malfunctioning device. See <a href="../Hardware-Compatibility/">Hardware Compatibility</a> for further advice! </p>
|
||
<h3 id="usb-uart-interface"><span class="enumerate-headings-plugin enumerate-heading-plugin">1.1.2</span> USB->UART interface</h3>
|
||
<p>For first time flashing the firmware a USB -> UART connector is needed. Later firmware upgrades than can be flashed via OTA.</p>
|
||
<h3 id="power-supply"><span class="enumerate-headings-plugin enumerate-heading-plugin">1.1.3</span> Power supply</h3>
|
||
<p>For power supply a 5V source is needed. Most easily this can be done via a USB power supply. The power supply should support minimum 500mA. For buffering current peaks some users reported to use a large electrolytic capacitor like a 2200uF between ground and VCC.</p>
|
||
<div class="admonition warning">
|
||
<p class="admonition-title">Warning</p>
|
||
<p>In several internet forums there are problems reported, in case the ESP32-CAM is only supplied with 3.3V.</p>
|
||
</div>
|
||
<h3 id="housing"><span class="enumerate-headings-plugin enumerate-heading-plugin">1.1.4</span> Housing</h3>
|
||
<p>A small 3D-printable example for a very small case can be found in Thingiverse here: <a href="https://www.thingiverse.com/thing:4571627">https://www.thingiverse.com/thing:4571627</a></p>
|
||
<p><img alt="" src="../img/main.jpg" style="width:200px">
|
||
<img alt="" src="../img/size.png" style="width:200px"/></img></p>
|
||
<div class="admonition warning">
|
||
<p class="admonition-title">Warning</p>
|
||
<p>The focus of the OV2640 needs to be adjusted, as it is normally set from ~40cm to infinity. In order to get an image that is big enough, it needs to be changed to about 10cm. Therefore the sealing glue on the objective ring needs to be removed with a scalpel or sharp knife. Afterwards the objective can be rotated clockwise until the image is sharp again.</p>
|
||
</div>
|
||
<p><img alt="" src="../img/focus_adjustment.jpg" style="width:200px"/></p>
|
||
<h3 id="wiring"><span class="enumerate-headings-plugin enumerate-heading-plugin">1.1.5</span> Wiring</h3>
|
||
<p>Beside the 5V power supply, only for the first flashing a connection to the USB-UART connector, including a short cut of GPIO0 to GND for bootloader start.</p>
|
||
<p>A example for wiring can be found here:</p>
|
||
<p><img alt="" src="../img/wiring.png"/></p>
|
||
<p><img alt="" src="../img/progammer_manual.jpg"/></p>
|
||
<p>It is also possible to use external LEDs for the illumination instead of the internal flash LED. This is described <a href="../External-LED/">here</a></p>
|
||
<h2 id="2-firmware"><span class="enumerate-headings-plugin enumerate-heading-plugin">1.2</span> 2. Firmware</h2>
|
||
<h3 id="web-installer"><span class="enumerate-headings-plugin enumerate-heading-plugin">1.2.1</span> Web Installer</h3>
|
||
<p>There is a Web Installer available which will work right out of the web browser Edge and Chrome.
|
||
You can access it with the following link: <a href="https://jomjol.github.io/AI-on-the-edge-device">Web Installer</a></p>
|
||
<p><strong>This is the preferred way for beginners</strong> as it also allows access to the USB Log:</p>
|
||
<p><a href="../img/web-console.png"><img alt="" src="../img/web-console.png"/></a></p>
|
||
<h3 id="manual-flashing"><span class="enumerate-headings-plugin enumerate-heading-plugin">1.2.2</span> Manual Flashing</h3>
|
||
<h4 id="files"><span class="enumerate-headings-plugin enumerate-heading-plugin">1.2.2.1</span> Files</h4>
|
||
<p>Grab the firmware from the</p>
|
||
<ul>
|
||
<li><a href="https://github.com/jomjol/AI-on-the-edge-device/releases">Releases page</a> (Stable, tested versions), or the</li>
|
||
<li><a href="https://github.com/jomjol/AI-on-the-edge-device/actions?query=branch%3Arolling">Automatically build development branch</a> (experimental, untested versions). Please have a look on <a href="../rolling-installation/">Living on the Edge</a> first!</li>
|
||
</ul>
|
||
<p>You need:</p>
|
||
<ul>
|
||
<li>partitions.bin</li>
|
||
<li>bootloader.bin</li>
|
||
<li>firmware.bin</li>
|
||
</ul>
|
||
<h4 id="flashing-using-the-flash-tool-from-espressif-gui"><span class="enumerate-headings-plugin enumerate-heading-plugin">1.2.2.2</span> Flashing using the Flash Tool from Espressif (GUI)</h4>
|
||
<p>Get the <a href="https://www.espressif.com/en/support/download/other-tools">Flash Download Tool</a> from Espressif.</p>
|
||
<p>Download and extract the Flash tool, after starting choose "Developer Mode", then "ESP32-DownloadTool" and you are in the setup of the flashing tool. Connect the ESP32-CAM with the USB-UART connection and identify the COM-Port. </p>
|
||
<div class="admonition warning">
|
||
<p class="admonition-title">Warning</p>
|
||
<p>If you are re-flashing the code again, it is strongly recommended to erase the flash memory before flashing the firmware. Especially if you used OTA in between, which might cause remaining information on the flash, to still boot from an old image in the OTA-area, which is not erased by a normal flash.</p>
|
||
</div>
|
||
<p>Put your ESP32 in bootloader mode and push start, then it will identify the board and you can configure the bin-configuration according to the following table:</p>
|
||
<table>
|
||
<thead>
|
||
<tr>
|
||
<th>Filename</th>
|
||
<th style="text-align: right;">Offset</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<td>bootloader.bin</td>
|
||
<td style="text-align: right;">0x1000</td>
|
||
</tr>
|
||
<tr>
|
||
<td>partitions.bin</td>
|
||
<td style="text-align: right;">0x8000</td>
|
||
</tr>
|
||
<tr>
|
||
<td>firmware.bin</td>
|
||
<td style="text-align: right;">0x10000</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
<p><img alt="" src="../img/Flash_Settings.png"/></p>
|
||
<h4 id="flashing-using-the-python-based-esptool-console"><span class="enumerate-headings-plugin enumerate-heading-plugin">1.2.2.3</span> Flashing using the Python based esptool (Console)</h4>
|
||
<p>For this you need a python environment (e.g. Anaconda in Win10).
|
||
Here you need to install the esptool:</p>
|
||
<p><div class="language-text highlight"><pre><span></span><code><span id="__span-0-1"><a href="#__codelineno-0-1" id="__codelineno-0-1" name="__codelineno-0-1"></a>pip install esptool
|
||
</span></code></pre></div>
|
||
Then connect the ESP32 with the USB-UART connector to the system, put it in boot mode and with the following command you can erase the flash and flash bootloader, partitions and firmware in two steps:</p>
|
||
<p><div class="language-text highlight"><pre><span></span><code><span id="__span-1-1"><a href="#__codelineno-1-1" id="__codelineno-1-1" name="__codelineno-1-1"></a>esptool erase_flash
|
||
</span><span id="__span-1-2"><a href="#__codelineno-1-2" id="__codelineno-1-2" name="__codelineno-1-2"></a>esptool write_flash 0x01000 bootloader.bin 0x08000 partitions.bin 0x10000 firmware.bin
|
||
</span></code></pre></div>
|
||
- Maybe you need to specify the COM-port if it is not detected by default.
|
||
- If the erase command throws the error <code>A fatal error occurred: ESP32 ROM does not support function erase_flash.</code>, your <code>esptool</code> might be too old, see <a href="https://techoverflow.net/2022/02/08/how-to-fix-esp32-a-fatal-error-occurred-esp32-rom-does-not-support-function-erase_flash/">https://techoverflow.net/2022/02/08/how-to-fix-esp32-a-fatal-error-occurred-esp32-rom-does-not-support-function-erase_flash/</a></p>
|
||
<p>With some Python installations this may not work and you’ll receive an error, try <code>python -m pip install esptool</code> or <code>pip3 install esptool</code>.</p>
|
||
<p>Further recommendations can be found on the <a href="https://docs.espressif.com/projects/esptool/en/latest/esp32/installation.html">espressif webpage</a>.</p>
|
||
<h2 id="3-sd-card"><span class="enumerate-headings-plugin enumerate-heading-plugin">1.3</span> 3. SD Card</h2>
|
||
<p>The software expects an SD card prepared with certain directory and file structure in order to work properly.
|
||
SD card most top directory should look like this:</p>
|
||
<p><img alt="" src="../sd-card-content.png"/> </p>
|
||
<p>This initial setup needs only to be done <strong>once</strong> as further updates (Firmware as well as SD card content) are possible with the <a href="../ota/">Over-The-Air Update</a> mechanism.</p>
|
||
<h4 id="notes"><span class="enumerate-headings-plugin enumerate-heading-plugin">1.3.0.1</span> Notes</h4>
|
||
<ul>
|
||
<li>Due to the limited availability of GPIOs (OV2640, Flash-Light, PSRAM & SD card) the communication mode to the SD card is limited to 1-line SD-Mode. It showed up, that this results in problems with very large SD-Cards (64GB, sometimes 32 GB) and some no name low cost SD-cards.</li>
|
||
<li>There must be no partition table on the SD-card (no GPT, but only MBR for the single partition)</li>
|
||
<li>Following setting are necessary for formatting the SD-card: <strong>SINGLE PARTITION, MBR, FAT32 - 32K. NOT exFAT</strong></li>
|
||
<li>Some ESP32 devices share their SD-card and/or camera GPIOs with the pins for TX and RX. If you see errors like “Failed to connect” then your chip is probably not entering the bootloader properly. Remove the respective modules temporarily to free the GPIOs for flashing. You may find more information about troubleshooting on the <a href="https://docs.espressif.com/projects/esptool/en/latest/esp8266/troubleshooting.html">homepage of Espressif</a>.</li>
|
||
</ul>
|
||
<p><strong>The ESP32 indicates problems with the SD card during startup with a fast, endless blinking.</strong>
|
||
<strong>In this case, please try another SD card.</strong> </p>
|
||
<h3 id="manual-setup-with-an-sd-card-reader-on-a-pc"><span class="enumerate-headings-plugin enumerate-heading-plugin">1.3.1</span> Manual Setup with an SD Card Reader on a PC</h3>
|
||
<ol>
|
||
<li>Take the <code>AI-on-the-edge-device__manual-setup__*.zip</code> from the <a href="https://github.com/jomjol/AI-on-the-edge-device/releases">Release</a> page.</li>
|
||
<li>Open it and extract the <code>sd-card.zip</code>.</li>
|
||
<li>Open it and extract all files onto onto your SD card.</li>
|
||
<li>On the SD card, open the <code>wlan.ini</code> file and configure it as needed:<ul>
|
||
<li>Set the corresponding SSID and password</li>
|
||
<li>The other parameters are optional</li>
|
||
</ul>
|
||
</li>
|
||
</ol>
|
||
<p>!!! Note
|
||
The device provides a File Server which can be used to show, edit or delete the files on the SD card. For security reasons, the <code>wlan.ini</code> file is excluded from this and is hidden from external access to protect the password.</p>
|
||
<p>After this, you can insert the SD card into the ESP32 board and start it.</p>
|
||
<h3 id="remote-setup-using-the-built-in-access-point"><span class="enumerate-headings-plugin enumerate-heading-plugin">1.3.2</span> Remote Setup using the built-in Access Point</h3>
|
||
<p>On startup of the ESP32, it checks if the <code>wlan.ini</code> or the <code>config/config.ini</code> are available on the SD card.
|
||
If not, the ESP32 switches to a special mode. In this mode, it provides a Wifi Access Point which can be used to add the missing <code>wlan.ini</code> or the <code>config/config.ini</code> file.</p>
|
||
<ol>
|
||
<li>Take the <code>AI-on-the-edge-device__remote-setup__*.zip</code> from the <a href="https://github.com/jomjol/AI-on-the-edge-device/releases">Release</a> page.</li>
|
||
<li>
|
||
<p>Connect to Access Point of the device. The SSID is "AI-on-the-Edge" and you can access it without any password:</p>
|
||
<p><img alt="" src="../img/access-point.png"/></p>
|
||
<p>The device has the following fixed IP: <a href="http://192.168.4.1">http://192.168.4.1</a>.</p>
|
||
</li>
|
||
<li>
|
||
<p>Upload initial configuration to SD card</p>
|
||
<p><img alt="" src="../img/setup-config.png"/></p>
|
||
<p>Use the <code>select file</code> and <code>upload</code> button to start the upload.
|
||
A warning will show up if you have chosen a possible wrong file (without default configuration).</p>
|
||
</li>
|
||
<li>
|
||
<p>Store WLAN access information.</p>
|
||
<p>After the upload, a new page will be shown:</p>
|
||
<p><img alt="" src="../img/setup-wlan.png"/></p>
|
||
<p>Enter your SSID and password.</p>
|
||
<div class="admonition note">
|
||
<p class="admonition-title">Note</p>
|
||
<p>Only basic settings are supported. If you need advanced configuration (fixed ip, ...), you need to use the manual setup as documented above.</p>
|
||
</div>
|
||
<div class="admonition warning">
|
||
<p class="admonition-title">Warning</p>
|
||
<ul>
|
||
<li>Carefully check your wifi settings. To change them later on, you need to take out the SD card and edit the <code>wlan.ini</code> manually (or delete it and start again).</li>
|
||
<li>The information is transferred without encryption!</li>
|
||
</ul>
|
||
</div>
|
||
<p>Finish the step by pushing <code>Write wlan.ini</code></p>
|
||
</li>
|
||
<li>
|
||
<p>Reboot</p>
|
||
<p>The final step is the reboot:</p>
|
||
<p><img alt="" src="../img/setup-reboot.png"/></p>
|
||
<div class="admonition warning">
|
||
<p class="admonition-title">Warning</p>
|
||
<p>It will take up to 3 minutes. Afterwards you can find your device in the local network. Check your router for the IP. You can find it also in the USB Console output.</p>
|
||
</div>
|
||
</li>
|
||
</ol>
|
||
<h2 id="4-initial-startup"><span class="enumerate-headings-plugin enumerate-heading-plugin">1.4</span> 4. Initial Startup</h2>
|
||
<p>After the firmware is flashed and the SD card is setup properly, you can start it.
|
||
After power on the connection status is indicated by 3x blinking of the red on board LED.</p>
|
||
<p>WLAN-Status indication:</p>
|
||
<ul>
|
||
<li><strong>5 x</strong> fast blinking (< 1 second): connection still pending</li>
|
||
<li><strong>3 x</strong> slow blinking (1 second on/off): WLAN connection established</li>
|
||
</ul>
|
||
<p><strong>Note:</strong> It is normal that at first one or two times a pending connection is indicated.</p>
|
||
</article>
|
||
</div>
|
||
<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
|
||
</div>
|
||
</main>
|
||
<footer class="md-footer">
|
||
<div class="md-footer-meta md-typeset">
|
||
<div class="md-footer-meta__inner md-grid">
|
||
<div class="md-copyright">
|
||
|
||
|
||
Made with
|
||
<a href="https://squidfunk.github.io/mkdocs-material/" rel="noopener" target="_blank">
|
||
Material for MkDocs
|
||
</a>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</footer>
|
||
</div>
|
||
<div class="md-dialog" data-md-component="dialog">
|
||
<div class="md-dialog__inner md-typeset"></div>
|
||
</div>
|
||
<script id="__config" type="application/json">{"base": "..", "features": [], "search": "../assets/javascripts/workers/search.6ce7567c.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}}</script>
|
||
<script src="../assets/javascripts/bundle.525ec568.min.js"></script>
|
||
</body>
|
||
</html> |