Noodles is a physical MQTT controller — a central input device for selecting and driving other MQTT-connected devices. Built on the Arduino Nano 33 IoT with a NeoTrellis 4x4 illuminated keypad, two rotary encoders, and a button pair.
Hardware
- Board: Arduino Nano 33 IoT
- NeoTrellis 4x4 — illuminated keypad for app selection and control (I2C)
- Rotary Encoder 1: D3 / D4
- Rotary Encoder 2: D5 / D6
- Button Pair: D9 / D8
- Kill Switch: D2
- Piezo Buzzer: D7
How It Works
Three modes managed by StateManager:
- HOME — idle display on the NeoTrellis, navigable with buttons
- SELECTING — browse available app targets on the keypad
- CONTROL — encoder turns and key presses publish MQTT messages to the selected app's control topic
Configured app targets:
- Yodel —
apps/yodel/control - Skippy —
apps/skippy/control - Jibbers —
apps/jibbers/control - Pickles —
apps/pickles/control - Puddles —
apps/puddles/control - Nurbo —
apps/nurbo/control
Building
Built with PlatformIO.
Libraries
- InputHandler — routes encoder, button, and trellis events to the right handler
- NeoTrellis — wraps the Adafruit NeoTrellis for pixel control and key callbacks
- RotaryEncoder —
EncoderChannelabstraction with direction callbacks - SimpleButtonPairController — debounced two-button input
- StateManager — manages HOME / SELECTING / CONTROL state transitions and display
- WiFiMQTTManager — handles Wi-Fi connection and MQTT publish/subscribe