Diagnostic guide for common Badge 2350 development issues
Diagnoses and fixes common Badge 2350 development issues like detection, app display, and memory errors.
/plugin marketplace add johnlindquist/badger-2350-plugin/plugin install badger-2350-dev@badger-marketplaceHelp diagnose and fix common Badger 2350 development problems.
Symptoms: mpremote can't find badge, no /dev/tty.usbmodem* device
Diagnostics:
# macOS/Linux: Check for USB serial devices
ls /dev/tty.usbmodem* /dev/ttyACM*
# Windows: Check COM ports
[System.IO.Ports.SerialPort]::getportnames()
Solutions:
dialout group:
sudo usermod -a -G dialout $USER
# Log out and log back in
Symptoms: Deployed app doesn't show up in badge menu
Diagnostics:
/Volumes/BADGER/apps/my_app/
├── __init__.py
└── icon.png
Solutions:
Redeploy using Mass Storage Mode:
/Volumes/BADGER/apps/Verify required files:
__init__.py must existicon.png must be 24x24 pixelsapps/ directoryInstall paginated menu if you have 7+ apps:
/Volumes/BADGER/apps/menu/__init__.pySymptoms: MemoryError, app crashes, out of memory
Diagnostics:
# Check available memory in REPL
mpremote exec "import gc; gc.collect(); print('Free:', gc.mem_free())"
Solutions:
Collect garbage frequently:
import gc
gc.collect() # Call in your update() function periodically
Load resources once in init(), not in update()
Delete unused variables:
del large_variable
gc.collect()
Use smaller images: Reduce sprite sizes, compress PNGs
Avoid large lists/dictionaries: Keep data structures minimal
Symptoms: ImportError: no module named 'badgeware'
Diagnostics:
# Test badgeware import
mpremote exec "import badgeware; print('OK')"
Solutions:
.uf2 from https://github.com/badger/home/releases.uf2 file to driveSymptoms: Screen frozen, changes don't appear
Diagnostics:
update() function is being calledSolutions:
Ensure update() function exists:
def update():
# Your code here
pass
Avoid blocking operations:
while True: loopstime.sleep() in update loopCheck for errors in REPL:
mpremote
# Watch for error messages
Symptoms: Button presses don't trigger actions
Diagnostics:
# Test button in REPL
mpremote exec "
from badgeware import io
while True:
io.poll()
if io.BUTTON_A in io.pressed:
print('A pressed')
break
"
Solutions:
Use correct button state check:
if io.BUTTON_A in io.pressed: # Just pressed (correct)
if io.BUTTON_A == io.pressed: # WRONG!
Call io.poll() if needed (MonaOS usually handles this)
Check button isn't physically stuck
Symptoms: WiFi won't connect, timeout errors
Diagnostics:
import network
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
print('Networks:', wlan.scan())
Solutions:
import time
wlan.connect('SSID', 'password')
timeout = 10
while not wlan.isconnected() and timeout > 0:
time.sleep(1)
timeout -= 1
/badge-quickstart
This will verify your entire development environment and identify configuration issues.