Inspiration
Controlling your smart home is annoying: unlocking your phone to find the right app or finding the right remote in your house. Available hubs like Alexa are often not privacy friendly and require a cloud connection. Existing smart home hubs with touchscreens can be clumsy, buttons are outdated and voice control can be unreliable. Our approach has minimalistic and reliable inputs combined with a user-friendly and intuitive interface.
What it does
The smart knob is a universal remote controller with a modular plugin system, allowing not just the integration of all your IOT devices, but also non-IOT devices and applications. The input is simple and satisfying: You twist, you press. It features a built-in display that shows you exactly what you're controlling - the current device, its state, and live feedback as you turn. The knob dynamically adjusts haptics based a given input type, allowing it to snap to predefined steps or limit the turn to a certain angle.
How we built it
At its core, the Smart Knob runs on an ESP32 microcontroller with firmware written in C/C++. A small circular display renders the interface, while a magnetic (Hall-effect) angle sensor positioned beneath the motor's output gear tracks how you turn the knob. We designed the physical knob and housing in Fusion 360 and 3D-printed the parts to fit the electronics and motor assembly. To develop the software rapidly without constantly flashing hardware (and even before the hardware existed), we compiled the exact same firmware to WebAssembly and built a browser-based knob that runs on it - a fully interactive Three.js simulation with the real firmware. This enabled rapid UI development and testing. For connecting the Smart Knob to real devices, we designed a modular plugin system around two complementary modes (that work in parallel). We knew a battery-driven knob couldn't realistically run heavy services like an MQTT broker or cloud integrations on its own, so we split the architecture by what each device actually needs. For simple devices like basic smart lamps, we let them connect directly to the knob, so the knob itself acts as the hub, keeping things lightweight with no extra infrastructure. For more demanding devices, we offload that complexity to an in-house Home Assistant instance leaning on its richer capabilities like MQTT and cloud integrations. This way the knob stays lean while still reaching virtually any device from Philips Hue and WLED lighting to smart speakers, media players, fans, and switches.
Challenges we ran into
- Dual-target firmware: getting one C/C++ codebase to run identically on real ESP32 hardware and in the browser via WebAssembly took careful abstraction of the hardware layer
- Wiring it all together: connecting the display, angle sensor, motor, and microcontroller into a working assembly was a real struggle
- Designing and assembling 3D models that fit the components perfectly with as little tolerance as possible
- Limited hardware — we could only work with the components we had on hand. With no option to online-order parts mid-hackathon, the kit we were given shaped and constrained a lot of what we could build. For example a motor with a hole in the middle would have made things much smaller
- Real-time communication — designing a clean protocol to relay knob state and device events across TCP and WebSockets without lag or dropped connections
- Network resilience — keeping the knob usable and responsive even when the network drops out
Accomplishments that we're proud of
- It works
- A very clean knob design even though the limited hardware required complex planning to make it all fit
- A genuinely modular plugin architecture - adding support for a new device or service is just plug and play
- An interactive browser simulation of the knob mimicing the real knob exactly without a dual codebase
- A polished, app-free control experience that makes smart home feel fun again
- Integrating an entire stack - embedded firmware, a WASM simulation, a Python bridge, and Home Assistant — into one coherent product in just two days
What we learned
- How to architect portable embedded firmware that targets both microcontrollers and WebAssembly
- The real-world tradeoffs and requirements of smart-home protocols and devices and how to glue them together
- A round display allows for totally different and cooler types of UI than normal displays
- How much faster you can iterate when you build a simulator alongside the hardware
What's next for Knobster
- expanding the plugin ecosystem with support for more devices, services, and platforms out of the box
- a plugin SDK so anyone can build and share integrations for their own devices
- Refined haptic feedback to make every interaction feel as satisfying as it looks
- Redesign the hardware using harder-to-get components allowing us to fit it in a smaller footprint
Built With
- 3d-printer
- adafruit-gfx
- arduino
- autodesk-fusion-360
- bldc-motor
- c
- c++
- comtypes
- docker
- docker-compose
- emscripten
- esp32
- freertos
- git
- home-assistant
- html5
- http
- i2c
- ifx007t
- javascript
- lasercutter
- lwip
- mosquitto
- mqtt
- philips-hue
- platformio
- pycaw
- python
- simplefoc
- spi
- st7735
- tcp
- three.js
- tle5012b
- webassembly
- websocket
- wled
Log in or sign up for Devpost to join the conversation.