If you checked out ESPHome in the past and found it too complex to get going, I thought I'd drop an update here to say that It has been (and continues to be) massively updated over the years. It now has a multi-platform desktop app and/or a web server that makes dealing with all the background complexities and compiles completely transparent and easy.
My own ESPHome configs are quite complex with multiple import fragments for reusability and the new app had no problems at all importing and immediately putting it into use. Very cool.
In addition, ESPHome is no longer restricted to just ESP microprocessors but has decent support for multiple different types now.
For those not in the know, ESPHome was originally an offshoot of Home Assistant and still works closely with it if you want to use it that way. However, you absolutely do not need HA at all and I've always used it without.
It is a tool for building custom firmware for microprocessor platforms such as the ESP32, ESP8266, Pi Pico and much more. It is configuration driven using simple to understand YAML files (now with the app/website you get a helpful built in editor).
It has thousands of contributed modules that cover just about every type of sensor, controller and integration you could imagine. It is also easy to drop into C++ within (or external to) a config if you need something custom.
In terms of Node-RED integration, ESPHome has a very good MQTT module as well as HTTP(S) API's.
It even has a Zigbee module for use with hardware that supports it (ESP32 H2 and C6 for example) so low-cost custom Zigbee IoT is now possible.
Latest AI tools have gotten very proficient in helping with the config, especially when you need to write lambdas for specific functions. I've got some tricky stuff up and running in no time using ChatGPT.
I also tested the Zigbee integration recently using an ESP32 C6. Works flawlessly!
Not had much time for my IoT devices recently but I did get the new app up and running and gave some feedback that they were happy to deal with, nice.
I consider ESPHome the ideal companion for Node-RED if you are doing any kind of custom IoT. It is super reliable and ultra-flexible. Just like Node-RED!
My older devices, mostly still ESP8266, are still running ESPeasy. Never needed to touch them after they were up and running.
For my newer devices, I'm moving over to ESPHome, and plan on migrating the older ones as well.
I'm not using the desktop app though, but the container image to build the firmwares.
The new Dashboard is nice, but you can't make much use of advanced YAML techniques with their integrated editor. I'm using imports and substitutions quite excessively to get reusable components, so I ended up using VSCode with the ESPHome plugin, works nicely. It uses the Dashboard API to validate the config.
Integration with Node-RED is done via MQTT, of course.
The help does say initial connection is the trickiest bit.
ESPHome does not see any serial ports (EXP32-C3 connected by USB cable).
Troubleshooting says try a different cable. Nope.
2026-10-26T16:11:11.756899+00:00 EVO wpa_supplicant[751]: wlp46s0: CTRL-EVENT-SIGNAL-CHANGE above=1 signal=-61 noise=9999 txrate=86700
2026-10-26T16:11:12.662451+00:00 EVO kernel: usb 3-5: new full-speed USB device number 24 using xhci_hcd
2026-10-26T16:11:12.787361+00:00 EVO kernel: usb 3-5: New USB device found, idVendor=303a, idProduct=1001, bcdDevice= 1.01
2026-10-26T16:11:12.787392+00:00 EVO kernel: usb 3-5: New USB device strings: Mfr=1, Product=2, SerialNumber=3
2026-10-26T16:11:12.787395+00:00 EVO kernel: usb 3-5: Product: USB JTAG/serial debug unit
2026-10-26T16:11:12.787397+00:00 EVO kernel: usb 3-5: Manufacturer: Espressif
2026-10-26T16:11:12.787401+00:00 EVO kernel: usb 3-5: SerialNumber: AC:A7:04:BA:6B:48
2026-10-26T16:11:12.791331+00:00 EVO kernel: cdc_acm 3-5:1.0: ttyACM0: USB ACM device
2026-10-26T16:11:12.806901+00:00 EVO mtp-probe: checking bus 3, device 24: "/sys/devices/pci0000:00/0000:00:14.0/usb3/3-5"
2026-10-26T16:11:12.807010+00:00 EVO mtp-probe: bus: 3, device: 24 was not an MTP device
2026-10-26T16:11:12.815479+00:00 EVO mtp-probe: checking bus 3, device 24: "/sys/devices/pci0000:00/0000:00:14.0/usb3/3-5"
2026-10-26T16:11:12.815571+00:00 EVO mtp-probe: bus: 3, device: 24 was not an MTP device
And this is the device
crw-rw---- 1 root dialout 166, 0 Oct 26 16:13 /dev/ttyACM0
Hmm I got it to recognise the device after many updates, reboots, apt installs and juggling groups.
I didn't get as far as making the ESP do something and report to MQTT. Another day.
But I feel that when you install something, to be considered easy it really should install the prerequisites.
Can you make an ESP with ESPhome serve a web page like Tasmota does? That is absolutely key to my Tasmota devices. There's plenty of problems with Tasmota but at least you can see the device is on the network and talk to it.
Honestly, I've not installed it on Linux. I don't do enough updates to make it worth installing anywhere other that my Windows dev PC. Maybe there is still a bit of a way to go to make the app seamless.
Absolutely. It has a web page component that you can enhance with various controls, optional CSS and JS, and basic charts. This is a lot more comprehensive than (at least the last time I looked) Tasmota. There is also a REST API.
I can share some example YAML configs if you want.
I'm referring to things like include/import. Those are not standard YAML (also not standardized), but mostly parser or runtime specific features.
With ESPHome it is quite advanced, because you can create reusable components by using the packages feature. Even nesting multiple levels is possible.
I've not seen comparable features in common parser libs like js-yaml for Node.
I use the packages feature a lot to compose my devices. Those are of different functional types, like sensor nodes, Tasmota plugs, ...
I start with a shared base device config, and simply include the actually attached hardware components in the "packages" section, by simply uncommenting a line, because my sensor nodes have different sets of sensors, depending on their location.
Unfortunately, the ESPHome Dashboard only offers to edit the "main" file, not the includes. Which is quite sad, because they seem to have put a lot of effort in creating an advanced editor with all kinds of completion, assisting features and docs, making the config a lot easier.
Ah, I see. Yes, those weren't obvious to begin with. I think I had to ask in the forum. But once I'd set a base folder to my original ESPHome source folder, everything worked as before.
Yes, I'd done this from the outset because I have multiple different microprocessor platform types with a lot of common sensors, controls and outputs. Indeed, this is one of the key features that drew me to ESPHome in the first place.