gravitymon/docs/hardware.html
2023-02-04 11:01:25 +00:00

380 lines
21 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!doctype html>
<html class="no-js">
<head><meta charset="utf-8"/>
<meta name="viewport" content="width=device-width,initial-scale=1"/>
<meta name="color-scheme" content="light dark"><link rel="index" title="Index" href="genindex.html" /><link rel="search" title="Search" href="search.html" /><link rel="next" title="Create formula" href="formula.html" /><link rel="prev" title="Releases" href="releases.html" />
<meta name="generator" content="sphinx-4.3.2, furo 2022.01.02"/>
<title>Hardware - GravityMon v1.2.0</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?digest=df49af52631e7917044a9c21a57f7b83170a6dd0" />
<link rel="stylesheet" type="text/css" href="_static/copybutton.css" />
<link rel="stylesheet" type="text/css" href="_static/styles/furo-extensions.css?digest=fade93df149f7c5fedb3ff897f799dc7d283b420" />
<style>
body {
--color-code-background: #f8f8f8;
--color-code-foreground: black;
}
body[data-theme="dark"] {
--color-code-background: #202020;
--color-code-foreground: #d0d0d0;
}
@media (prefers-color-scheme: dark) {
body:not([data-theme="light"]) {
--color-code-background: #202020;
--color-code-foreground: #d0d0d0;
}
}
</style></head>
<body>
<script>
document.body.dataset.theme = localStorage.getItem("theme") || "auto";
</script>
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
<symbol id="svg-toc" viewBox="0 0 24 24">
<title>Contents</title>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">
<path stroke="none" d="M0 0h24v24H0z" />
<line x1="4" y1="6" x2="20" y2="6" />
<line x1="10" y1="12" x2="20" y2="12" />
<line x1="6" y1="18" x2="20" y2="18" />
</svg>
</symbol>
<symbol id="svg-menu" viewBox="0 0 24 24">
<title>Menu</title>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-menu">
<line x1="3" y1="12" x2="21" y2="12"></line>
<line x1="3" y1="6" x2="21" y2="6"></line>
<line x1="3" y1="18" x2="21" y2="18"></line>
</svg>
</symbol>
<symbol id="svg-arrow-right" viewBox="0 0 24 24">
<title>Expand</title>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-chevron-right">
<polyline points="9 18 15 12 9 6"></polyline>
</svg>
</symbol>
<symbol id="svg-sun" viewBox="0 0 24 24">
<title>Light mode</title>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="feather-sun">
<circle cx="12" cy="12" r="5"></circle>
<line x1="12" y1="1" x2="12" y2="3"></line>
<line x1="12" y1="21" x2="12" y2="23"></line>
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
<line x1="1" y1="12" x2="3" y2="12"></line>
<line x1="21" y1="12" x2="23" y2="12"></line>
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
</svg>
</symbol>
<symbol id="svg-moon" viewBox="0 0 24 24">
<title>Dark mode</title>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon">
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
<path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" />
</svg>
</symbol>
<symbol id="svg-sun-half" viewBox="0 0 24 24">
<title>Auto light/dark mode</title>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-shadow">
<path stroke="none" d="M0 0h24v24H0z" fill="none"/>
<circle cx="12" cy="12" r="9" />
<path d="M13 12h5" />
<path d="M13 15h4" />
<path d="M13 18h1" />
<path d="M13 9h4" />
<path d="M13 6h1" />
</svg>
</symbol>
</svg>
<input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation">
<input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc">
<label class="overlay sidebar-overlay" for="__navigation">
<div class="visually-hidden">Hide navigation sidebar</div>
</label>
<label class="overlay toc-overlay" for="__toc">
<div class="visually-hidden">Hide table of contents sidebar</div>
</label>
<div class="page">
<header class="mobile-header">
<div class="header-left">
<label class="nav-overlay-icon" for="__navigation">
<div class="visually-hidden">Toggle site navigation sidebar</div>
<i class="icon"><svg><use href="#svg-menu"></use></svg></i>
</label>
</div>
<div class="header-center">
<a href="index.html"><div class="brand">GravityMon v1.2.0</div></a>
</div>
<div class="header-right">
<div class="theme-toggle-container theme-toggle-header">
<button class="theme-toggle">
<div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
<svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
</button>
</div>
<label class="toc-overlay-icon toc-header-icon" for="__toc">
<div class="visually-hidden">Toggle table of contents sidebar</div>
<i class="icon"><svg><use href="#svg-toc"></use></svg></i>
</label>
</div>
</header>
<aside class="sidebar-drawer">
<div class="sidebar-container">
<div class="sidebar-sticky"><a class="sidebar-brand centered" href="index.html">
<div class="sidebar-logo-container">
<img class="sidebar-logo" src="_static/gravitymon_logo.png" alt="Logo"/>
</div>
<span class="sidebar-brand-text">GravityMon v1.2.0</span>
</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
<input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
<input type="hidden" name="check_keywords" value="yes">
<input type="hidden" name="area" value="default">
</form>
<div id="searchbox"></div><div class="sidebar-scroll"><div class="sidebar-tree">
<p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="functionality.html">Functionality</a></li>
<li class="toctree-l1"><a class="reference internal" href="intro.html">Getting started</a></li>
<li class="toctree-l1"><a class="reference internal" href="installation.html">Installation</a></li>
<li class="toctree-l1"><a class="reference internal" href="configuration.html">Configuration</a></li>
<li class="toctree-l1"><a class="reference internal" href="releases.html">Releases</a></li>
<li class="toctree-l1 current current-page"><a class="current reference internal" href="#">Hardware</a></li>
<li class="toctree-l1"><a class="reference internal" href="formula.html">Create formula</a></li>
<li class="toctree-l1"><a class="reference internal" href="services.html">Service Integration</a></li>
<li class="toctree-l1"><a class="reference internal" href="advanced.html">Advanced Configuration</a></li>
<li class="toctree-l1"><a class="reference internal" href="api.html">REST API</a></li>
<li class="toctree-l1"><a class="reference internal" href="data.html">Data Formats</a></li>
<li class="toctree-l1"><a class="reference internal" href="compiling.html">Compiling the software</a></li>
<li class="toctree-l1"><a class="reference internal" href="contributing.html">Contributing</a></li>
<li class="toctree-l1"><a class="reference internal" href="license.html">Licence</a></li>
<li class="toctree-l1"><a class="reference internal" href="troubleshooting.html">Troubleshooting</a></li>
<li class="toctree-l1"><a class="reference internal" href="q_and_a.html">Q &amp; A</a></li>
</ul>
</div>
</div>
</div>
</div>
</aside>
<div class="main">
<div class="content">
<div class="article-container">
<div class="content-icon-container">
<div class="theme-toggle-container theme-toggle-content">
<button class="theme-toggle">
<div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
<svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
</button>
</div>
<label class="toc-overlay-icon toc-content-icon" for="__toc">
<div class="visually-hidden">Toggle table of contents sidebar</div>
<i class="icon"><svg><use href="#svg-toc"></use></svg></i>
</label>
</div>
<article role="main">
<div class="section" id="hardware">
<span id="id1"></span><h1>Hardware<a class="headerlink" href="#hardware" title="Permalink to this headline"></a></h1>
<p>Im not a hardware designer so I would recommend the following resources for more in depth information on this topic.</p>
<ul class="simple">
<li><p><a class="reference external" href="https://github.com/cherryphilip74/iSpindel-PCB">Cherry Philip Hardware design</a></p></li>
<li><p><a class="reference external" href="https://www.opensourcedistilling.com/ispindel">OpenSource Distilling</a></p></li>
</ul>
<div class="section" id="ispindle-based-on-esp8266">
<h2>iSpindle based on esp8266<a class="headerlink" href="#ispindle-based-on-esp8266" title="Permalink to this headline"></a></h2>
<p>There are lots of resouces out there on how to build the hardware for an iSpindle so I will not go into details on that part. I typically use one of the
excellent pcb boards that, for example the iSpindel PCB v4.0 from Cherry Philip. Here is one of my standard builds using an esp8266.</p>
<a class="reference internal image-reference" href="_images/ispindel_esp8266.jpg"><img alt="iSpindle esp8266" src="_images/ispindel_esp8266.jpg" style="width: 500px;"/></a>
<div class="section" id="schema-for-esp8266-build">
<h3>Schema for esp8266 build<a class="headerlink" href="#schema-for-esp8266-build" title="Permalink to this headline"></a></h3>
<a class="reference internal image-reference" href="_images/schema_esp8266.png"><img alt="Schema esp8266" src="_images/schema_esp8266.png" style="width: 700px;"/></a>
</div>
</div>
<div class="section" id="ispindle-based-on-esp32">
<h2>iSpindle based on esp32<a class="headerlink" href="#ispindle-based-on-esp32" title="Permalink to this headline"></a></h2>
<p>Gravitymon supports a number of ESP32 boards that offers bluetooth support.</p>
<a class="reference internal image-reference" href="_images/esp32_hardware.jpg"><img alt="iSpindle esp32 hardware options" src="_images/esp32_hardware.jpg" style="width: 500px;"/></a>
<ul class="simple">
<li><p>esp32d1 mini, this was the first board i tried which is a smaller form factor of the first generetion esp32 with 2 cores. Slow on connecting to wifi is the main downside.</p></li>
<li><p>esp32c3 mini, a newer version based on the latest risc v7 architecture, is seen as the replacement for the esp8266 with bluetooth support. Dont buy v1.0 since that has a faulty wifi antenna.</p></li>
<li><p>esp32s2 mini, similar to the c3 board but without bluetooth support.</p></li>
</ul>
<p>Its possible to use this PCB and mount an ESP32 mini on top of that (c3 or s2 are prefered). The esp32 d1 mini is a larger formfactor and can be hard to fit into the tube.</p>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>You need to add a resistor between A0 (Analog PIN) and ground of 470k. The reason is that the esp8266 has a build in resistor for a voltage divider
which the esp32 does not have. So in order to get a valid voltage (less than 3.2V) on the A0 pin this is needed. Once the modification is done you might
need to adjust the voltage factor so the battery reading is correct.</p>
</div>
<div class="section" id="esp32c3-mini">
<h3>ESP32c3 mini<a class="headerlink" href="#esp32c3-mini" title="Permalink to this headline"></a></h3>
<p>This is model is fully supported by gravitymon.</p>
<a class="reference internal image-reference" href="_images/ispindel_esp32c3.jpg"><img alt="Esp32c3 mini build" src="_images/ispindel_esp32c3.jpg" style="width: 500px;"/></a>
<p>Here is an image of where I added the resistor for the voltage divider.</p>
<a class="reference internal image-reference" href="_images/esp32_res.jpg"><img alt="Esp32c3 adding resistor as voltage dividier." src="_images/esp32_res.jpg" style="width: 500px;"/></a>
</div>
<div class="section" id="esp32s2-mini">
<h3>ESP32s2 mini<a class="headerlink" href="#esp32s2-mini" title="Permalink to this headline"></a></h3>
<p>This is model is fully supported by gravitymon. Same setup as for ESP32C3 mini.</p>
</div>
<div class="section" id="esp32-d1-mini">
<h3>ESP32 d1 mini<a class="headerlink" href="#esp32-d1-mini" title="Permalink to this headline"></a></h3>
<p>I would suggest that you try how it fits into the PET tube before soldering it to the PCB. Make sure that the battery is attached since this will be a really tight fit.</p>
<a class="reference internal image-reference" href="_images/ispindel_esp32.jpg"><img alt="Esp32 mini build" src="_images/ispindel_esp32.jpg" style="width: 500px;"/></a>
</div>
<div class="section" id="schema-for-esp32-build">
<h3>Schema for esp32 build<a class="headerlink" href="#schema-for-esp32-build" title="Permalink to this headline"></a></h3>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>This schema assumes that an ESP32 d1 mini (pin compatible with ESP8266). The ESP32 has two rows of pins but
only the inner row is used. The main difference is the added resistor R3 so we get a voltage divider for measuring battery.
The ESP8266 has a built in resistor thats not visible on the schema and this acts as a voltage divider.</p>
</div>
<a class="reference internal image-reference" href="_images/schema_esp32.png"><img alt="Schema esp32" src="_images/schema_esp32.png" style="width: 700px;"/></a>
</div>
<div class="section" id="adding-a-reed-magnetic-reset-switch">
<h3>Adding a reed (magnetic) reset switch<a class="headerlink" href="#adding-a-reed-magnetic-reset-switch" title="Permalink to this headline"></a></h3>
<p>A reed switch is a switch that reacts to magnetic fields. The ones I have tested are normally open and close in proximity to
a magnet.</p>
<a class="reference internal image-reference" href="_images/reed.jpg"><img alt="Reed switch" src="_images/reed.jpg" style="width: 400px;"/></a>
<p>If this is connected to the reset button a magnet can be used to trigger a reset of the device. The image below shows how
I mounted the iSPINDLE PCB v4.0 just under the cap. The lower red circle shows the reset connection point for the reed switch.</p>
<p>The reed switch is the glass tube visible under the esp8266.</p>
<a class="reference internal image-reference" href="_images/reed_build.jpg"><img alt="Reed build" src="_images/reed_build.jpg" style="width: 400px;"/></a>
</div>
</div>
<div class="section" id="floaty-hydrometer-diy-based-on-esp32-lite">
<h2>Floaty Hydrometer DIY based on esp32 lite<a class="headerlink" href="#floaty-hydrometer-diy-based-on-esp32-lite" title="Permalink to this headline"></a></h2>
<p>Here we have another projects that has build a device similar to the iSpindel but based on an ESP32 instead.</p>
<p>The setup is much simpler and attaches the GYRO to an ESP32 with a build in charger chip. GravityMon works on
this hardware platform as well but there are a few limitations:</p>
<ul class="simple">
<li><p>Temperature is read from the GYRO and cannot be changed. This works fine when measuring gravity but when in configuration mode the temperature will increase since it shows the chip temperature.</p></li>
<li><p>No possibility to measure battery level (can be added with additional hardware).</p></li>
</ul>
</div>
<div class="section" id="hardware-extensions">
<h2>Hardware extensions<a class="headerlink" href="#hardware-extensions" title="Permalink to this headline"></a></h2>
<p>GravityMon has implemented a few additions to the standard iSpindel hardware. Its possible to channel the serial console to the TX/RX pins on the chip (these position also applies to all the
ESP32 chips for iSpindel). You need a USB to TTL converter for this to work. This enables you to read the serial console even when on battery (newer chips dont have a diode to remove).</p>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>You need to compile the software using the -DUSE_SERIAL_PINS option to enable this feature.</p>
</div>
<p>Its also possible to force the device into configuration mode by connecting D7/D8 on the board during the startup sequence. This will enable the feature “gravity mode enabled during float”.</p>
<a class="reference internal image-reference" href="_images/8266_pins.jpg"><img alt="iSpindel pins" src="_images/8266_pins.jpg" style="width: 500px;"/></a>
<p>For the floaty device pins 16/17 are used as TX/RX pins and the 13/15 pins are used to force the device into configuration mode. Pin 35 can also be connected to the battery voltage via an voltage divider to be able to read the battery voltage.</p>
<a class="reference internal image-reference" href="_images/32lite_pins.jpg"><img alt="Floaty pins" src="_images/32lite_pins.jpg" style="width: 500px;"/></a>
</div>
</div>
</article>
</div>
<footer>
<div class="related-pages">
<a class="next-page" href="formula.html">
<div class="page-info">
<div class="context">
<span>Next</span>
</div>
<div class="title">Create formula</div>
</div>
<svg><use href="#svg-arrow-right"></use></svg>
</a>
<a class="prev-page" href="releases.html">
<svg><use href="#svg-arrow-right"></use></svg>
<div class="page-info">
<div class="context">
<span>Previous</span>
</div>
<div class="title">Releases</div>
</div>
</a>
</div>
<div class="related-information">
Copyright &#169; 2021-2023, Magnus Persson |
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> and <a class="muted-link" href="https://pradyunsg.me">@pradyunsg</a>'s
<a href="https://github.com/pradyunsg/furo">Furo theme</a>.
</div>
</footer>
</div>
<aside class="toc-drawer">
<div class="toc-sticky toc-scroll">
<div class="toc-title-container">
<span class="toc-title">
Contents
</span>
</div>
<div class="toc-tree-container">
<div class="toc-tree">
<ul>
<li><a class="reference internal" href="#">Hardware</a><ul>
<li><a class="reference internal" href="#ispindle-based-on-esp8266">iSpindle based on esp8266</a><ul>
<li><a class="reference internal" href="#schema-for-esp8266-build">Schema for esp8266 build</a></li>
</ul>
</li>
<li><a class="reference internal" href="#ispindle-based-on-esp32">iSpindle based on esp32</a><ul>
<li><a class="reference internal" href="#esp32c3-mini">ESP32c3 mini</a></li>
<li><a class="reference internal" href="#esp32s2-mini">ESP32s2 mini</a></li>
<li><a class="reference internal" href="#esp32-d1-mini">ESP32 d1 mini</a></li>
<li><a class="reference internal" href="#schema-for-esp32-build">Schema for esp32 build</a></li>
<li><a class="reference internal" href="#adding-a-reed-magnetic-reset-switch">Adding a reed (magnetic) reset switch</a></li>
</ul>
</li>
<li><a class="reference internal" href="#floaty-hydrometer-diy-based-on-esp32-lite">Floaty Hydrometer DIY based on esp32 lite</a></li>
<li><a class="reference internal" href="#hardware-extensions">Hardware extensions</a></li>
</ul>
</li>
</ul>
</div>
</div>
</div>
</aside>
</div>
</div><script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
<script src="_static/jquery.js"></script>
<script src="_static/underscore.js"></script>
<script src="_static/doctools.js"></script>
<script src="_static/scripts/furo.js"></script>
<script src="_static/clipboard.min.js"></script>
<script src="_static/copybutton.js"></script>
</body>
</html>