Hello,
I wrote (with some much needed help from Claude) a custom network component which allows an ESPHome instance running on an ESP32 to communicate with a host PC using SLIP (Serial Line Internet Protocol).
This means the only physical connection required between the ESP32 and PC is a USB cable.
I’ve only tested this on an ESP32 NodeMCU, but was able to confirm ESPHome can listen to ESPNow packets since it doesn’t use Wifi to connect to the network. I put as much information as I could over at:
Eventually I hope I can use this from Home Assistant too, not just on my Linux test machine. In any case, I am really chuffed this is working at all!
$ esphome logs my_device.yaml --device 192.168.254.2
INFO ESPHome 2026.10.0
INFO Loaded validated config cache for my_device.yaml, skipping validation.
INFO Starting log output from 192.168.254.2 using esphome API
INFO Successfully resolved slip-node @ 192.168.254.2 in 0.000s
INFO Successfully connected to slip-node @ 192.168.254.2 in 0.014s
INFO Successful handshake with slip-node @ 192.168.254.2 in 0.024s
[16:16:59.074][I][app:164]: ESPHome version 2026.10.0 compiled on 2026-10-25 16:16:06 +0100
[16:16:59.104][I][app:171]: ESP32 Chip: ESP32 rev1.0, 2 core(s)
[16:16:59.104][W][app:189]: Set flash_chip: gd under esp32 > framework > advanced to save IRAM
[16:16:59.104][W][app:228]: Bootloader supports SRAM1 as IRAM (+40KB). Set sram1_as_iram: true under esp32 > framework > advanced
[16:16:59.136][C][logger:218]: Logger:
[16:16:59.136][C][logger:218]: Max Level: DEBUG
[16:16:59.136][C][logger:218]: Initial Level: DEBUG
[16:16:59.136][C][logger:225]: Log Baud Rate: 0
[16:16:59.136][C][logger:225]: Hardware UART: UART0
[16:16:59.136][C][logger:234]: Task Log Buffer Size: 768 bytes
[16:16:59.164][C][uart:349]: UART Bus 0:
[16:16:59.164][C][uart:131]: TX Pin: GPIO1
[16:16:59.164][C][uart:131]: RX Pin: GPIO3
[16:16:59.164][C][uart:354]: RX Buffer Size: 1024
[16:16:59.164][C][uart:354]: RX Full Threshold: 114
[16:16:59.164][C][uart:354]: RX Timeout: 2
[16:16:59.195][C][uart:366]: Baud Rate: 115200 baud
[16:16:59.195][C][uart:366]: Data Bits: 8
[16:16:59.195][C][uart:366]: Parity: NONE
[16:16:59.195][C][uart:366]: Stop bits: 1
[16:16:59.195][C][uart:366]: Clock Source: APB
[16:16:59.195][C][network:050]: Network:
[16:16:59.195][C][network:050]: TCP send buffer: 5760 bytes
[16:16:59.195][C][slip:084]: SLIP:
[16:16:59.195][C][slip:085]: Local IP: 192.168.254.2
[16:16:59.223][C][slip:086]: Gateway: 192.168.254.1
[16:16:59.223][C][slip:087]: Subnet: 255.255.255.0
[16:16:59.223][C][api:368]: Server:
[16:16:59.223][C][api:368]: Address: slip-node.local:6053
[16:16:59.223][C][api:368]: Listen backlog: 4
[16:16:59.223][C][api:368]: Max connections: 5
[16:16:59.223][C][api:380]: Noise encryption: NO
[16:16:59.279][C][mdns:324]: mDNS:
[16:16:59.279][C][mdns:324]: Hostname: slip-node
[16:17:02.491][D][main:279]: hello over SLIP
[16:17:07.491][D][main:279]: hello over SLIP
[16:17:12.491][D][main:279]: hello over SLIP
[16:17:17.491][D][main:279]: hello over SLIP
[16:17:22.492][D][main:279]: hello over SLIP
[16:17:27.492][D][main:279]: hello over SLIP
[16:17:32.492][D][main:279]: hello over SLIP
[16:17:37.492][D][main:279]: hello over SLIP
[16:17:42.492][D][main:279]: hello over SLIP
Cheers,
Egor