Smol Slime
Smol Slimes (also known as nRF Trackers) uses a protocol called Enhanced ShockBurst (ESB) on Nordic Semiconductor nRF52x and nRF52840 System-on-Chip (SoC). These are very power-efficient trackers, requiring a much smaller battery that can last for days to weeks compared to traditional ESP (WiFi) SlimeVR Trackers. A Receiver (also known as a dongle) is required to bridge the communications between the trackers and SlimeVR Server. This method doesn't work with Quest Standalone without using a computer for OSC.
Disclaimer: This project is highly experimental. These devices may be incompatible with newer versions of SlimeVR Server and will require a firmware update. Nothing is final yet; this includes hardware, firmware, protocols used, and etc.
Interested, have questions, or issues with this project? Chat with us in #smol-slimes on SlimeVR Discord!
Hardware
Receiver
- eByte Dongle (E104-BT5040U) - Cheapest Receiver, free shipping from AliExpress, and has PCB Trace Antenna.
- Nordic Semiconductor nRF52840 Dongle (PCA10059) - More expensive, not free shipping from Digikey/Mouser, and has PCB Trace Antenna.
- SuperMini nRF52840 - Cheapest option, but having a ceramic antenna and your trackers also having a ceramic antenna will reduce signal strength and range.
- Seeed Studio XIAO nRF52840 - Expensive option, but having a ceramic antenna and your trackers also having a ceramic antenna will reduce signal strength and range.
Tracker
- SuperMini nRF52840 (Cheapest) or Seeed Studio XIAO nRF52840 (Smaller, but very expensive)
- Compatible Inertial Measurement Unit/IMU Breakout Board
- BMI270 (IMU Wake on Motion Unfinished)
- ICM-42688-P
- ICM-42688-V
- ICM-45686
- ISM330BX
- ISM330DHCX
- LSM6DSO
- LSM6DSR
- LSM6DSV
- LSM6DSV16B
- Compatible Magnetometer (Optional)
- AK09940
- BMM150 (Not Tested)
- BMM350 (Not Tested)
- IIS2MDC
- IST8306
- IST8308
- LIS2MDL
- LIS3MDL (Not Tested)
- MMC5983MA
- Push Button/Momentary Switch (One is recommended for Resetting, Pairing, Calibration, Sleep, putting the tracker in DFU mode for firmware. A second can be used to separate the original Reset functions from the other features.) A tweezer can be used to short the pins for the initial tracker setup instead.
- Slide Switch - Recommended, but optional. Allowing you to turn on/off your tracker. Deep sleep by holding down the push button puts the tracker in a very low power state (not completely off).
- 3.7V LiPo Battery - Battery must be 50ma or larger with XIAO nRF52840 and 100ma or larger with SuperMini nRF52840.
Schematic
Software
- Git Client
- nRF Connect for Desktop
- Programmer (Inside nRF Connect; needed for Nordic and eByte Dongles only)
- Serial Terminal (Inside nRF Connect; recommended to send commands to your Receiver/Trackers)
- Toolchain Manager (Inside nRF Connect; needed for building firmware for receiver and tracker)
- 2.6.2 (Inside Toolchain Manager) Don't use a newer version!
- Visual Studio Code
- nRF Connect for VS (Install within VS Code Extension tab)
- SlimeVR Server
- 0.13.2 or later version
Firmware
The recommended method of getting the firmware is in the pre-compiled section if you don't need custom config or pin defines.
Cloning Repositories
- Open Command Prompt (Type
cmd
in Start Menu). - Change to a directory you want the repositories to clone to. (Use "cd" followed by space and then a full path to a folder or drive.)
- Cloning SlimeNRF Receiver Repository.
git clone --single-branch --recurse-submodules -b master https://github.com/SlimeVR/SlimeVR-Tracker-nRF-Receiver.git
- Cloning SlimeNRF Tracker Repository.
git clone --single-branch --recurse-submodules -b master https://github.com/SlimeVR/SlimeVR-Tracker-nRF.git
Note: It is recommended to clone to a filepath without whitespaces and/or unicode characters. You may encounters errors when building the firmware.
Building firmware
- Launch VS Code using nRF Connect's Toolchain Manager.
- Open the folder to one of the repositories.
- Make any pin changes or necessary adjustments to
board\arm followed by board_name*board_name*.dts
. - Click on the nRF Connect tab on the left side of your screen (about half way down).
- Under "Applications" , click on "+ Add build configuration."
- For Receiver, under "CMake Preset", select the board and then scroll to the bottom and "Build Configuration". For Tracker, under "Board Target", select the "Custom" Radio button first, then select the board, and scroll to the bottom to "Build Configuration."
Note: For trackers, settings are found in "nRF Kconfig GUI" under "Actions" and expand the "SlimeNRF" section.
Changing board defines
Board defines can be found in \boards\
for overlays (Boards within the Zephyr library) and custom boards are found in \boards\arm\BOARD_NAME\BOARD_NAME.dts
.
- Navigate to the board's .dts file.
- I2C (SCL/SDA) can be changed to other pins. Make sure you are using "High Frequency" pins and that you change the pins for both lines.
- SW0 can be enabled by uncommenting (removing the
//
) from lines below the description commment. You can select the lines and press Ctrl / if you are using VS Code. Re-define the gpio pin if necessary. - INT (int0-gpios) can be re-defined under the Zephyr user section.
- CLK (clk-gpios) can be uncommented and re-defined if you are using an IMU with an external clock/crystal oscillator such as the ICM-42688 or ICM-45686.
Adjusting settings in the Kconfig
- Go to the nRF Connect tab of VS Code.
- Build the desired board once.
- A section called Actions should appear on the left navigation board.
- Select your built board under Applications, then scroll down to the Actions.
- Double click nRF Kconfig GUI.
- Scroll down to the SlimeNRF section.
- Enable/Disable or adjust any configs needed.
- Click the "Apply" button", then click the "Save to file" button.
- If prompted which file to save to, select prj.conf.
- Click on the "Pristine Build" button next to Build in the Actions section.
Pre-Compiled firmware for default pins
Latest builds (Automated)
Type | Device | Clock (ICM) | Sleep (WOM) | Download | Mirror |
---|---|---|---|---|---|
Receiver | Nordic/eByte | N/A | N/A | Link | Link |
Receiver | SuperMini | N/A | N/A | Link | Link |
Receiver | XIAO | N/A | N/A | Link | Link |
Tracker | SuperMini | Disabled | Enabled | Link | Link |
Tracker | SuperMini | Disabled | Disabled | Link | Link |
Tracker | SuperMini | Enabled | Enabled | Link | Link |
Tracker | SuperMini | Enabled | Disabled | Link | Link |
Tracker | XIAO | Disabled | Enabled | Link | Link |
Tracker | XIAO | Disabled | Disabled | Link | Link |
Tracker | XIAO | Enabled | Enabled | Link | Link |
Tracker | XIAO | Enabled | Disabled | Link | Link |
Tracker | R3 | Enabled | Enabled | Link | Link |
Tracker | R3 | Enabled | Disabled | Link | Link |
Tracker | SlimeVR Mini (Prototype) | Enabled | Enabled | Link | Link |
Tracker | SlimeVR Mini (Prototype) | Enabled | Disabled | Link | Link |
Previous builds
Previous builds can be found here: https://github.com/Shine-Bright-Meow/SlimeNRF-Firmware-CI/actions
- Click on a successful workflow run ✅ for a date period.
- Scroll down to the Artifacts section.
- Download desired device firmware.
- Extract zip file.
Updating Adafruit Bootloader (Make sure this step is completed before flashing firmware or you may brick your device)
- You can download them here. https://github.com/adafruit/Adafruit_nRF52_Bootloader/releases
- For SuperMini, download
update-nice_nano_bootloader-x.x.x_nosd.uf2
. For XIAO, downloadupdate-xiao_nrf52840_ble_sense_bootloader-x.x.x_nosd.uf2
. (The proper non-Sense version doesn't update the bootloader.) - Plug the device into your computer via data USB cable.
- The device should start off in DFU mode when new without a bootloader. The LED should be fading on and off.
- If device's LED is not fading on and off, press the reset button twice (or short RST/GND pins) twice within 0.5s. If device with existing SlimeNRF firmware, reset 4 times.
- Navigate to your Downloads folder and copy the uf2 file.
- Navigate to the Mass Storage Drive (ex. NICENANO/XIAO-SENSE) from ThisPC.
- Paste the file into there, and the window should close and the device will reboot.
Flashing firmware to device
Dongles (Nordic/eByte)
- Open "Programmer" in nRF Connect.
- Press the reset button, and the LED should start fading on and off, putting the device in DFU Mode. For eByte, it is the right button. For Nordic, it is a side button (not the round white button).
- On the top left corner, select your Device.
- Click on "Add File".
- Navigate to your local Receiver repository, then select file in build\zephyr\zephyr.hex.
- Click the "Write button".
SuperMini and other Devices with Adafruit Bootloader as Receiver/Tracker (Make sure Bootloader is updated first!):
- Plug the device into your computer via data USB cable.
- The device should start off in DFU mode when new without a bootloader. The LED should be fading on and off.
- If device's LED is not fading on and off, press the reset button twice (or short RST/GND pins) twice within 0.5s. If device with existing SlimeNRF firmware, reset 4 times.
- Navigate to your local Receiver or Tracker repository, then go to
build\zephyr\
. - Copy zephyr.uf2 file.
- Navigate to the Mass Storage Drive (ex. NICENANO/XIAO-SENSE) from ThisPC.
- Paste the file into there and the window should close and device will reboot.
Pairing Mode
Tracker
Method 1: Console
- Open nRF Connect for Desktop.
- Open Serial Terminal from nRF Connect.
- Ensure your tracker is connected to your computer via cable.
- On the top left corner, select your tracker under Devices.
- Click the "Connect to Port" button.
- Type
pair
into the console.
Method 2: Button
- Press the Reset (or short RST/GND pins) or Function button (if you have SW0 defined) 3 times.
Device's LED should blink once every sec.
Receiver
Method 1: Console
- Open nRF Connect for Desktop.
- Open Serial Terminal from nRF Connect.
- Ensure your tracker is connected to your computer via cable.
- On the top left corner, select your dongle under Devices.
- Click the "Connect to Port" button.
- Type
pair
into the console.
Method 2: Button
- On the eByte dongle, press the left button 3 times. On the Nordic dongle, press the round white button 3 times.
Device's LED should blink once every sec.
Once trackers are paired, the LED should stop blinking once per sec. To exit pairing mode on Receiver, type reboot
in the console or press the left button once on eByte Dongle or the white button once on Nordic Dongle.
Calibration
Basic
Method 1: Console
- Open nRF Connect for Desktop.
- Open Serial Terminal from nRF Connect.
- Ensure your tracker is connected to your computer via cable.
- On the top left corner, select your tracker under Devices.
- Click the "Connect to Port" button.
- Type
calibrate
into the console while tracker is on a flat surface. - Wait for the logs to reboot and print out again.
Method 2: Button
- Press your Reset or SW0 (Functional) button twice and leave the tracker still on a flat surface for a few seconds.
6-Side
- Make sure the power switch is on. (So the tracker can run on battery when unplugged.)
- Open nRF Connect for Desktop.
- Open Serial Terminal from nRF Connect.
- Ensure your tracker is connected to your computer via cable.
- On the top left corner, select your tracker under Devices.
- Click the "Connect to Port" button.
- Enter
6-side
command in console. (At the moment, there is no button press combination to start this calibration.) - Follow the console log on rotating sides on a flat surface. Leave the cable side for last.
- When prompted for the last side, unplug your USB cable and place the side with the USB port onto the flat surface.
- Wait a bit until calibration is complete.
Updating firmware
- If your Receiver needs firmware updated, do this first.
- Open nRF Connect's Serial Terminal.
- Select your Receiver from the Device list.
- Click the "Connect to Port" button.
- Enter
clear
to unpair all of your trackers from the Receiver. - Enter
pair
to enter pairing mode on your Receiver. - Connect a tracker to your computer via USB cable and make sure the power switch is on. (So the tracker can run on battery when unplugged for 6-Side calibration.)
- Select your tracker from the Device List.
- Click the "Connect to Port" button.
- Enter
dfu
to go into DFU Mode. - Copy the UF2 file onto your tracker.
- Enter
6-side
to start 6-Side calibration. - After 6-Side calibration, enter
calibrate
to calibrate the ZRO. - Enter
pair
to enter pairing mode. - Wait for the tracker to pair to the Receiver, and then disconnect.
- Repeat process for all trackers.
- Select your Receiver from the Device list.
- Click the "Connect to Port" button.
- Enter
reboot
to exit pairing mode.
Console Commands
Receiver
info
- Get device informationlist
- Get paired devicesreboot
- Soft reset the devicepair
- Enter pairing modeclear
- Clear stored devicesdfu
- Enter DFU bootloader (only available if your device has one)meow
- Meow!
Tracker
info
- Get device informationreboot
- Soft reset the devicecalibrate
- Calibrate sensor ZRO6-side
- Calibrate 6-side accelerometerpair
- Enter pairing modedfu
- Enter DFU bootloader (only available if your device has one)meow
- Meow!
Button
- Reset - 1 Press
- Calibration - 2 Presses
- Pairing Mode - 3 Presses
- DFU Bootloader - 4 Presses
- Deep Sleep - Press and Hold
LED Codes
- 1 blink per second - Pairing mode.
- 1 blink 0.5 second - Low battery.
- 2, 3, 4 blinks every 5 seconds - Error.
- 3 blink pattern - Connection error.
- Fade on and off - DFU mode.
- Very short blink - Normal operation or wake on motion.
- While charging - Pulsing - Charging.
- While charging - Solid - Fully charged.
Troubleshooting
Check Console Logs
- Open nRF Connect for Desktop.
- Open Serial Terminal from nRF Connect.
- Ensure your tracker is connected to your computer via cable.
- On the top left corner, select your tracker under Devices.
- Click the "Connect to Port" button.
SWD Debugging
- Instructions for the Raspberry Pi, Raspberry Pi Pico, ST-Link V2, and other debuggers will be added in the future. Resource: https://github.com/joric/nrfmicro/wiki/Bootloader
J-Link, nRF52/nRF52840 Development Kit, and OB-ARM Debugger
- Install J-Link Software and Documentation Pack: https://www.segger.com/downloads/jlink/#J-LinkSoftwareAndDocumentationPack
- Download Bootloader HEX File for your device (SuperMini -
nice_nano_bootloader-x.x.x_sxxx_x.x.x.hex
, XIAO -xiao_nrf52840_ble_sense_bootloader-x.x.x_sxxx_x.x.x.hex
): https://github.com/adafruit/Adafruit_nRF52_Bootloader/releases - Connect Debugger to SWD IO, CLK, and GND Pins. (It is safer to power up your device by plugging into USB instead of using the VDD pin)
Flashing/Fixing bricked bootloader
- Open "J-Flash Lite."
- Target Device: NRF52840_XXAA
- Target Interface: SWD
- Speed: 4000
- Click the "OK" button.
- Click on the "..." button and select downloaded HEX file.
- Click the "Program Device" button.
RTT/Debugging
- Open "RTT Viewer."
- Connection to J-Link: USB
- Specify Target Device: NRF52840_XXAA
- Force go on connect: Checked
- Target Interface & Speed: SWD / 4000 hKz
- RTT Control Block: Auto Detect
- Click the "OK" button.
Recommended Hardware/Tools
OB-ARM Debugger: https://www.aliexpress.us/item/3256806507382540.html
Pogo Pin Test Clip (1.5mm Pitch, 4P, Single Row): https://www.aliexpress.us/item/3256805646654844.html
Note: The clip is for SuperMini only. There are cheaper clips out there, but they don't break out the pins from 1.5mm pitch to 2.54mm pitch for dupont wires.
Links
SlimeVR nRF Receiver Firmware: https://github.com/SlimeVR/SlimeVR-Tracker-nRF-Receiver
SlimeVR nRF Tracker Firmware: https://github.com/SlimeVR/SlimeVR-Tracker-nRF
Scawanf's PCB R3 on Github: https://github.com/SlimeVR/SlimeVR-Tracker-nRF-PCB
Scawanf's PCB R3 on OSHWLab: https://oshwlab.com/sctanf/slimenrf3
SlimeVR Discord: https://discord.gg/SlimeVR
Created by Shine Bright ✨