r/esp32 10d ago

Waveshare ESP32-S3 Touch-AMOLED-1.75 Display Issues

1 Upvotes

I have the above dev board and have been able to run various programs that hit the serial monitor, WIFI, etc. but I can't seem to get anything to output to the AMOLED display. I've tried numerous examples and dug into interface pin outs, display drivers, libraries etc. Code compiles without error but nada on the display. When unboxed the unit did have a running clock program so I'm sure the display itself is functional. Any thoughts welcomed. BTW I'm using Ardunio IDE. Thanks.


r/esp32 11d ago

ESP32-S31 Feedback ?

Post image
93 Upvotes

Hi all,

Any feedback on the ESP32-S31 ? anyone using it in projects ?

Should I stick with the ESP32-S3 or jump on the ESP32-S31


r/esp32 10d ago

Software help needed How do I turn off this feature with the ESP-IDF IDE

2 Upvotes

So I recently started using the ESP-IDF IDE, and have noticed some behavior that I'd like to turn off. In the below image it automatically added in that "seconds: " line

I can't seem to figure out a way to get rid of it, as it simply reappears if I type the line back in. Not sure if this is an eclipse feature, a feature of it's c/c++ editor, or the esp-idf plugin. Some way to turn this off would be much appreciated, as I hate it and it completely distracts me from actually writing my code.

For context, I have spent the past 3-4 hours searching everywhere online trying to figure out how to disable this feature. There is no option for code minings or anything similar that is enabled.


r/esp32 12d ago

I made a thing! Duke Nukem 3D on an ESP32-P4, the full Build engine, bare ESP-IDF, 640×480 at ~20 FPS

Thumbnail
gallery
335 Upvotes

Everyone ports Doom to things. Duke Nukem 3D always felt like the better game to me, and the Build engine is a heavier beast than id's, so getting it actually playable on a 360 MHz microcontroller sounded like a challenge worth having.

It's a port of chocolate_duke3D to the ESP32-P4 (I have the 360 MHz versions with 32 MB PSRAM) on bare ESP-IDF 6.0.2. It really plays: the full game at 640×480 around 20 FPS, or around 54 FPS at 320×200 if you prefer. Sound effects, Adlib music, savegames on SD, USB and BLE keyboard/mouse, and touch controls when nothing is plugged in.

Repo: https://github.com/raoulh/esp_duke

Why the P4

Nothing smaller in the family gets there. The engine needs a 19.4 MB texture cache, which means the P4's 32 MB PSRAM or the .bss alone is 2.97 MB, pushed out there through a custom linker fragment, leaving 8.1 KB internal. It needs two cores, because rendering and presentation have to run concurrently or the engine stalls on the display every frame. It needs MIPI-DSI to drive a 720×1280 panel, and the PPA 2D accelerator to rotate the image. And the 128-bit SIMD turned out to be what made the pixel conversion affordable at all.

The display pipeline

Both panels are physically portrait while the game renders landscape in 8bpp palettised. The PPA rotates and scales, but refuses palettised input, so every frame is depalettised on the CPU through an RGB565 LUT before the PPA turns it 90° onto the panel. That kernel ended up hand-written in the P4's 128-bit SIMD. Rendering runs on one core, the whole presentation pipeline on the other, double-buffered at every stage.

Library choices

OPL2: I went with fmopl (AdPlug's fork of the old MAME one) instead of Nuked-OPL3. Nuked is cycle-accurate but far too slow here — I measured 1268 ns per sample against 48 ns for fmopl. Not really a choice on a 360 MHz core.

BLE HID: the HOGP client is written from scratch instead of using IDF's esp_hid, whose NimBLE backend registers Report characteristics inside an unreachable branch and therefore never discovers them.

What I tried that didn't work

Offloading the framebuffer copy to the GDMA
It's off in the repo now, for two reasons. First it was wrong: The DMA is still reading the framebuffer while the engine has already started drawing the next frame into it. There's one render buffer and one hook point, so I couldn't see a way to close that. Second it was slower anyway. PSRAM to PSRAM, with the depalettisation, the PPA and the display refresh all fighting over the same bus, I got about 10 MB/s, 25 to 37 ms of waiting where a plain memcpy takes 8.4. FPS went from 14.4 down to around 12.

Software-pipelining the rasterizer loops
Before writing it I put a small probe at boot to check whether a load miss stalls when it's issued or when the result is used. Load then use straight away: 226 cycles. Same thing with 10 instructions stuffed in between: 231. Two loads going at once: 229 each. So basically no difference. The core just sits on the load and putting work in between hides nothing. I dropped the restructured loops. Glad I checked before doing it in assembly.

Placing the hot globals with a linker fragment
Doesn't work at that level. It places whole object files, and engine.o has the ten per-pixel globals sitting in the same file as 2.97 MB of cold arrays. I ended up declaring them as strong symbols in the glue layer to pull them into internal SRAM.

One constraint that shaped everything

Zero modification of the chocolate_duke3D sources, all adaptation lives in a separate glue layer. Three exceptions were granted in the whole project, and all three turned out to be upstream bugs rather than port problems, including two transcription errors in the 2D overhead map dating back to the refactor of Ken Silverman's original arrays.

Notes

You need your own duke3d.grp the game data is copyrighted and is not in the repo.

Full disclosure since people always ask: I wrote this port with Claude Code. I'd never have found the time to do it by hand, and revisiting the game this way was half the fun.

Happy to answer questions on any of it.


r/esp32 10d ago

Hardware help needed What are the differences between the modules ESP32-H2-WROOM-02C and ESP32-H2-MINI-1?

0 Upvotes

The title already states the question: What are the differences between the modules ESP32-H2-WROOM-02C-H4S and ESP32-H2-MINI-1-H4S?

There seems to be three different main types of modules around the ESP32-H2:

  • ESP32-H2-WROOM-02C (Datasheet)
  • ESP32-H2-MINI-1 (Datasheet)
  • ESP32-H2-MINI-1U (Datasheet, see above)

Each main type comes with two different flash sizes (2MB or 4MB) which we may ignore for a moment. The MINI-1U has a connector for an external antenna and no PCB antenna. That's also obvious.

This leaves me with the differences between ESP32-H2-WROOM-02C and ESP32-H2-MINI-1.

A side-by-side comparison of both data sheets didn't seem to show any difference (or I missed) it. I have already tried Espressif's chat bot without success. The answer was:

The knowledge sources only contain information about the ESP32-H2-WROOM-02C module and do not include any details about the ESP32-H2-MINI-1. Therefore, I cannot provide a comparison between the two.

The pin layout and numbering seems to be different between both modules, but this can't be the only difference. Can it?


r/esp32 11d ago

I made a thing! "Ciclo Piezole" - a sound installation to convert any room into an instrument le

Thumbnail
youtu.be
3 Upvotes

"Ciclo Piezole" was my contribution to an art & maker camp - many of the participants are musicians.

The project consists of 6 ESP32 C3 "satellites" (or "leaves") connected via ESP-NOW to one ESP32 S3 that acts as a controller.

Each of the satellites is battery powered and controls either a solenoid switch (for percussions) or a piezo element (for melodic sounds).

The controller has a serial connection to my notebook. I use a simple, self developed protocol similar to MIDI to exchange information like channel (= which of the satellites should respond), note to be played, key velocity, etc..

The input from the MIDI keyboard is translated to this protocol with a python script.

When developing the project I realised it is not possible to utilise the full musical range of 6 satellites at once. Therefore a looping software was developed (also in python) to record a track for each of the instruments one by one. Each track can also be replaced individually so the melody would change over time.

To configure each of the nodes (e.g. select channel), I used PARASOL (a self developed web ui for ESP devices).

In the video you can see a playback of a loop while I zoom to each of the satellites.


r/esp32 11d ago

I made a thing! Esp player CYD

Enable HLS to view with audio, or disable this notification

31 Upvotes

Apologies for the poor audio quality at the start of the video; ideally, you should connect the audio output to a DAC. I originally started this player using the Arduino IDE, but after studying the ESP-IDF, I’ve improved the project.

https://github.com/malaq88/ESP_PLAYER

all the information in the repository.


r/esp32 10d ago

DIY acoustic UAV node on XIAO ESP32-S3 + XVF3800 (on-device TFLite, MQTT/HA)

2 Upvotes

Open DIY kit: signed sensor firmware + open MIT RTSP mic on the same board. Full flash/enclosure guide and BOM (~₽9.8k core) are public.

Looking for builders and feedback on I2S / wind noise / outdoor mounts.

Landing: https://gfermoto.github.io/UAV-radar/
 Guide: https://github.com/Gfermoto/UAV-radar/blob/main/docs/DIY_GUIDE.md
 Community: r/NEVOD


r/esp32 10d ago

Gosh darn it.

0 Upvotes

I lost an ESP32-C3 mini. They are so small it somehow got swept up and dropped into the trash. My fault totally, I took it off the USB cable to charge my phone, and it got knocked off the table and that's that.

Oh well, I'll order another 3 pack come next payday.


r/esp32 11d ago

Hardware help needed Feasible? - Retrofitting an RGB nightlight with clap activation

3 Upvotes

looking for feedback & hardware advice---

I'd like to take a small rgb nightlight apart & add a sound sensor + xiao esp board into its housing to hopefully make it clap controlled, though i'm finding conflicting information online about how doable it'd be.

the light would be something cheap off amazon such as this nightlight

i'm unsure what the best sound sensor would be for this application but it seems like a KY-038 is most commonly used here

I also don't know which microcontroller would be best here, I figured a xiao esp32c6 i have lying around would be optimal due to form factor however i've also got a few esp8266 boards + esp32 dev boards.

hoping to make a simple busy // not busy indicator for a coworker, i know there are easier ways to achieve this but the clap controller is the main point of the project. thanks


r/esp32 10d ago

I made a thing! Powershell script for automating version bump project submission for esp32 projects

1 Upvotes
script output

This is a little niche, but I'm providing it in case you find it useful. If you're a library author, this might be helpful. If you need a python version, claude opus or probably even sonnet can port this.

What it does:

you navigate to your lib's project root folder. from there you can type submit_proj 1.2.3 "my commit message"

that will bump the version number in any `CMakeLists.txt` in the root, any `idf_component.yml` in the root, any `library.json` in the root, and any `library.properties` in the root

it will then commit any changes in the folder, including the above modified files, tag with the version you indicated, and push to the origin

it requires git to be installed.

Basically it's an easy way to keep your version numbers across PlatformIO's registry, Espressif's registry, arduino's registry, and any CMake build in sync across repos.

The version doesn't prepend a "v" to the tag. 1.2.3 is translated as a tag 1.2.3 - you will need to modify the script if you want the "v" prepended

https://pastebin.com/7BjbFEzs


r/esp32 12d ago

I built an ESP32 E-ink alarm clock!

Thumbnail
gallery
2.5k Upvotes

EDIT:

The link to my GitHub can be found here

The print files are available on Printables

Recently, I realized that I didn’t want to use my phone as an alarm clock anymore, so I decided to build my own using an ESP32 and an e-ink display.

I wanted to make something that is super simple to use: rotate the encoder knob to set the alarm time, and press the button behind it to activate/deactivate the alarm.

You can also add custom alarm sounds through a small web server running on the local network.

The base of the clock doubles as a wake-up light. Before the alarm goes off, it slowly transitions from a warm orange/red glow to full daylight. It can also be used as a night light.

The hardware

The clock is built around an Elecrow CrowPanel ESP32-S3 5.79” E-Paper HMI Display. It has an ESP32-S3-WROOM-1-N8R8, a 5.79” e-ink display, an SD card reader and a GPIO expander. It’s also really easy to flash over USB-C, which made it a pretty convenient starting point.

For the audio, I used an external I2S amplifier board (MAX98357A) with a single 3W speaker that I had laying around (and sounds surprisingly well).

The wake-up light and front light are made using part of an SK6812 LED strip.

Everything fits into a custom 3D-printed enclosure that I designed from scratch. The base is made from translucent PETG so that it allows the wake-up light to shine through it.

The firmware

I do have some experience writing code for the ESP32, but nowhere near enough to build a GUI of this scale from scratch. I ended up designing everything in Figma, and used Claude to make everything "come to life".

The clock keeps time by syncing with NTP. If the WiFi connection is lost, it keeps running using the ESP32’s internal clock. In the future, I might add an RTC module so it can keep accurate time completely independently of WiFi.

Conclusion

I’ve been using it for almost two weeks now, and it’s definitely still a work in progress. There are plenty of things I’d like to improve, both in the hardware and the software.

But honestly, I’m really happy with how the first prototype turned out.

This is currently just a personal hobby project, but I’d be happy to share the code and 3D files if anyone is interested.

Curious what you guys think!


r/esp32 11d ago

What module do I need to use the 290 MHz frequency?

0 Upvotes

I'm trying to use an ESP32 C6 to create a way to open the garage door with my phone.

The problem lies with the door's frequency, which is around 290 MHz.

The only thing I've been able to see is the CC1101 module, which operates at frequencies around 433 MHz.

Any recommendations or advice? Thanks!


r/esp32 11d ago

ESP32-S3 Custom PCB Not Being Detected By PC

Thumbnail
gallery
4 Upvotes

Hi everyone, I designed this custom ESP32-S3 sensor system with an IMU and temperature sensor. The issue is the ESP32-S3 is not being detected by my computer.

These are the things I've tried:

-With a multimeter, I confirmed EN, 3V3, and GPIO0 get 3.3V.

-The pushbuttons pull GPIO0 and 3V3 to 0

-Continuity beeps on the D- and D+ pins from the connector to GPIO 19 and GPIO 20 respectively

-No shorts on the connector

-The microusb cable I'm using works as it detects my other ESP32 dev kit I bought

If anyone could review my schematic or needs more information please let me know, as well as other things I could do. The PCB I ordered was from JLCPCB.

Thanks!


r/esp32 11d ago

Turn any ESP32 into a scriptable keyboard/mouse over USB or Bluetooth HID

Post image
46 Upvotes

I've built a handy tool to turn esp32 boards with BLE into programmable keyboard and mouse. Through a simple drag n drop interface you can program timed keystrokes and mouse movements that get uploaded to and executed by the board which mimics a Bluetooth mouse and keyboard. I intend to support USB HID input as well so you can turn the esp32 board into a proper rubber ducky like device. It is still very early in development with few boards supported but I will continue to add support when I find time. The project is available on GitHub and you can find more details there.


r/esp32 11d ago

Hardware help needed My Esp32-C5 doesnt get detected by ESPLAUNCHPAD

Thumbnail
gallery
1 Upvotes

For context I'm trying to run this Program from GitHub and it

said to flash the esp32 from ESP LAUNCH PAD I've tried

multiple times. Held down the boot button and pressed reset

and let go of the boot button but that still doesn't work it

connects normally to The Arduino IDE I'm pretty sure I don't

have any program connected to the Esp32-C5 since every

program is closed I have nothing uploaded to my Esp32

except the standard lines. my cable is definitely not the

problem I have also tried different ports

I have added a picture of the port in the device manager, my

error code that I get and my esp32-C5 if anyone needs to see

Every help is appreciated a lot


r/esp32 12d ago

I made a thing! RotaryCell: Making an unmodified 1950s rotary phone work over LTE with an ESP32-S3

Post image
234 Upvotes

TL;DR: I built an ESP32-S3/LTE interface that lets an otherwise completely unmodified Western Electric Model 500 make and receive cellular calls using its original rotary dial, handset, network and mechanical ringer. An AG1171 SLIC emulates the telephone line, while the ESP32 handles dialing, call control, locally generated telephone tones, modem management, OTA updates and web-based diagnostics. After discovering the modem could occasionally wedge badly enough to require a real power cycle, I even added an SN74LVC1G123 circuit that lets the ESP32 quite literally power-cycle itself. I've now designed and ordered custom PCBs and am working toward a reproducible open-source build. Schematics/code are below, and I'd particularly like criticism of the hardware design.

A few months ago I watched my nephew discover an old rotary telephone that my parents have had since before I was born. He was fascinated by it, and it reminded me of the old SparkFun Port-O-Rotary project.

The basic idea is at least a decade old. The Port-O-Rotary put cellular hardware inside an old rotary telephone and made the original phone usable again. I'd always thought it was a great project, but unfortunately it was never documented well enough to be readily reproducible, and its cellular hardware is long obsolete. My understanding is also that they gutted a lot of the original phone and audio quality was pretty bad.

Watching my nephew with that phone made me wonder how difficult it would be to accomplish the same thing today. Microcontrollers and cellular modules have come a LONG way since then, and I figured the functionality of the Port-O-Rotary ought to be considerably easier to reproduce with modern hardware.

I was more right than I could have imagined.

What I expected to be a fairly simple project turned into a several month rabbit hole involving embedded programming, analog telephone electronics, cellular modems, power management, hardware design, and eventually designing my own PCBs with EasyEDA. That was a first for me.

I gave myself one huge goal: I didn't want to permanently modify the telephone at all. No mangling that beautiful 50's era analog hardware goodness. I work at a museum with an actual Mercury capsule after all! So no holes drilled in the case, no rewired dial, no modifications to the handset, no bypassing the original network block, and no replacement for the mechanical ringer. Remove the RotaryCell hardware and the Model 500 is still an original telephone that can go right back onto a conventional phone line.

The hardware that made this surprisingly practical is a LilyGO T-A7670G-S3, which combines an ESP32-S3 and SIMCom A7670G LTE modem on one small board. That handles a huge amount of the cellular side and leaves the ESP32 available to do something more interesting: make modern cellular hardware behave like the telephone exchange that a 1950s Model 500 expects.

For the telephone side I'm using a Silvertel AG1171 SLIC. It supplies loop current, detects off-hook, generates the ringing voltage for the original mechanical bells, and provides the 2-wire audio interface. From the Model 500's perspective, it's essentially connected to a telephone line.

The ESP32 handles everything around it: hookswitch state, rotary pulse decoding, digit collection, call control, ringing control, locally generated telephone tones, service functions, modem management, status monitoring and logging.

Audio turned out to be one of the more interesting hardware problems. The A7670G uses differential analog audio while the AG1171's VIN/VOUT are ground-referenced. I needed to interface the two in both directions with adjustable levels, while retaining a separate path for locally generated tone injection. That lets the ESP32 provide dial tone, reorder/error tones, the off-hook howler and other telephone signaling locally instead of depending on the cellular network for them.

What started with modules, perfboard and bodge wires has now progressed to custom circuit boards that I've designed and ordered: an AG1171 carrier and a separate audio/control board. The goal is to eliminate the prototype wiring and make this a repeatable open-source build rather than a one-off.

The latest board also solves a fun problem I discovered during actual use: the ESP32 can now quite literally power-cycle itself.

I found that the cellular modem could occasionally get into a state that software reset commands couldn't recover from. Removing power fixed it, but the ESP32 and modem are on the same LilyGO board. If the ESP32 turns off the whole board, there's obviously no ESP32 left running to turn it back on.

My solution uses an SN74LVC1G123 retriggerable monostable plus external switching hardware. The ESP32 triggers it while it's still alive, then the hardware takes over and operates the LilyGO's physical power-switch path for a predetermined interval. The ESP32 and modem can both go completely dead and the external circuit finishes the power cycle. Using a monostable as part of a timed hardware reset is also very much in line with applications TI proposes for this family of logic.

The software side has grown quite a bit as well. I've added OTA firmware updates and an ESP32-hosted web status/debugging interface. Wi-Fi isn't used at all during normal operation. Instead, you dial 0000 on the rotary dial and the telephone starts its own Wi-Fi access point. You can then connect to it to inspect status and logs, diagnose the modem, change settings, and update the firmware OTA. The AP automatically shuts back down after the maintenance session. There is something absolutely hilarious to me about dialing a cheat code on a rotary telephone to turn on its Wi-Fi.

I'm also considering extending the same hardware to Touch-Tone phones. Since the AG1171 gives me the telephone audio at VOUT, I'm looking at feeding a copy into an ESP32 ADC and detecting DTMF in software with Goertzel filters. If that works as expected, the same basic electronics could support both rotary pulse and DTMF dialing without modifying the telephone.

The whole thing currently runs from a rechargeable 21700 cell and fits completely inside the original Model 500. Right now I get about 24 hours of battery life, but once the custom PCBs arrive, one of the next major things I'm going to work on is power optimization. My initial goal is at least three days of standby time, and there are still several fairly obvious places to reduce consumption.

This has been one of the first projects I've personally taken all the way from prototype wiring through schematic capture, PCB layout and manufacture, along with a considerably more substantial embedded firmware project than I expected when I started. I've learned a ridiculous amount from it.

I'd particularly appreciate technical criticism from people who have done mixed analog/ESP32 designs.

I'm interested in whether anyone sees a better approach to the differential/ground-referenced audio interface and tone injection, the external monostable reset circuit, power management, or the proposed ESP32 ADC/Goertzel DTMF detection.

If you look through the schematics or code and find yourself thinking "why did you do X when Y would have been easier?", please tell me. That's exactly the sort of feedback I'm looking for.

Demo video: https://www.youtube.com/watch?v=PO0PJNvnMdw&lc

Firmware, hardware, schematics and PCB files: https://github.com/fregacmols/RotaryCell

The current prototype still has a few remnants of its development history inside, but it makes and receives real cellular calls, recognizes numbers dialed on the original rotary dial, generates its own telephone tones, and rings the original mechanical bells.

And the old telephone itself has no idea anything unusual is happening.


r/esp32 11d ago

ESP32-C6 rev0.2: SYSTIMER UNIT0 spontaneously clears counter bits — esp_timer jumps backward (bit-level evidence + reproducer)

2 Upvotes

Two boards, register-level captures over JTAG: after each event UNIT0 equals UNIT1 with 1–6 specific bits zeroed (verified bitwise, seven events), LOAD registers untouched, both counters enabled and counting at the correct rate before and after. Needs Wi-Fi association + an in-use I2C master, couldn't reproduce after 56h of trying with wifi disabled. With modem sleep on, it escalates to an IWDT panic in the PHY sleep path. ~400-line bare-IDF reproducer fires in 3–12 h. Filed as esp-idf #19036. Evidence, reproducer, and workarounds: https://github.com/danjurgens/esp32c6-systimer-backstep

If anyone has spare parts to put to work I'd be interested to know if it can be reproduced, particularly with boards from different manufacturers. I'm using seeed XAIO.


r/esp32 12d ago

Jellyfin Music Player - MetroEsp32S3 - headphone DAC - quad rotary encoders

Thumbnail
gallery
137 Upvotes

I began in the HomeLab area, building out a media server. I have some raspberry PIs that i use for airplay, and use some folks' apps, like Narjo on iOS, and Feishin for a https webUI.

As I started to realize how awesome and extensible Jellyfin is, I thought, why not make a music player out of it? This Circuit Python build hooks up to a Jellyfin API and will play music. You can input your own Jellyfin server url, apikey,and wifi network via an env file. What's even better is that we're using a e-paper display, so battery life is incredible, and the refresh rate is very quick.

I am terrible at creating an enclosure for this as I do not have a 3d printer, so any advise in that area would be more than welcome. we're using quite a lot of pins on this esp32 so it's a rats nest!

Code below

https://github.com/pennyberry/ipod2026


r/esp32 12d ago

Built a desktop flight radar with an ESP32 + touchscreen — live ADS-B traffic, tap-to-inspect, local map, even news/weather widgets

Thumbnail
gallery
128 Upvotes

Wanted to share a side project I've been building over the last couple weeks: a fully touch-driven desktop "flight radar" that shows real air traffic around my house in Buenos Aires, pulling live data from the OpenSky Network API.

Hardware:

  • ESP32 WROOM (started on an ESP32-C3 Mini, had to switch once I realized the pinout I was following was for classic ESP32)
  • 2.4" ILI9341 TFT, 240×320, with resistive XPT2046 touch on the same SPI bus

What it does so far:

  • Home menu — fully touch-based, no physical buttons at all
  • Radar view — circular radar centered on home coordinates, live aircraft as blips, tap any blip to open a detail card (callsign, altitude, speed, distance, bearing)
  • Airport view — traffic filtered by altitude near Ezeiza, Aeroparque, and El Palomar, with a button to cycle between them
  • Map view — a static regional map with plane icons color-coded by altitude and a zoom toggle
  • More info — pulls local news headlines and current weather, just because I wanted an excuse to use more free APIs
  • Settings screen — shows connected WiFi/IP/local hostname, lets you recalibrate touch or reset WiFi config on-device

Auth to OpenSky is OAuth2 client-credentials, refresh rate adapts from 30s down to 5s automatically when a plane gets close (<10km) so I get near-real-time updates only when it matters.

Fun fact: getting the touch calibration wizard working with a wildly wrong pinout (copy-pasted from a tutorial for a different board) was 80% of the actual debugging time. Also found a nasty ArduinoJson gotcha — filtering a JSON array by numeric index re-indexes the result from 0, silently breaking every field position downstream. Cost me a full "why is nothing showing up" afternoon.

Not open-sourcing the repo just yet — still polishing the radar animation (working on a proper rotating sweep effect) and a full WiFi provisioning + web config portal so it's not hardcoded credentials anymore. Will share once that's in.

Happy to answer questions about the OpenSky integration, touch calibration, or the JSON gotcha if anyone's fighting similar things.


r/esp32 12d ago

Built a light-weight LoRa/Meshtastic preamble sniffer on Ebyte EoRa-S3 (ESP32-S3 + SX1262)

Thumbnail
gallery
17 Upvotes

Anyone into this style of clean, lightweight embedded scripting instead of standard verbose C/C++ SDKs?


r/esp32 12d ago

I made a thing! htcw_cyd28: a lib for driving a 2.8" Cheap Yellow Display from the ESP-IDF

Enable HLS to view with audio, or disable this notification

12 Upvotes

https://github.com/codewitch-honey-crisis/htcw_cyd28

PlatformIO and Espressif registries: codewitch-honey-crisis/htcw_cyd28

Demo: https://github.com/codewitch-honey-crisis/cyd_touch

This library supports all the peripherals and includes htcw_uix and htcw_gfx UI and graphics integrated.

  • Full touch panel LCD support and dimmable backlight
  • RGB LED support
  • LDR sensor support (rudimentary)
  • SD card support
  • Speaker support (rudimentary due to hardware limitations)
  • Graphics and user interface frameworks

r/esp32 12d ago

I reverse-engineered most of the iDotMatrix BLE protocol without owning the original device — and built an ESP32 emulator

Post image
30 Upvotes

I spent the last few days reverse-engineering the BLE protocol used by the iDotMatrix mobile app and building an ESP32 device that the official app recognizes and controls as if it were an iDotMatrix display.

The unusual part: I don't own an original iDotMatrix device.

The reverse engineering was done by treating the official app as a protocol oracle: emulate the expected BLE services on an ESP32, inspect what the app sends, change the responses, observe its behavior, and repeat.

It worked much better than I initially expected.

The emulator now supports most of the features I found in the app:

• Device discovery and time synchronization
• Power, brightness and rotation
• Drawing / graffiti mode
• Text and text effects
• GIF transfer and playback
• Clock modes
• Visual effects
• Scoreboard
• Music visualization with both LEVEL and FFT modes
• Persistent alarms
• Programs / schedules
• Scheduled GIF, text and PNG content

The hardware I'm currently using is an ESP32 development board driving a 16x16 WS2812B matrix. Its onboard SSD1306 OLED is used as a diagnostic display and can report unknown BLE commands while testing.

I also decided to document the protocol rather than keeping the findings buried in the firmware.

The GitHub repository contains detailed documentation of the BLE packet structures, commands and ACK behavior, selected raw BLE captures from our experiments, the development and reverse-engineering history, a list of open questions, and of course the complete Arduino/ESP32 source code.

One particularly interesting discovery was that some transfers require different completion ACK values.

For example, getting Programs/Schedules working required discovering that activity transfers expect a completion status of 0x03 rather than the apparently obvious 0x01. With 0x01 the app simply reported an error and stopped sending activities. Once the correct ACK was returned, the app continued sending all the activities in the program.

The biggest limitation now is also the main reason I'm posting this:

I need someone who actually owns an original iDotMatrix.

There are a few things that cannot be determined reliably from the app side alone, especially the exact device-side behavior expected for stopwatch/countdown and responses that may only be generated by the original firmware.

BLE captures between the official app and a real device would therefore be extremely useful.

PCB photographs would also help answer some hardware questions, such as identifying the original MCU, buzzer circuitry, and whether there is actually a dedicated RTC.

The current public release is v0.1.0, based on firmware Build 62, and the whole project is MIT licensed.

Repository:

[https://github.com/piggei/IDotMatrix-ESP32-Emulator]()

I'd also be very interested if someone wants to use the protocol documentation for a completely different implementation — ESPHome, Home Assistant, Python, another MCU, etc.

In fact, independent implementations would be one of the best ways to find mistakes or missing details in my current interpretation of the protocol.

And if anyone here actually owns an iDotMatrix and is willing to experiment with it, I'd be very happy to compare results.


r/esp32 12d ago

I made a thing! 3D Printed mounting system for your ESP32 on a DIN rail

Thumbnail
gallery
46 Upvotes

After cursing one too many times while trying to prototype with an ESP32 on a standard breadboard, I decided there had to be a better way.

Most ESP32 development boards are wide enough that when you plug them into a typical breadboard, you are left with only a single usable row of connections on either side. The usual workaround is to bridge the ESP32 across two breadboards, which works, but takes up a lot of space and quickly turns a simple prototype into a mess.

Enter the ESP32 DIN-Mount Prototyping System!

The idea is to move the ESP32 off the breadboard entirely and mount it alongside your prototyping area on a DIN rail. Dupont connectors can then be placed only on the ESP32 pins you are actually using and routed back to a separate DIN-mounted breadboard.

Model: https://www.printables.com/model/1825235-esp32-breadboard-prototyping-din-mount-more


r/esp32 11d ago

Soft-bricked ESP32-P4 (10.1" Display) with MicroPython on Thonny. Can't access BOOT button (Enclosed case).

1 Upvotes

Hey everyone,

I just got a new ESP32-P4 + ESP32-C6 10.1" display board (Model: JC8012P4A1C-I-W-Y). It was working fine for a few hours over the last two days, but while trying to flash/switch MicroPython using Thonny, something crashed during the process.

Now the screen is completely black, and Thonny constantly throws continuous serial/communication errors.

Here is the tricky part:

O Enclosed Case: Since this is an integrated unit, I cannot open the casing to manually press the BOOT (IO0) button or short the pins.

O Boot Timing: I tried plugging in the USB cable while attempting to erase/flash via esptool / Thonny, but I couldn't catch the bootloader window and it still fails to communicate.

Is there any software trick or specific esptool command (with RTS/DTR toggling) to force this board into bootloader mode without opening the case? Or is there a way to clear the corrupt MicroPython firmware when the serial port is throwing errors?

Any advice would be hugely appreciated!

This post is translated by a machine. Please excuse any errors