Got Klipper + Mainsail running on an Orange Pi One with SKR Pro v1.2 — way harder than expected
I finally got Klipper running on an Orange Pi One connected to a BigTreeTech SKR Pro v1.2, and honestly it was way harder than I expected.
Setup:
- Orange Pi One, 512 MB RAM
- Armbian / Ubuntu 26.04-ish image
- Python 3.14
- BTT SKR Pro v1.2
- CoreXY printer
- X/Y/Z: TMC2130 standalone drivers
- E0/E1: TMC2208 standalone
- E2: TMC2209 physically present but unused
- BTT relay module for printer power hold
- Mainsail + Moonraker as UI
The first issue was that the Orange Pi could not reliably clone Klipper from GitHub. `git clone https://github.com/Klipper3d/klipper.git` kept timing out. So we cloned Klipper on another machine, packed it into a tarball, copied it to the Orange Pi, and extracted it there.
Then the normal Klipper Python install failed because the Armbian image came with Python 3.14. Klipper’s requirements pinned `greenlet==3.1.1` for Python >=3.12, and that did not build correctly on Python 3.14. The workaround was to create the venv manually and install a newer greenlet:
- `greenlet >= 3.5.3`
- plus the other Klipper requirements manually
- plus pinned setuptools because python-can needed `pkg_resources`
After that, Klippy itself could start.
The SKR Pro firmware was built directly on the Orange Pi from the transferred Klipper source. The config was:
- STM32F407
- 32 KiB bootloader
- USB PA11/PA12
The generated `klipper.bin` was copied back to the PC, renamed to `firmware.bin`, put on the SKR SD card, and flashed. After reboot, the board showed up as:
`/dev/serial/by-id/usb-Klipper_stm32f407xx_...`
Then we hit another issue: USB instability. The SKR would appear connected, but the Orange Pi kernel kept logging:
`usb4-port1: disabled by hub (EMI?), re-enabling`
`USB disconnect`
At first it looked like the Orange Pi One was too weak, but RAM/load were fine. The problem turned out to be the USB extender/cable setup. Removing the USB extender made the connection stable.
After Klipper was working, installing Mainsail/Moonraker was another pain. Moonraker needed a lot of Python dependencies, and on the Orange Pi One many of them had to compile from source because of Python 3.14 / ARM. Problems included:
- missing `unzip`
- Windows-side logging choking on Unicode pip progress characters
- `/tmp` being a tiny tmpfs and filling up while building Pillow
- Pillow failing until image libraries/headers were installed
- Moonraker needing `libsodium` for libnacl
Fixes included:
- installing `unzip`
- forcing UTF-8 output on the control machine
- disabling pip progress bars
- setting `TMPDIR=/home/huntly/tmp` instead of using `/tmp`
- installing Pillow build dependencies like jpeg/zlib/freetype/webp/tiff/openjpeg/harfbuzz/fribidi/raqm
- installing `libsodium23` and `libsodium-dev`
Mainsail was installed from the official release zip, served on port 8081, and Moonraker on 7125. Mainsail initially tried to connect to the wrong port, so its `config.json` had to be edited to point to Moonraker:
`192.168.2.159:7125`
Moonraker also complained about missing Klipper objects, so the config needed:
- `[virtual_sdcard]`
- `[display_status]`
- `[pause_resume]`
Finally, the BTT relay was another separate issue. The relay was not staying latched because its SG/signal line was not connected to the SKR. After tracing it, the working relay hold pin was:
`PF5 / T2`
In Klipper:
Posted Jul 10, 2026, 7:22 PM UTC
03