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
Loading comments…