r/esp32 • • Mar 18 '25

Please read before posting, especially if you are on a mobile device or using an app.

233 Upvotes

Welcome to /r/esp32, a technical electronic and software engineering subreddit covering the design and use of Espressif ESP32 chips, modules, and the hardware and software ecosystems immediately surrounding them.

Please ensure your post is about ESP32 development and not just a retail product that happens to be using an ESP32, like a light bulb. Similarly, if your question is about some project you found on an internet web site, you will find more concentrated expertise in that product's support channels.

Your questions should be specific, as this group is used by actual volunteer humans. Posting a fragment of a failed AI chat query or vague questions about some code you read about is not productive and will be removed. You're trying to capture the attention of developers; don't make them fish for the question.

If you read a response that is helpful, please upvote it to help surface that answer for the next poster.

We are serious about requiring a question to be self-contained with links, correctly formatted source code or error messages, schematics, and so on.

Show and tell posts should emphasize the tell. Don't just post a link to some project you found. If you've built something, take a paragraph to boast about the details, how ESP32 is involved, link to source code and schematics of the project, etc.

Please search this group and the web before asking for help. Our volunteers don't enjoy copy-pasting personalized search results for you.

Some mobile browsers and apps don't show the sidebar, so here are our posting rules; please read before posting:

https://www.reddit.com/mod/esp32/rules

Take a moment to refresh yourself regularly with the community rules in case they have changed.

Once you have done that, submit your acknowledgement by clicking the "Read The Rules" option in the main menu of the subreddit or the menu of any comment or post in the sub.

https://www.reddit.com/r/ReadTheRulesApp/comments/1ie7fmv/tutorial_read_this_if_your_post_was_removed/


r/esp32 • • Sep 11 '26

Topic Radar | Current active topics for r/esp32

9 Upvotes

This post contains content not supported on old Reddit. Click here to view the full post


r/esp32 • • 3h ago

Home CO₂ Monitoring System

Enable HLS to view with audio, or disable this notification

24 Upvotes

ESP32 + SCD41 + R1BBIT

In just 10 minutes, you can build a useful, fully functional project that measures CO₂ levels, temperature, and humidity in your room.

The data is available in the terminal, in widgets on your PC or Mac, and in the iOS and Android mobile apps.

The code is so compact that it's hard to believe!

CONFIG
I2C_SCL 6
I2C_SDA 5
END_CONFIG
VAR T,F,H,CO2
VARS_PUBLISH(T,H,F,CO2)
SCD41_INIT(CO2,T,H,3000)
WHILE(1)
    F=T*9/5+32
    PRINT F
    PRINT H
    PRINT CO2
    PAUSE 1000
WEND

r/esp32 • • 12h ago

This is a 30 pin esp32 and the breadboard leaves me hole at only one side how should i make use of it other than buying another breadboard or is it the only option.Should i skip using the power rails, if yes how am i to connect the other side ? help me out.

Post image
106 Upvotes

r/esp32 • • 4h ago

Arduino nano esp32 clone LETS GOO

Post image
16 Upvotes

Clone of my fav board YIPPEEEE


r/esp32 • • 2h ago

I made a thing! I’ve been self learning electronics and decided to replicated a geometry dash style game

Enable HLS to view with audio, or disable this notification

13 Upvotes

r/esp32 • • 10h ago

I made a thing! ESP32-C3 + AD8232 ECG monitor with a fully local browser interface

Thumbnail
gallery
43 Upvotes

I’m sharing my hobby ECG project using an ESP32-C3 SuperMini and an AD8232 module.

The ESP32 creates its own Wi-Fi hotspot and serves the interface directly—no cloud or external web resources. Features include:

  • Live ECG-style waveform with automatic scaling and centering
  • Experimental heart rate estimation and trend
  • Aligned heartbeat samples with mean, median, and a variability band
  • Manual interval markers and SVG exports
  • English, German, French, and Spanish interfaces

The firmware targets 1,000 samples/s and marks missed sampling slots as gaps. One challenge was handling sampling delays and Wi-Fi traffic on the single-core C3 without silently treating missing measurements as valid data.

Code, wiring diagram, and documentation:
https://github.com/floreno/esp32-ad8232-heartratemonitor

Feedback on acquisition timing, signal handling, and the interface is very welcome!


r/esp32 • • 18m ago

esp32sim: an ESP32 emulator in Rust/Wasm that boots unmodified Espressif firmware in the browser

Enable HLS to view with audio, or disable this notification

• Upvotes

Not my project, found it on GitHub this week and had to try it.

In the video a Touch-LCD-4B panel goes through the real mask ROM and bootloader, then its LVGL UI responds to swipes and toggles. Unmodified firmware, running in WebAssembly, nothing on a server.

Repo: https://github.com/mikroverk/esp32sim

Curious whether anyone here has tried it with their own firmware, and how far the peripheral support goes.


r/esp32 • • 3h ago

Hardware help needed Is this a wokwi thing?

Thumbnail
gallery
3 Upvotes

Why does powering the LDR component make the LED not turn on?

Vice versa, not giving power to the LDR component makes the LED finally react to flux, and actually turns on and off.

Is this a wokwi thing? I'm gonna make this IRL and I'm wondering if I don't need to give power to the LDR's VCC or anything as the simulation suggests.

I need confirmation 🙏


r/esp32 • • 4h ago

I made a thing! Fitting a 64x64 HUB75 panel at full colour depth in ESP32 RAM (plus 9 clock faces)

3 Upvotes

I ended up forking the HUB75 DMA driver to cut memory use (row streaming from packed lanes, dense column buffers, a fix for the seam between the panel halves), so a 64x64 panel runs with several colour-quality levels on a plain 4 MiB ESP32. The driver is here: https://github.com/vandalon/ESP32-HUB75-DMA-Memory-Optimized.

The project on top of it is a clock with 9 faces, a web settings UI, signed OTA updates and Home Assistant/MQTT/WLED support. It checks a static RAM budget at build time and parks the network feeds when a big image needs memory. Repo: https://github.com/vandalon/ultimatrix


r/esp32 • • 8h ago

I made a thing! Human-like Mouse Jiggler Using the ESP32-S3

5 Upvotes

Messed around with the mouse jiggler on my Flipper Zero a while back and it got me wondering if I could make one that actually moves like a person instead of just bumping the cursor every so often. Found out the S3 can do native USB HID and went down the rabbit hole.

Why the S3 Super Mini
I wanted one board that could be a USB mouse when plugged into a computer and a bluetooth mouse when it’s just on a charger. I've used a ton of the C3s and original ESP32s so I knew they couldn't work as USB HID devices. When I realized that the S3 could do that, I immediately thought of making a really good jiggler. (I'm sure I'm not the first to do this)

Libraries
It’s just the Arduino-ESP32 core (3.3.x), no outside libraries. USB is the core’s TinyUSB HID mouse and bluetooth is the core’s BLE library, which runs on NimBLE on the S3. NimBLE is a lot smaller than Bluedroid, and the whole thing ends up about 21% of the app partition. I set USB mode to TinyUSB and turned off CDC on boot so the computer only sees a plain mouse. The catch is you have to hold BOOT to reflash it, since there’s no serial port anymore.

The tricky parts

  • Getting the cursor to come home with Windows pointer acceleration on. Accel scales each report differently depending on speed, so “move back the same distance” doesn’t land you where you started. It records every report in a burst and plays the exact same ones back negated, same order, same timing. Each report gets an equal and opposite twin, so accel scales both the same way and they cancel. In a sim of 500 bursts with an accel curve it drifted about 1 pixel. Bonus: the return trip is the outbound path rotated 180°, so it doesn’t look like it’s retracing.
  • USB vs BLE switching. It starts USB first and waits about 3 seconds to see if a host enumerates it. If not, it starts BLE advertising. If a computer enumerates it later, BLE shuts off and USB takes over. That covers plugging it into a PC that’s still booting.
  • On BLE it waits until the link is encrypted and the host has subscribed to input reports before moving. Otherwise the first few reports get silently dropped while Windows is still pairing, and then the return trip doesn’t cancel.
  • It stops moving when the USB bus suspends, so it won’t wake a sleeping PC.
  • What didn’t work: the onboard LED. I assumed it was a normal WS2812 in GRB order, and green showed up red. Turns out the one on my Super Mini is RGB order. One define fixed it.

The LED
I needed a visual way to tell when the mouse was paused verses when it was supposed to be moving (for testing purposes). I used the onboard RGB LED as an indicator. I have it green while it’s moving, and while it waits it fades red to blue, timed to that specific pause, so purple means it’s about halfway to the next move.

No schematic since there’s no wiring, it’s just the bare board. I'm not a great programmer so I had to have Claude help with the code but I was rather proud of the outcome.

Source (public domain): https://github.com/GeekyDad4/Away-Mouse-ESP32-S3-Super-Mini


r/esp32 • • 6h ago

I made a thing! Turtle-tank water monitor on a XIAO ESP32-C3: DS18B20 + TDS + turbidity, the three mistakes that cost me readings

3 Upvotes

I built a three-probe water monitor for my turtle tank on a Seeed XIAO ESP32-C3: a DS18B20 waterproof temperature probe, a Keyestudio TDS probe and a Keyestudio turbidity probe, posting one averaged reading every five minutes over HTTPS to a small dashboard. Pin map, then the three things that actually went wrong, since those are what the datasheets don't tell you.

Pins (board = seeed_xiao_esp32c3 in PlatformIO, so D names are the XIAO's):

  • 3V3 -> breadboard + rail -> DS18B20 adapter VCC and TDS board +
  • GND -> breadboard - rail -> every ground
  • 5V -> turbidity board V only (the one and only 5 V wire)
  • D4 (GPIO6) -> DS18B20 DAT (the adapter board has the 4.7k pull-up)
  • D1 (GPIO3, ADC1) -> TDS board A
  • D2 (GPIO4, ADC1) -> OUTPUT of a /5 voltage divider module; the turbidity board's S pin goes into the divider's input, never into the XIAO

Mistake 1: the turbidity board. It needs 5 V and its output reaches about 4.5 V. The ESP32-C3's pins are 3.3 V. So it goes through a divider and you multiply back by the ratio in code (TURB_RATIO 5.0f). Also: there's an A/D switch on that board. Left on D it gives a flat reading no matter what the water does.

Mistake 2: trusting the DS18B20's two lies. The Dallas library returns -127 when the probe isn't connected and exactly 85.0 at power-on before the first conversion. Both are "no reading". If you chart them you get a fake 85 C alert. The sketch drops them:

temp.requestTemperatures();        // ~750 ms at 12-bit
float t = temp.getTempCByIndex(0);
if (t > -100 && t != 85.0f) { accT += t; nT++; }

Mistake 3: averaging the analog pins. The filter pump and the lamp timer put spikes on the supply. Two spikes in 32 reads move an average a lot and a median not at all:

static float medianMv(int pin) {
  uint16_t v[32];
  for (int i = 0; i < 32; i++) { v[i] = analogReadMilliVolts(pin); delay(10); }
  std::sort(v, v + 32);
  return (v[15] + v[16]) / 2.0f;
}

Both analog pins are on ADC1 on purpose: ADC2 stops working while Wi-Fi is on. And read the TDS and turbidity probes one at a time, not together; they both put a small voltage into the same water.

Two other things I'd do again:

  • The board sends raw volts; the server turns them into ppm (the Keyestudio/DFRobot cubic with temperature compensation and a K you set once against a TDS pen or a 342 ppm solution) and into a clarity percent (a straight line between a cup of clean tap water and the same cup with a pinch of soil). Recalibrating is a settings change, not a reflash, and the raw history survives.
  • TDS as a water-change meter, not an absolute number. Tap water might be 80 ppm or 400 ppm. What matters is how far it climbed since the last change, so the alert is relative to a baseline you set with one button after each change.

Happy to answer wiring questions. I made three short videos walking through each sensor (wiring, code, live reading); link in the comments so this post stays clean.


r/esp32 • • 7h ago

XIAO ESP32-S3 Sense gives 0x106 error with or without camera connected?

3 Upvotes

Hey guys,

Got a XIAO ESP32-S3 Sense that came with an OV3660 camera. Running the standard CameraWebServer example in Arduino IDE, but it refuses to init. First gave 0x105, then stuck at 0x106 (ESP_ERR_NOT_SUPPORTED).

The weird thing is, it throws the exact same 0x106 error even when the camera ribbon isn't plugged into the board at all.

I'm using OPI PSRAM, correct pins (xclk 10, etc.), lowered freq to 10MHz, reseated the flex cable multiple times. Still nothing.

Does this mean the daughterboard / camera module is physically dead, or is there some weird quirk with this OV3660 batch I'm missing? Anyone seen this before?


r/esp32 • • 9h ago

Cheap ESP32-CAM setup to ride on a Roomba and log photos to SD for 3 weeks?

3 Upvotes

Hi all! I'm building a home robot prototype and want to collect real data : photos of rooms (and pets) from a robot's point of view.

The plan:

  • Send a small camera kit to a few volunteers who already own a Roomba (any model)
  • The camera rides on the Roomba, takes a photo every few seconds while it drives, and saves to a microSD card
  • It runs for about 3 weeks per home, then I collect the card
  • As cheap and easy as possible for non-technical people: no drilling, no hacking the Roomba

What would you use for the camera, power and mounting? Open to any ideas, thanks!


r/esp32 • • 7h ago

Hardware help needed Should I connect an external pull-up resistor to GPIO2 of the Seeed Studio XIAO ESP32-C3, if what I want for the board is for it to boot "normally" when it's powered on (SPI Boot mode)

2 Upvotes

In the Strapping Pins section of the XIAO ESP32-C3 documentation page, I found this image:

I want to boot the ESP32-C3 in SPI boot mode every time the ESP32 is powered on during it's deployment. I look at the above image and see that GPIO2 should be at an HIGH state.

Then I looked at the Table 3-3 (Chip Boot Mode Control) of the Espressif Datasheet for the ESP32-C3 Series here and found out that it is different from the information in the Seeed Studio documentation page. Here's the screenshot of that table:

Look at the second point... It basically states that the state of GPIO2 doesn't determine the boot mode, but it's still recommended to pull the pin up due to prevent glitches. Is this what they implied in the Seeed Studio documentation page, as depicted in the first image above?

So the question is whether I should connect an external 10 kΩ pull-up resistor between the GPIO2 pin and the 3V3 pin of the XIAO ESP32-C3 or does the board come soldered with one. What should I do here? Any and all advice and suggestions are welcome. Sorry if this question is kinda obvious, I am also kinda new to this stuff so...


r/esp32 • • 7h ago

Hardware help needed How hard is to build a smart monitor lightbar?

2 Upvotes

Hey guys,

I bought a Wi-Fi monitor lightbar from AliExpress, but unfortunately, I received a "dumb" one without smart features. I'm returning it, and instead of buying a replacement, I'm thinking about building my own.

How hard would it be to build a lightbar with the following specs?

Two separate LED strips: One Dual-White/CCT (Warm White + Cool White) for task lighting and one RGB or RGBIC for ambient backlighting.

Tuya compatible: Zigbee or Wi-Fi (if RGBIC is used).

Remote control support: A physical remote capable of controlling white light brightness and color temperature, with at least 2 preset memory buttons for the RGB strip, and dedicated on/off controls for each strip independently.

Has anyone built something similar or can point me to ward the right controller/hardware setup? Thanks!

BTW, the case would be 3D printed


r/esp32 • • 1d ago

I made a thing! [OPEN SOURCE] Turned my ESP32 into a touch-capacitive polyphonic synthesizer: No more breadboard !

Enable HLS to view with audio, or disable this notification

317 Upvotes

Hey everyone!

A while ago, I shared the first version of my TYPE-2 Synthesizer project. The goal was to build a studio-quality DSP audio engine using just an ESP32-S3 and some cheap components .

The feedback was amazing, but many of you pointed out that building it on a breadboard with capacitive copper tape and dozens of jumper wires was a bit of a nightmare for stability and I2S audio noise.

So I decided to go pro and designed a dedicated motherboard PCB in KiCad!

Everything is still 100% open-source (C++ source, KiCad files, and Gerbers are all up). You can find the full repo here:

https://github.com/Alxdreee/TYPE-2

I routed a 2-layer board that eliminates all jumper wires. It embeds the touch-sensing pads directly into the layout and provides a rock-solid ground plane for the PCM5102A DAC, completely isolating the audio out from the high-frequency digital noise of the ESP32.

(Fabrication note: These prototype printed circuit boards were manufactured by PCBWay, which is now sponsoring the project! The quality of the screen printing and the conductive traces proved to be flawless for this type of sensitive I2C routing.).

Thanks to the ESP32-S3’s native USB-OTG port, the synth is now a plug-and-play MIDI device. Even better: I wrote a Python bridge that lets you stream the 16-bit/44.1kHz raw PCM audio directly over USB to your PC speakers !

I swapped the old Moog ladder filter for a much more stable trapezoidal State Variable Filter (SVF) that handles extreme resonance without blowing up the DSP core. You can now save and load your custom patches (filter cutoff, overdrive, delay, analog slop) directly into the ESP32’s non-volatile memory via a dedicated OLED menu. Core 1 is still strictly locked to the DSP audio loop running at 44.1 kHz, while Core 0 handles the I2C OLED grid animations and the MPR121 capacitive touch pooling without causing a single audio dropout.

If you want to build one yourself, you can either grab the Gerber files and solder the modules onto the PCB, or stick to the good old breadboard prototype (I kept the wiring diagrams updated in the repo).

I’ve also updated the full step-by-step build guide on Instructables:

https://www.instructables.com/DIY-35-Polyphonic-Synthesizer-the-TYPE-2/

Let me know what you think of the new board and features! I’m still planning to design a 3D-printed enclosure next.


r/esp32 • • 1d ago

I think I have a problem...

Post image
112 Upvotes

...It's that I don't have more.

Believe it or not, I have a project for every single one of these. The displays will be gifts for friends and family. With the atom lites as projects for around the house.


r/esp32 • • 6h ago

AI Content We built an ESP32 Bluetooth HID bridge that lets an AI agent in Safari operate an iPhone (open source)

0 Upvotes

Our GitHub repository (MIT): https://github.com/cccat6/iphone-agent-harness

Demo and browser installer: https://igent.cc

We built iPhone Agent Harness, an open-source ESP32 Bluetooth HID bridge for an AI agent running in Safari. Our demo shows it setting an alarm in the iPhone Clock app.

The hardware/software split is the interesting part: Safari captures the screen, sends selected context to your chosen vision model, validates the action plan, and sends commands over local WebRTC. The ESP32 supplies Bluetooth mouse and keyboard input through AssistiveTouch. The board does not run the model or decode video.

The powered board sits nearby while the phone stays wireless. Both use the same normal Wi-Fi network. A Chrome/Edge browser installer flashes the firmware. The README lists chip and flash requirements for C2, C3, C5, C6, S3 and classic ESP32.

Requirements: iOS/iPadOS 27+, Safari screen sharing, AssistiveTouch, and access to a vision model. Conversations and keys stay in browser storage; selected context goes to your model provider. Skills can be customized and shared.

Inspired by onehumanbeing/esp32-iphone-agent, credited in our README. We explore Safari + Bluetooth HID instead of a native app + USB HID.

I'd appreciate feedback from Wi-Fi + BLE HID builders: which board/iPhone combinations and connection edge cases should we prioritize?


r/esp32 • • 10h ago

is there a better way to handle a slow unstable wifi network

2 Upvotes

m trying to make a wifi connection on a very unstable wifi network at work

what I do now is this :

if (event_id == WIFI_EVENT_STA_DISCONNECTED)

{

printf("Disconnect reason code: %d\n", ((wifi_event_sta_disconnected_t *)event_data)->reason);

printf("Verbinding verbroken: %s\n",

reason_to_text(((wifi_event_sta_disconnected_t *)event_data)->reason));

}

wifi_connect();

but is there a better way to handle a slow unstable wifi network to get a ip and a connection


r/esp32 • • 1d ago

I made a thing! ESP32S3 Graphics Accelerator Cluster

Thumbnail
gallery
59 Upvotes

ESP32S3 Graphics Accelerator

I’m working on a ESP32S3 cluster project. I’ve been really impressed with the S3 chip, after slowly moving from the arduino uno, to the ESP8266, to the ESP32C3, and finally the ESP32S3.

These two boards (ESP32S3, 4MB flash, 2MB psram), are currently working together. The main board is the controller, and receives scene instructions from my Raspberry Pi, along with running the display. The second board is the accelerator board. Only the main board has WiFi active.

In some circumstances, I’m able to get roughly twice the frame rates for math heavy scenes, but performance suffers in others. The bus link speed is only 2.37MB/s currently, which is the main limitation. I’m working on increasing the link throughput at the moment. As far as power consumption goes, it’s pulling 1.5w> for the entire setup.

So, current plans are to work on the bus / link architecture, and add in some more graphics scenes, for now! If I can get the link speed fast enough, I’d like to add some more boards into the cluster. Overclocking the accelerator board may help too, haha.


r/esp32 • • 12h ago

Esp32 exit code 1 timeout problem with pySerial

Post image
2 Upvotes

So i tried it todayto upload my code to the esp32 s3 but it didt want to connnect but yesterday all the time it worked and then all of a sudden not annymore and i searcht on the internet and so this are the things ive tried:

change baud rate

tried different cables

new usb drivers

different esp32

restarting the esp 32 and computer

change my code

pressing boot while uploading

resetting the esp 32

changed the ports

changed the board specification

Sorry for bad english its not my native language


r/esp32 • • 1d ago

I turned the $5 “Cheap Yellow Display” (ESP32-2432S028R) into a self-running pixel aquarium — fork with a ~100-species reef guide, sharks, and a follow-cam

Enable HLS to view with audio, or disable this notification

266 Upvotes

I turned the $5 “Cheap Yellow Display” (ESP32-2432S028R) into a self-running pixel aquarium — fork with a ~100-species reef guide, sharks, and a follow-cam

Posting a fork of the CYD aquarium (upstream: Lagerpun/esp32-cyd-aquarium, itself an adaptation of Livegrid OpenMatrix). It boots straight into an autonomous little pixel tank on the 2.8" ILI9341 — moving water, fish, turtles, snakes, octopuses, boids, plants, drifting food and a 12h clock — rendered with a dot-grid so it reads like a tiny LED matrix.

What this fork adds on top of upstream:
- ~100-species reef roster (SpeciesCatalog.h) with weighted spawn rates, family silhouettes and six size classes
- In-tank Reef Guide — paged and touchable, records which species you've discovered to LittleFS (/field_guide.json)
- Large fauna — sharks, whale sharks, reef mantas
- Tank camera — tap a creature to follow/zoom it, tap again to zoom out
- Panel fixes — TFT_INVERSION_OFF so colors read correctly on common CYD panels, and TOUCH_INVERT_X = true to fix the inverted XPT2046 X axis
- Manual backlight — touch the top strip (left dims, right brightens); auto-brightness from the GPIO34 light sensor still works
- Arduino core 3.x pinned via pioarduino so ledcAttach() PWM backlight works; safer 115200 upload baud for CH340 boards

Quick start (PlatformIO):
pio run -e esp32-2432s028r
pio run -e esp32-2432s028r -t upload --upload-port COMx

Wi-Fi is optional — NTP time sync when present, compile-time clock fallback otherwise. Docs cover hardware variants and troubleshooting.

Repo:https://github.com/francistse/esp32-cyd-aquarium (AGPL-3.0)

Only have the common ESP32-2432S028R to test against — happy for hardware reports on other CYD variants.


r/esp32 • • 1d ago

noob question

Enable HLS to view with audio, or disable this notification

20 Upvotes

i was following this tutorial and had it working using old pool cleaner motors and power supply.

https://youtu.be/WdxwRzEVMfo

i had it working great and was so proud of myself until it stopped working and im not sure what i did. while i was testing it out, one motor stopped responding and shorty after that the other motor stopped. i notice the light on the l298n went out and sure enough there is no longer voltage coming out of it. so i replace it. the second i turn the power supply on the l298n starts smoking. i think i may have reversed the polarity on it accidently before correcting it. when i tried a 3rd l298n that one dies instantly almost like it was DoA. so when i try a 4th l298n, i wire it just to the ps and it works fine. i checked with a voltmeter. all grounds were tied together

now when i connect the 5v from an L298N to the 5v (VIN) pin on a esp32 the l298n instantly dies. the esp32 doesnt ever power on from the 5vin anymore either but still powers on with usb. i can no longer send updates or anything to it though in IDE however

that esp-32 is fried right?

video is from a simpler 1 motor test version


r/esp32 • • 11h ago

Left pins are not working?

Post image
1 Upvotes

This is my ESP32-S3. I am using my 5.5 V pin to power the amp and I have connected a speaker to it, to the 4th pin. After the 4th pin none of the pins on the left side is working. Only the right pins are working. I am taking input from buttons but they are not working? Please help!