Pages/DevicePage/esp32_controller library

Classes

Esp32Api
The bridge surface the controller needs, so tests can fake it without Rust.
Esp32Controller
Owns the port choice and the event stream; the page only renders it.
RustEsp32Api
The real bridge. RustLib is absent in flutter test, which is why the page talks to Esp32Api instead of these top-level functions.