Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
ff05079
Add ESP32 BLE lesson (BLE.md)
jonfroehlich May 22, 2026
ce02131
Enhance ESP32 Bluetooth lessons: Python & BLE
jonfroehlich May 22, 2026
ddea529
Update Bluetooth serial docs to use Makeability Lab JS
jonfroehlich May 23, 2026
56b838d
Merge branch 'main' into esp32-bluetooth
jonfroehlich May 23, 2026
e3389d7
Improve ESP32 Bluetooth serial lesson
jonfroehlich May 23, 2026
0b865f6
Refactor Bluetooth lesson formatting
jonfroehlich May 23, 2026
65c387e
Add Serial vs SerialBT API comparison table
jonfroehlich May 23, 2026
6eef4e0
Clarify analogWrite() usage on ESP32
jonfroehlich May 23, 2026
a4cf96c
Update ESP32 BLE lesson content and accessibility
jonfroehlich May 23, 2026
ae6c1d8
docs(esp32/ble): add comparisons and clarifications
jonfroehlich May 23, 2026
cd3f5e8
I split up ble.md into two lessons
jonfroehlich May 23, 2026
f19c62a
Update Bluetooth lesson text, examples, and images
jonfroehlich May 27, 2026
c457a78
Update ESP32 Bluetooth tutorial: verify via OS tools
jonfroehlich May 27, 2026
bffae52
Reorganize ESP32 wireless lessons
jonfroehlich May 27, 2026
8bf3bd2
Updated index
jonfroehlich May 27, 2026
8a519d7
Enhance Bluetooth lesson and add Wireless lessons index
jonfroehlich May 28, 2026
aba6d94
Update ESP32 docs and Bluetooth sketches
jonfroehlich May 30, 2026
4b812c7
Update Bluetooth Web Serial lesson with NeoPixel demo
jonfroehlich Jun 22, 2026
3adee88
Merge remote-tracking branch 'origin/main' into esp32-bluetooth
jonfroehlich Jun 24, 2026
beb5ef7
Add SEO description: front matter to new ESP32 Wireless pages
jonfroehlich Jun 24, 2026
afa13ba
Fix content-lint failures on new ESP32 Wireless pages
jonfroehlich Jun 24, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file added assets/images/PN2222ATransistor.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/images/PanelMountPotentiometer_NoCap.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
3 changes: 2 additions & 1 deletion esp32/analog-input.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@ layout: default
title: L4: Analog input
image: /esp32/assets/og/analog-input.jpg
description: "Read a potentiometer on the ESP32 with analogRead() and build a knob-controlled LED dimmer. Explore the 12-bit ADC (0-4095), map() ranges, and which ADC pins to use."
parent: ESP32
parent: Fundamentals
grand_parent: ESP32
has_toc: true # (on by default)
usemathjax: true
comments: true
Expand Down
754 changes: 754 additions & 0 deletions esp32/ble-bidirectional.md

Large diffs are not rendered by default.

743 changes: 743 additions & 0 deletions esp32/ble-intro.md

Large diffs are not rendered by default.

614 changes: 614 additions & 0 deletions esp32/bluetooth-serial.md

Large diffs are not rendered by default.

579 changes: 579 additions & 0 deletions esp32/bluetooth-web-serial.md

Large diffs are not rendered by default.

3 changes: 2 additions & 1 deletion esp32/capacitive-touch.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@
layout: default
title: L6: Capacitive Touch
description: "Use the ESP32's built-in capacitive touch hardware with touchRead() to sense a finger on a bare pin, calibrate a threshold, and build a touch piano from foil or fruit."
parent: ESP32
parent: Fundamentals
grand_parent: ESP32
has_toc: true # (on by default)
usemathjax: true
comments: true
Expand Down
2 changes: 1 addition & 1 deletion esp32/esp32-ide.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ image: /esp32/assets/og/esp32-ide.jpg
description: "Set up the Arduino IDE to program ESP32 boards: add Espressif's board package, select the board and port, upload a test sketch, and troubleshoot common upload issues."
parent: ESP32
has_toc: true # (on by default)
nav_order: 9
nav_order: 11
nav_exclude: false
comments: true
usetocbot: true
Expand Down
3 changes: 2 additions & 1 deletion esp32/esp32.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@ layout: default
title: L1: Intro to the ESP32
description: "Meet the ESP32 system-on-a-chip: how it compares to the Arduino Uno and Leonardo, why it runs at 3.3V, the ESP32 vs. ESP32-S3, and the Adafruit Feather pinout."
image: /esp32/assets/images/ESP32Boards_MakerAdvisor.png
parent: ESP32
parent: Fundamentals
grand_parent: ESP32
has_toc: true # (on by default)
usemathjax: true
comments: true
Expand Down
96 changes: 96 additions & 0 deletions esp32/fundamentals.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
---
layout: default
title: Fundamentals
description: "The ESP32 Fundamentals series: set up the board, blink and fade LEDs with the LEDC PWM peripheral, read the 12-bit ADC, play tones, and use built-in capacitive touch before going wireless."
parent: ESP32
nav_order: 1
has_toc: false # on by default
has_children: true
comments: true
usetocbot: true
---
# ESP32 Fundamentals
{: .no_toc }

## Table of Contents
{: .no_toc .text-delta }

1. TOC
{:toc}
---

<!-- TODO Add an awesome fun video extracted from one of the lessons as a hero teaser -->

In this lesson series, you will learn the foundations of programming the ESP32: how it differs from the Arduino Uno and Leonardo you've used before, how to set up your development environment, and how to use the ESP32's hardware features—from GPIO and PWM to its 12-bit ADC and built-in capacitive touch sensing. By the end of this series, you'll be comfortable enough with the board to dive into [the Wireless series](wireless.md), where the ESP32 really shines.

The lessons are interactive and designed to be completed **in order**. All ESP32 code is open source and in this [GitHub repository](https://github.com/makeabilitylab/arduino/tree/master/ESP32).

{: .note }
> Before starting, we recommend completing both [Intro to Electronics](../electronics/index.md) and [Intro to Arduino](../arduino/index.md). We build on concepts from those modules—like voltage dividers, `digitalWrite`, `analogWrite`, and PWM—without re-explaining them in detail here.

## Lessons

### [Lesson 1: Introduction to the ESP32](esp32.md)

Learn about the ESP32 platform, how it compares to the Arduino Uno and Leonardo, and how to set up your development environment. You'll get familiar with the pin diagram and important hardware differences like the 3.3V operating voltage.

### [Lesson 2: Blinking an LED](led-blink.md)

Write your first ESP32 program! The code is the same as the Arduino [Blink lesson](../arduino/led-blink.md)—the challenge here is getting comfortable with the new board and its pin layout.

### [Lesson 3: Fading an LED with PWM](led-fade.md)

Learn how to use PWM output on the ESP32 to fade an LED. This is where things start to diverge from Arduino: instead of `analogWrite`, the ESP32 uses the LEDC (LED Control) library, which gives you more control over PWM channels, frequencies, and resolutions.

### [Lesson 4: Analog Input](analog-input.md)

Use the ESP32's 12-bit ADC to read a potentiometer and control an LED's brightness—combining analog input with PWM output.

### [Lesson 5: Playing Tones](tone.md)

Learn how to play tones and melodies on the ESP32 using the `tone()` function (now supported in ESP32 Arduino core v3.x!) and the LEDC PWM library.

### [Lesson 6: Capacitive Touch Sensing](capacitive-touch.md)

The ESP32 has built-in capacitive touch sensing hardware—no external components needed! In this lesson, you'll use a bare wire (or aluminum foil) as a touch sensor to control an LED.

## What's next?

Once you've completed the Fundamentals lessons, move on to [Wireless](wireless.md) to learn about WiFi, Bluetooth Classic, and Bluetooth Low Energy (BLE)—the features that make the ESP32 truly powerful for IoT and physical computing projects!

<!-- TODO: FUTURE FUNDAMENTALS LESSONS TO ADD
============================================================

## Reference page: Inside ESP32 (inside-esp32.md) [MEDIUM PRIORITY]
Similar to inside-arduino.md, a "deep dives for the curious" page covering:
- How LEDC PWM works under the hood (timer groups, channels, hardware)
- FreeRTOS and dual-core task scheduling (why loop() only runs on core 1)
- ESP32 ADC nonlinearity and calibration (the ADC is notoriously noisy/nonlinear;
ESP-IDF has calibration APIs but the Arduino core doesn't fully expose them)
- The WiFi/ADC2 hardware conflict: why it happens at the silicon level
- How native USB works on the S3 vs. the CP2104 UART bridge on the Huzzah32
- ESP32 boot process: ROM bootloader → 2nd stage bootloader → application
- Memory architecture: IRAM, DRAM, PSRAM, RTC memory, flash cache
- Power domains and why deep sleep current is so low
Only create this page when there are at least 3-4 solid sections to fill it.
Thin reference pages feel incomplete and unmaintained.

## Lesson: Using STEMMA QT / Qwiic I2C Devices
- The ESP32-S3 Feather has a STEMMA QT connector for plug-and-play I2C
- Connecting sensors (BME280, accelerometer, etc.) without soldering
- Using Adafruit sensor libraries
- Could combine with IoT lesson for a complete sensor-to-cloud pipeline

## Lesson: I2S Audio
- Using the I2S peripheral for higher-quality audio input/output
- Connecting an I2S microphone (e.g., INMP441) or amplifier (e.g., MAX98357A)
- Recording and playing back audio
- More advanced than the tone lesson; real audio, not just square waves

## Note on DAC lessons:
- The original ESP32 has two 8-bit DAC channels (GPIO25, GPIO26) for true analog output
- The ESP32-S3 does NOT have a DAC, so a DAC-specific lesson would only
apply to students with an original ESP32 or Huzzah32
- If we add a DAC lesson, clearly mark it as original-ESP32-only
- For analog output on the S3, use PWM with an RC filter, or an external DAC (MCP4725)
-->
Loading
Loading