Files
ESP-Nodes/ESP-IDF_Robot/tutorial/docs/build/simplepdf/index.html
2025-07-01 02:01:24 -04:00

614 lines
23 KiB
HTML

<!DOCTYPE html>
<html data-content_root="./" lang="en">
<head>
<meta charset="utf-8"/>
<meta content="width=device-width, initial-scale=1.0" name="viewport"/>
<meta content="width=device-width, initial-scale=1" name="viewport"/>
<title>
ByteRider 06-2025 documentation
</title>
<link href="_static/pygments.css?v=d75fae25" rel="stylesheet" type="text/css"/>
<link href="_static/main.css?v=c1e0a6fc" rel="stylesheet" type="text/css"/>
<script src="_static/documentation_options.js?v=84c8e5cb">
</script>
<script src="_static/doctools.js?v=9bcbadda">
</script>
<script src="_static/sphinx_highlight.js?v=dc90522c">
</script>
<link href="genindex.html" rel="index" title="Index"/>
<link href="search.html" rel="search" title="Search"/>
</head>
<body>
<article class="dont-break" id="cover">
<div class="container">
<!-- Logo -->
<div class="logo">
<p>
</p>
</div>
<!-- Cover middle -->
<div class="cover-middle">
<div class="title">
<h1 class="title-cover">
ByteRider
</h1>
<p class="subtitle-cover">
Version
</p>
<span class="meta">
</span>
</div>
<!--
<div class="client-logo">
<img src="../data/logo_.png" alt="Logotipo">
</div>
-->
</div>
<!-- Footer -->
<div class="cover-footer">
<p>
</p>
</div>
</div>
</article>
<div aria-label="Main" class="sphinxsidebar" role="navigation">
<div class="sphinxsidebarwrapper">
<div>
<h3>
<a href="#">
Table of Contents
</a>
</h3>
<ul>
<li class="toctree-l1">
<a class="reference internal" href="#introduction">
INTRODUCTION
</a>
</li>
<li class="toctree-l1">
<a class="reference internal" href="#how-does-it-work">
HOW DOES IT WORK?
</a>
<ul>
<li class="toctree-l2">
<a class="reference internal" href="#reserved-pins-gpios">
Reserved Pins &amp; GPIOs
</a>
</li>
<li class="toctree-l2">
<a class="reference internal" href="#fusion-of-software-hardware">
Fusion of Software &amp; Hardware
</a>
</li>
<li class="toctree-l2">
<a class="reference internal" href="#schematic">
Schematic
</a>
</li>
</ul>
</li>
<li class="toctree-l1">
<a class="reference internal" href="#work-in-progress-walk-through">
WORK-IN-PROGRESS WALK THROUGH
</a>
<ul>
<li class="toctree-l2">
<a class="reference internal" href="#finished-work">
Finished Work
</a>
</li>
<li class="toctree-l2">
<a class="reference internal" href="#chassis">
Chassis
</a>
</li>
<li class="toctree-l2">
<a class="reference internal" href="#wiring">
Wiring
</a>
</li>
<li class="toctree-l2">
<a class="reference internal" href="#motor-wires-harness">
Motor Wires Harness
</a>
</li>
</ul>
</li>
</ul>
</div>
</div>
</div>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<section id="byterider-documentation">
<h1>
ByteRider documentation
<a class="headerlink" href="#byterider-documentation" title="Link to this heading">
&para;
</a>
</h1>
<p>
Add your content using
<code class="docutils literal notranslate">
<span class="pre">
reStructuredText
</span>
</code>
syntax. See the
<a class="reference external" href="https://www.sphinx-doc.org/en/master/usage/restructuredtext/index.html">
reStructuredText
</a>
documentation for details.
</p>
<div class="toctree-wrapper compound">
<span id="document-intro">
</span>
<section id="introduction">
<h2>
INTRODUCTION
<a class="headerlink" href="#introduction" title="Link to this heading">
&para;
</a>
</h2>
</section>
<span id="document-overview">
</span>
<section id="how-does-it-work">
<h2>
HOW DOES IT WORK?
<a class="headerlink" href="#how-does-it-work" title="Link to this heading">
&para;
</a>
</h2>
<p>
The BitByteRider RC car is powered by ESP32-C3 Breadboard &amp; Power adapter developmemt board.
</p>
<section id="reserved-pins-gpios">
<h3>
Reserved Pins &amp; GPIOs
<a class="headerlink" href="#reserved-pins-gpios" title="Link to this heading">
&para;
</a>
</h3>
<p>
The following table summarizes GPIOs and pins reserved for operations purposes.
</p>
<p>
The GPIO numbers correspond to those on the ESP32-C3 WROOM microcontroller. The Pin number corresponds to the pin on the Breadboard and Power adapter development board.
</p>
<section id="x-and-y-axis">
<h4>
x- and y- axis
<a class="headerlink" href="#x-and-y-axis" title="Link to this heading">
&para;
</a>
</h4>
<p>
The
<strong>
GPIO0
</strong>
and
<strong>
GPIO1
</strong>
assigned to measuring the voltage of x- and y- axis of the Joystick. Lastly, there is a group of GPIO pairs responsible for PWM for DC motors.
</p>
</section>
<section id="direction-and-speed">
<h4>
Direction and Speed
<a class="headerlink" href="#direction-and-speed" title="Link to this heading">
&para;
</a>
</h4>
<p>
The two DC motors on the left side are wired to the dedicated PWM channels in pairs. This means that PWM channels can control rotation speed and direction of DC motors in pairs (i.e. left and right side).
Consequently, only four PWM channels are required for controlling the direction of the RC car.
Based on this constraint, the RC car can only move front, back, and rotate left and right. Any other movements are not possible (i.e. diagonal).
</p>
<p>
A pair of PWM channels are required for defining rotation speed and direction of the DC motors on each side.
In particular,
<strong>
GPIO6
</strong>
and
<strong>
GPIO5
</strong>
provide PWM to the left- and right- side DC motors to rotate in a
<strong>
clockwise
</strong>
direction.
Similarly,
<strong>
GPIO4
</strong>
and
<strong>
GPIO7
</strong>
provide PWM to the left- and right- side DC motors to rotate in a
<strong>
counter-clockwise
</strong>
direction.
Changing PWM on each channel determines the speed and direction of the RC car.
</p>
<br/>
<br/>
<br/>
<br/>
<table class="docutils align-default">
<thead>
<tr class="row-odd">
<th class="head">
<p>
GPIO
</p>
</th>
<th class="head">
<p>
Pin
</p>
</th>
<th class="head">
<p>
Function
</p>
</th>
<th class="head">
<p>
Notes
</p>
</th>
</tr>
</thead>
<tbody>
<tr class="row-even">
<td>
<p>
0
</p>
</td>
<td>
<p>
16
</p>
</td>
<td>
<p>
Joystick x-axis
</p>
</td>
<td>
<p>
ADC1_CH0
</p>
</td>
</tr>
<tr class="row-odd">
<td>
<p>
1
</p>
</td>
<td>
<p>
15
</p>
</td>
<td>
<p>
Joystick y-axis
</p>
</td>
<td>
<p>
ADC1_CH1
</p>
</td>
</tr>
<tr class="row-even">
<td>
<p>
8
</p>
</td>
<td>
<p>
5
</p>
</td>
<td>
<p>
Joystick push button
</p>
</td>
<td>
</td>
</tr>
<tr class="row-odd">
<td>
<p>
6
</p>
</td>
<td>
<p>
4
</p>
</td>
<td>
<p>
PWM for clockwise rotation of left-side motors
</p>
</td>
<td>
<p>
LEDC_CHANNEL_1
</p>
</td>
</tr>
<tr class="row-even">
<td>
<p>
5
</p>
</td>
<td>
<p>
3
</p>
</td>
<td>
<p>
PWM for clockwise rotation of right-side motors
</p>
</td>
<td>
<p>
LEDC_CHANNEL_0
</p>
</td>
</tr>
<tr class="row-odd">
<td>
<p>
4
</p>
</td>
<td>
<p>
2
</p>
</td>
<td>
<p>
PWM for counter-clockwise rotation of right-side motors
</p>
</td>
<td>
<p>
LEDC_CHANNEL_2
</p>
</td>
</tr>
<tr class="row-even">
<td>
<p>
7
</p>
</td>
<td>
<p>
6
</p>
</td>
<td>
<p>
PWM for counter-clockwise rotation of left-side motors
</p>
</td>
<td>
<p>
LEDC_CHANNEL_3
</p>
</td>
</tr>
</tbody>
</table>
</section>
</section>
<section id="fusion-of-software-hardware">
<h3>
Fusion of Software &amp; Hardware
<a class="headerlink" href="#fusion-of-software-hardware" title="Link to this heading">
&para;
</a>
</h3>
<p>
The
<em>
struct
</em>
for storing motors PWM values.
</p>
<div class="highlight-c notranslate">
<div class="highlight">
<pre><span></span><span class="k">struct</span><span class="w"> </span><span class="nc">motors_rpm</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">motor1_rpm_pwm</span><span class="p">;</span>
<span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">motor2_rpm_pwm</span><span class="p">;</span>
<span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">motor3_rpm_pwm</span><span class="p">;</span>
<span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">motor4_rpm_pwm</span><span class="p">;</span>
<span class="p">};</span>
</pre>
</div>
</div>
<p>
The function for updating motors&rsquo; PWM values.
</p>
<div class="highlight-c notranslate">
<div class="highlight">
<pre><span></span><span class="c1">// Function to send data to the receiver</span>
<span class="kt">void</span><span class="w"> </span><span class="nf">sendData</span><span class="w"> </span><span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">sensors_data_t</span><span class="w"> </span><span class="n">buffer</span><span class="p">;</span><span class="w"> </span><span class="c1">// Declare data struct</span>
<span class="w"> </span><span class="n">buffer</span><span class="p">.</span><span class="n">crc</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
<span class="w"> </span><span class="n">buffer</span><span class="p">.</span><span class="n">x_axis</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
<span class="w"> </span><span class="n">buffer</span><span class="p">.</span><span class="n">y_axis</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
<span class="w"> </span><span class="n">buffer</span><span class="p">.</span><span class="n">nav_bttn</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
<span class="w"> </span><span class="n">buffer</span><span class="p">.</span><span class="n">motor1_rpm_pwm</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
<span class="w"> </span><span class="n">buffer</span><span class="p">.</span><span class="n">motor2_rpm_pwm</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
<span class="w"> </span><span class="n">buffer</span><span class="p">.</span><span class="n">motor3_rpm_pwm</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
<span class="w"> </span><span class="n">buffer</span><span class="p">.</span><span class="n">motor4_rpm_pwm</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
<span class="w"> </span><span class="c1">// Display brief summary of data being sent.</span>
<span class="w"> </span><span class="n">ESP_LOGI</span><span class="p">(</span><span class="n">TAG</span><span class="p">,</span><span class="w"> </span><span class="s">"Joystick (x,y) position ( 0x%04X, 0x%04X )"</span><span class="p">,</span><span class="w"> </span><span class="p">(</span><span class="kt">uint8_t</span><span class="p">)</span><span class="n">buffer</span><span class="p">.</span><span class="n">x_axis</span><span class="p">,</span><span class="w"> </span><span class="p">(</span><span class="kt">uint8_t</span><span class="p">)</span><span class="n">buffer</span><span class="p">.</span><span class="n">y_axis</span><span class="p">);</span>
<span class="w"> </span><span class="n">ESP_LOGI</span><span class="p">(</span><span class="n">TAG</span><span class="p">,</span><span class="w"> </span><span class="s">"pwm 1, pwm 2 [ 0x%04X, 0x%04X ]"</span><span class="p">,</span><span class="w"> </span><span class="p">(</span><span class="kt">uint8_t</span><span class="p">)</span><span class="n">buffer</span><span class="p">.</span><span class="n">pwm</span><span class="p">,</span><span class="w"> </span><span class="p">(</span><span class="kt">uint8_t</span><span class="p">)</span><span class="n">buffer</span><span class="p">.</span><span class="n">pwm</span><span class="p">);</span>
<span class="w"> </span><span class="n">ESP_LOGI</span><span class="p">(</span><span class="n">TAG</span><span class="p">,</span><span class="w"> </span><span class="s">"pwm 3, pwm 4 [ 0x%04X, 0x%04X ]"</span><span class="p">,</span><span class="w"> </span><span class="p">(</span><span class="kt">uint8_t</span><span class="p">)</span><span class="n">buffer</span><span class="p">.</span><span class="n">pwm</span><span class="p">,</span><span class="w"> </span><span class="p">(</span><span class="kt">uint8_t</span><span class="p">)</span><span class="n">buffer</span><span class="p">.</span><span class="n">pwm</span><span class="p">);</span>
<span class="w"> </span><span class="c1">// Call ESP-NOW function to send data (MAC address of receiver, pointer to the memory holding data &amp; data length)</span>
<span class="w"> </span><span class="kt">uint8_t</span><span class="w"> </span><span class="n">result</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">esp_now_send</span><span class="p">(</span><span class="n">receiver_mac</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">buffer</span><span class="p">,</span><span class="w"> </span><span class="k">sizeof</span><span class="p">(</span><span class="n">buffer</span><span class="p">));</span>
<span class="w"> </span><span class="c1">// If status is NOT OK, display error message and error code (in hexadecimal).</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">result</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">ESP_LOGE</span><span class="p">(</span><span class="s">"ESP-NOW"</span><span class="p">,</span><span class="w"> </span><span class="s">"Error sending data! Error code: 0x%04X"</span><span class="p">,</span><span class="w"> </span><span class="n">result</span><span class="p">);</span>
<span class="w"> </span><span class="n">deletePeer</span><span class="p">();</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="k">else</span>
<span class="w"> </span><span class="n">ESP_LOGW</span><span class="p">(</span><span class="s">"ESP-NOW"</span><span class="p">,</span><span class="w"> </span><span class="s">"Data was sent."</span><span class="p">);</span>
<span class="p">}</span>
</pre>
</div>
</div>
</section>
<section id="schematic">
<h3>
Schematic
<a class="headerlink" href="#schematic" title="Link to this heading">
&para;
</a>
</h3>
<img alt="_images/ESP-IDF_Robot_schematic.png" src="_images/ESP-IDF_Robot_schematic.png"/>
</section>
</section>
<span id="document-progress">
</span>
<section id="work-in-progress-walk-through">
<h2>
WORK-IN-PROGRESS WALK THROUGH
<a class="headerlink" href="#work-in-progress-walk-through" title="Link to this heading">
&para;
</a>
</h2>
<section id="finished-work">
<h3>
Finished Work
<a class="headerlink" href="#finished-work" title="Link to this heading">
&para;
</a>
</h3>
<img alt="_images/ESP-IDF_Robot.jpg" src="_images/ESP-IDF_Robot.jpg"/>
</section>
<section id="chassis">
<h3>
Chassis
<a class="headerlink" href="#chassis" title="Link to this heading">
&para;
</a>
</h3>
<figure class="align-center" id="id1">
<a class="reference internal image-reference" href="_images/chassi-progress_002d.jpg">
<img alt="_images/chassi-progress_002d.jpg" src="_images/chassi-progress_002d.jpg" style="height: 300px;"/>
</a>
<figcaption>
<p>
<span class="caption-text">
Completed chassis with only DC motor controllers installed.
</span>
<a class="headerlink" href="#id1" title="Link to this image">
&para;
</a>
</p>
</figcaption>
</figure>
</section>
<section id="wiring">
<h3>
Wiring
<a class="headerlink" href="#wiring" title="Link to this heading">
&para;
</a>
</h3>
<figure class="align-center" id="id2">
<a class="reference internal image-reference" href="_images/chassi-progress_003a.jpg">
<img alt="_images/chassi-progress_003a.jpg" src="_images/chassi-progress_003a.jpg" style="height: 750px;"/>
</a>
<figcaption>
<p>
<span class="caption-text">
Completed wiring.
</span>
<a class="headerlink" href="#id2" title="Link to this image">
&para;
</a>
</p>
</figcaption>
</figure>
</section>
<section id="motor-wires-harness">
<h3>
Motor Wires Harness
<a class="headerlink" href="#motor-wires-harness" title="Link to this heading">
&para;
</a>
</h3>
<figure class="align-center" id="id3">
<img alt="_images/motors-wiring-harness-001.jpg" src="_images/motors-wiring-harness-001.jpg"/>
<figcaption>
<p>
<span class="caption-text">
DC Motors wires secured inside harnes.
</span>
<a class="headerlink" href="#id3" title="Link to this image">
&para;
</a>
</p>
</figcaption>
</figure>
</section>
</section>
</div>
</section>
<div class="clearer">
</div>
</div>
</div>
</div>
<div class="clearer">
</div>
</div>
<article id="back-cover">
<div class="container">
<div class="back-cover-footer">
<p>
&copy; Copyright 2025, Alexander B.
</p>
<p>
Created using
<a href="http://sphinx-doc.org/">
Sphinx
</a>
8.2.3.
</p>
</div>
</div>
</article>
</body>
</html>