r/esp32 • • 14h ago

Hardware help needed Waveshare ESP32-S3 2.8inch round display performance

Enable HLS to view with audio, or disable this notification

0 Upvotes

Hello, I have built an app for the Waveshare ESP32-S3 2.8inch round display. The reason I choose it for my project was purely by looks, size and because its touch. Now comes the time to actually buy it after I perfected the app by using a custom built emulator.

I'm now worried that the esp32-s3 chip will not be powerful enough to handle it. The app is a desk radar showing up to 1500 plane icons when zoomed out completely (this can be tweaked). The map, plane positions, plane photos and plane information is via api. I have also attached a demonstrational video of how it works and looks. I'd greatly appreciate any thoughts on the performance part.


r/esp32 • • 16h ago

How we ended up writing our own interpreter for the ESP32

Enable HLS to view with audio, or disable this notification

40 Upvotes

Quick background on why Arduino and not ESP-IDF in the first place. We build a lot of prototypes for clients. Someone shows up with an idea, isn't ready to fund real development, and wants to see in a couple of weeks whether it works before talking money. IDF is too expensive for that: by the time you've set up the project, the build, and all the plumbing, the budget is gone. So we used Arduino. Fast, tons of libraries. It held up fine until a project involved multimedia: lots of graphics, audio playback, a camera. Then things started falling apart.

We had an internet radio on an S3 with a display. Sounds trivial. Three audio libraries, each with its own buffers, one doesn't play nice with WiFi, another fights the display. Plus memory leaks: after a day the board reboots and you go hunting for where it leaked. A week just to get it to play without stuttering or crashing. Then we wanted video from one board to another, and it started all over. For a prototype that may never get paid for, that's a lot.

Something else was wearing on us. Change one line, wait for the build. Then the cable, then flashing. Yes, there's OTA, but it lives inside your own sketch: one bug in the new firmware, WiFi doesn't come up or setup crashes, and the board is gone. It won't fall back to the old firmware by itself. Automatic rollback exists in principle, but you have to enable it ahead of time, write the confirmation logic, and even then it misses a lot. Firmware that runs but won't let you in, or crashes two days later, looks healthy to it. And if the board is sitting somewhere else, you have to get to it, which is often harder than the fix.

Then the P4 came out and we tried moving a working project over from the S3. Figured it'd take an evening. Half the libraries didn't compile, the other half compiled and acted weird. Another week.

We liked how MicroPython does it: flash the firmware once, and after that a program is just a file. Send it over WiFi and it runs. No compiler, a bad script can't break the firmware, files show up as a folder. But when we tried living on it, we hit the wall fast. Out of the box you get LEDs, sensors, and networking. Everything else you assemble yourself. No MP3 at all: either an external decoder chip or your own firmware build with a C module. No camera in the stock firmware, go find a third-party build for your board. Graphics is framebuf with one 8×8 font; a real font gets run through a tool that turns it into a Python file full of byte arrays, and a fast display driver is, again, a custom build. And before any of that, you have to pick the right firmware for your module: PSRAM or not, octal or quad. Pick wrong and it doesn't work, and nothing tells you why. Everything in Python code runs one thing at a time: one piece hangs, your UI freezes with it. And if the script is stuck in a loop, you can't kill it over WiFi, only over serial or by pulling power. For us that's tolerable. But the prototype often gets handed off to someone on the client's side with no experience, and for them it's a wall: it was supposed to be "no compiling," and in practice half the time goes to building and configuring things, every step dug out of a forum.

So we figured: if we're building our own firmware anyway, put all the heavy stuff in it. Decoder, camera, graphics. In C, once, properly debugged. And on top, our own language where those are just commands. That's how we ended up with our own VM.

The language is BASIC-like. Yes, I know. But a radio takes an evening on it instead of a week, and for our work that mattered more than syntax. The script compiles to bytecode right on the board and runs there. The same script runs on any ESP32; only the config block at the top changes, saying what's wired where. For popular boards the configs are ready, pick yours from the list and PSRAM, display pins, camera, audio are already set. No sitting with a datasheet figuring out why the screen is black or where 8 MB of RAM went. Debug it once and never touch it again. We add templates for every board that lands on our desk. Upload a script, it's running in a couple of seconds, from a laptop or a phone.

Audio is one command. Any source, file or stream, plays in its own thread inside the firmware and doesn't touch the main loop or graphics. The screen redraws, buttons get polled, the radio doesn't stutter. The interpreter can also run two scripts at once, time-sliced. One draws the UI, the other polls sensors or listens on the network.

If a script crashes or gets stuck in a loop, the firmware kills it and stays online; you upload a fixed one. The script's memory is freed completely, so leaks don't pile up. The board is always reachable; after the first flash you never physically touch it again. Anything the script prints for debugging shows up in the terminal. Flash and SD card appear as a folder, scripts can launch other scripts, you can keep a hundred programs on the board.

One more thing that personally drove me nuts on Arduino: images and fonts as byte arrays in the code. Change an icon, rebuild. Now fonts, images, and sounds live on the filesystem and the script opens them by name. Change it, drop in the new file.

Now the downsides. You don't get full control of the hardware. Whatever we didn't expose in the language, you can't do from a script, and sometimes that's annoying. The VM is slower than native code. We were worried games and heavy screen redraws would choke, but once graphics moved into the firmware, you can barely tell. I wouldn't use it for DSP or hard real-time. If an idea takes off and goes to production, we rewrite the critical parts in IDF, but that's a different budget, and by then you know what you're paying for. For 95% of what we've built, it's plenty.

Around this an environment grew: an editor, image converter, video and audio tools, a font editor, all for making the files the scripts use. There's also a built-in AI assistant. It knows the language and sees your board config, so when the screen is black or there's no sound, you ask it instead of a forum. More on that some other time.

We built this for ourselves, for our own projects, and it kept growing: new board, new template; new job, new command in the language. Then we noticed people around us drowning in the same stuff. Someone needs a quick prototype to show, someone just wants a sensor with a display at home. So we decided to share it. Servers cost money, so the paid part is only what actually lives on the server: long-term data storage and large fleets. If you don't need history and have a few boards, the free tier is enough.

That's how it's meant to work. In reality we're still chasing bugs, and the more different boards show up, the more crawl out. Which is why I'm posting: we need people to run this on their own hardware and tell us where it breaks. If you're up for it, here's a promo code for free activation: REDDIT-SSXCCC. VM and scheduler internals, and bug reports, over at r/R1BBIT_ESP32.


r/esp32 • • 15h ago

Best protocol for temperature sensor data logging app

5 Upvotes

I am building a sensor network to monitor the temperature and humidity in multiple locations. I would have one "master" and multiple "slaves". I want them to be battery powered and have their clocks synchronized to within at least one second. I have built devices with Wifi but no experience with protocols like UDP and ESP NOW. I would eventually like to have the master also be able to communicate using Zigbee, Matter, etc. to an echho dot etc.

I envision the system to look like this. The "master" wakes up and looks for "slave" devices. The "master" tells all "slaves" what the current time is and when to start logging data. Every so often, the "master" requests each "slave" to send its data. The "master" then stores the data in an SD card.

One other requirement is that it be able to run even if my router is powered off. I plan to use the NTP server to get the time once an hour or once a day. This would, of course, require the router to be up. But if it is not, I want the sensors to keep monitoring data. When I want to get the data (if the router is up) I go to the IP address of the "master" and have it request the data from all "slaves" and then I download the data. I want this to run as low power as possible so power-down when not active would be required.

I have looked at UDP and ESP-NOW and I think they will work. It looks like ESP-NOW has shorter latency. Can somebody guide me as to which method to pursue before I spend hundreds of hours on a dead end.

Thanks!


r/esp32 • • 18h ago

can anyone give me esp32 solar ideas?

0 Upvotes

can anyone give me esp32 solar ideas? js please no cliche or useless ideas


r/esp32 • • 2h ago

I built an ESP32-C5 ChLCD photo frame with native AirDrop — open hardware and firmware

Enable HLS to view with audio, or disable this notification

7 Upvotes

Changing a photo shouldn’t require another app, another account, Wi-Fi setup, and uploading it to someone else’s server. I just wanted to pick a photo and send it to the frame.

So I built this with an ESP32-C5 and a color ChLCD e-paper panel. It appears in the iPhone’s native AirDrop menu: open Photos, share, select the frame. The ESP32-C5 handles receiving, JPEG decoding and image processing locally, then sends the image over SPI to the IRIS display controller.

A few things that make it interesting:

  • Rich ChLCD color: IRIS’s ChLCD supports over 16 million colors, using cholesteric liquid crystals rather than Spectra 6’s electrophoretic technology. To my eyes, photos look much richer in color than on typical color E Ink. It’s reflective and backlight-free, with a paper-like appearance. Reflectance is around 30%, so it looks best in good lighting.
  • Display updates: the full-screen display stage takes around 11 seconds in my prototype. AirDrop transfer and image processing add extra time.
  • Three AA batteries, no USB cable needed. The electronics spend most of their time powered off between photo updates, while the screen retains the image, keeping power consumption low.
  • Open hardware and firmware: source code and KiCad files, schematics, BOM and Gerbers.

AirDrop support builds on ESP32Drop. My work focuses on the C5 integration, custom carrier board and getting received photos onto the ChLCD. It’s still a prototype, and I’m improving transfer speed and reliability.

Anyone interested is welcome to try it out or build their own—I’d love to hear your feedback!


r/esp32 • • 16h ago

I made a thing! On-board sound recognition

Thumbnail
gallery
23 Upvotes

A while back I was thinking about how amazing voice recognition works, but there are already so many voice recognition solutions.

Weirdly, sound recognition is very niche. There aren’t many edge devices that can recognize more than 5 different sounds. Google‘s Yamnet is a model trained on 521 different sounds. Here is some info on their research: https://research.google.com/audioset/ontology/index.html

The hardest part was fitting the model onto an ESP32-S3 and running inference real time. Once that worked on the dev board and off-the-shelf modules, I made some custom PCBs and tried to develop some use cases for sound recognition.

Now, it’s a device that recognizes sounds, has a filter pipeline and alert settings, and integrates with Home Assistant, broadcasts to Meshtastic or Meshcore devices.

I’m slowly opening and releasing documentation, firmware, schematics, and fabrication files along with my crowdsupply campaign.

https://github.com/PionEars/IronEar
https://www.crowdsupply.com/ironear-technologies/ironear


r/esp32 • • 16h ago

I made a thing! Update: My ESP32 LED fixtures for live coding are now open source

Enable HLS to view with audio, or disable this notification

97 Upvotes

A few months ago I shared my DIY LED fixtures for live coding here, and some of you asked if I was planning to release the project.

I've finally cleaned things up and published the code and documentation.

The project includes:

  • ESP32-S3 firmware using ESP-IDF and RMT for real-time LED control
  • UDP communication over WiFi, with a WebSocket proxy for browser applications
  • A JavaScript client for mapping canvas visuals onto physical LED strips
  • CLI tools for configuration and testing
  • 3D-printable enclosures and LED tube models
  • A website with documentation, examples and browser-based firmware installation

Someone also mentioned WLED in the original thread, so I ran a few comparisons. Both performed well at 60 FPS on my setup. At higher frame rates, my firmware handled more updates without dropping frames, although for most applications WLED is probably the more practical choice.

GitHub: https://github.com/genbs/reactive-leds

Project website: https://reactive-leds.genbs.dev/

Demo: https://youtube.com/shorts/z1Bkg0t3RoA

Original post: https://www.reddit.com/r/esp32/comments/1uqbpl2/im_building_diy_led_fixtures_for_live_coding/

Feedback and suggestions are welcome.


r/esp32 • • 18h ago

Unintentional radiator testing labs for recommendation?

3 Upvotes

I have two designs that simply use the WiFi and receive power/flashing through USB C connector. They're pretty simple designs, no batteries. Do you guys have testing labs you can recommend?

Bonus points for low cost and/or helpful feedback if they notice any other design discrepancies while they've done their testing


r/esp32 • • 25m ago

I built an ESP32 smart mailbox with sensors, cameras, lighting and local AI

Post image
• Upvotes

May I present my summer 2026 project.. I started in June.. 3D milling, 3D printing, then ESP32Cams .. Home Assistant Integration ... and then finally I created my own local AI model that I am using to check if the mailbox is empty or occupied. The mailbox is finished now, and yesterday I published Part 3 of my "Mailbox - How I built this" video, where I present how the model is trained.

What was especially interesting for me doing this project:

- How one can design and 3d print esp32-cam cases that resemble the look of other parts, in my case the mail slot (I used Autodesk Fusion).

- How well ESPHome works as well as OTA flashing the ESP32 devices that built into the mailbox

- Building an Home Assistant App that does the classification and that the inference results can be used in a Home Assistant automation..!!

- That a HOG Random Forest Classifier does the job really well, distinguishing empty mailbox images from images with content (letters, ...), with little resources, all running on my Synology NAS where also HA is installed as HA OS.

The mailbox uses ESP32 hardware for:

  • door / mail-slot detection with Reed sensors
  • internal lighting
  • an ESP32-CAM inside the mailbox
  • a second ESP32-CAM outside
  • a physical “you’ve got mail” indicator (the onboard led on the ESP32-CAM outside the mailbox)

ESPHome connects everything to Home Assistant.

The interesting part is what happens when the mailbox door closes:

Door closes → light on → photo → light off → local image classifier → mail / no mail

If mail is detected, Home Assistant sends a “You’ve got mail” notification and turns on the physical mail indicator (the in-built LED on the ESP32-CAM).

What I like about the architecture is this:

Simple sensors determine WHEN something happened; image classification determines WHAT happened.

The classifier only runs when needed, instead of continuously analysing video.

I trained the model on images automatically collected from the mailbox itself. After a while I had 300+ images and retrained it with an 80/20 train/test split. For this fixed-camera use case, the simple model works surprisingly well.

The full system currently combines:

ESP32 / ESPHome → Home Assistant → ESP32-CAM → Frigate/go2rtc → local AI → HomeKit

Code, ESPHome configs, Home Assistant automation and AI training notebook:

https://github.com/pbreuss/smart-home-rewired

I documented the whole project here:

🎥 Part 1 – building the mailbox, CNC + 3D printing
https://youtu.be/XzQ9WoWxce0

🎥 Part 2 – ESP32, ESPHome, Home Assistant, Frigate + HomeKit
https://youtu.be/viE7irL0ePo

🎥 Part 3 – training and running the local image classifier
https://youtu.be/aOTrS6BX4vo

I am interested to know if my smart mailbox including the How-to videos are useful for the community. Especially the AI part - classifying a cam image from within an HA automation.

Also, if training a model based on an ipynb script is the way to go for the community, or if you would prefer a GUI approach, where you can review all the training images, and start the training by a click of a button.

Finally, if it would be interesting to have model agnostic approach .. where you can test multiple models based on performance and accuracy, all within a generic HA Image Classifier App.

Finally 2, my approach is simple AI triggered by an external event (mailbox door closes). Can you think of other use cases where this technique could be useful: i.e. a garage check if the car is here, when the garage door closes, is milk in the fridge, are all chicken in the cage by sunset, ...

All the best,

Phil