# Creality Sonic Pad - Klipper Oficial, custom firmware

Como muchas veces hemos comentado, la Creality Sonic Pad utiliza un firmware personalizado por Creality y que por desgracia no está actualizado por lo que la compatibilidad y acceso a según que opciones de Klipper no son posibles.

**Pero, ¿por qué es importante utilizar un firmware custom, no de Creality, para poder disponer de una versión Klipper oficial y actualizada?**

La versión stock del sistema operativo de la Creality Sonic Pad utilizan una distribución llamada Tina, una versión a su vez que es un fork de OpenWRT hecha por Allwinner para sus procesadores, que es el que justamente monta la Creality Sonic Pad.

Creality ha personalizado esta distribución para instalar los componentes de Klipper como es el core de Klipper, Moonraker y Klipper Screen y personalizarlos para su ecosistema pero, por otro lado, esta customizacion se basa en versiones antiguas de Klipper por lo que perdemos ciertas funciones y compatibilidad.

Aquí es donde entra en juego la comunidad y el proyecto para crear una distribución para la Creality Sonic Pad con un Debian y Klipper oficial preinstalado además de compatible con herramientas como Kiauh para poder instalar o actualizar los componentes de Klipper o relacionados.

{% hint style="danger" %}
**IMPORTANTE!!!**

Para poder adaptar nuestra Sonic Pad a este nuevo firmware custom vamos a tener que descargar un nuevo firmware/imagen/distribución, aplicarlo a nuestro Sonic Pad y realizar configuraciones de nuestro entorno de la forma tradicional... esto es sin alguno de los asistentes que Creality incluye en su firmware stock.

**Por eso es importante recordar que para realizar este proceso has de tener unos minimos conocimientos de Linux, informática ademas de manejo de Klipper y sus ajustes.**

**Por otro lado indicar que este proceso puede dejar inservible vuestro Sonic Pad y que al final es vuestra responsabilidad realizar el proceso y cualquier problema que pueda venir de utilizarlo.**
{% endhint %}

## Instalación custom firmware (Debian) en la Creality Sonic Pad

A continuación os vamos a describir los pasos del proceso, de todas formas os facilitamos el siguiente video que puede facilitar entender el proceso.

{% embed url="<https://www.youtube.com/watch?v=W4cSQND8eSM>" %}

{% hint style="info" %}
**Links importantes que pueden ser de utilidad durante el proceso:**

* [**Creality Original Firmware**](https://www.creality.com/pages/download-creality-sonic-pad), aquí tenéis disponibles para descarga los firmwares originales de Creality para la Sonic Pad
* [**SonicPad Debian Firmware**](https://github.com/Jpe230/SonicPad-Debian/releases), página con las versiones/releases en Github
* [**PhoenixSuit Tool**](https://github.com/CrealityOfficial/Creality_Sonic_Pad_Firmware), descarga de la herramienta para aplicar firmware a nuestra Sonic Pad
  {% endhint %}

### Descarga del custom firmware (Debian) para la Creality Sonic Pad

Disponemos de los ficheros a descargar desde el apartado [Releases](https://github.com/Jpe230/SonicPad-Debian/releases) del proyecto [Sonic Pad Debian](https://github.com/Jpe230/SonicPad-Debian) del compañero Jpe230. Hemos de descargar el zip y todos los zxx que estén en el apartado Assets de cada release:

<figure><img src="https://276162026-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FH6gCE2fgkkpOScJ72TP7%2Fuploads%2FqwuR2g6IsVuxDVyy7zoz%2Fimage.png?alt=media&#x26;token=7e981bc9-f6fa-43c3-b495-74a2f56e359a" alt=""><figcaption></figcaption></figure>

Una vez descargados los descomprimimos y nos dejará un fichero con la imagen con extensión `.img`.

### Descarga de PhoenixSuit

El siguiente paso será la descarga de PhoenixSuit que podremos encontrar en la carpeta [tools](https://github.com/CrealityOfficial/Creality_Sonic_Pad_Firmware/tree/main/tools) dentro del repositorio oficial de [Creality Sonic Pad](https://github.com/CrealityOfficial/Creality_Sonic_Pad_Firmware/tree/main/tools) donde encontraremos versiones para Windows y MacOS.

<figure><img src="https://276162026-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FH6gCE2fgkkpOScJ72TP7%2Fuploads%2Fxd0yU9MWExWoq0DGpoj5%2Fimage.png?alt=media&#x26;token=64f2a359-e669-422d-9779-f7e70e8503f9" alt=""><figcaption></figcaption></figure>

<figure><img src="https://276162026-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FH6gCE2fgkkpOScJ72TP7%2Fuploads%2FBnGw2eaR8jTXror68oed%2Fimage.png?alt=media&#x26;token=4c38d4e7-4a6b-4991-8d53-ba41a3a067ed" alt=""><figcaption></figcaption></figure>

Una vez descargado lo descomprimimos en nuestro ordenador y abriremos la aplicación cargando la imagen descargada en el punto anterior:

<figure><img src="https://276162026-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FH6gCE2fgkkpOScJ72TP7%2Fuploads%2FVCANbDDJktLgKCdyMaOv%2Fimage.png?alt=media&#x26;token=b6a9faf3-5724-43b1-9bfc-669f7db5cc77" alt=""><figcaption></figcaption></figure>

### Creality Sonic Pad en modo BOOT

A continuación conectaremos el cable USB (USB-A macho a USB-A macho!!!) entre nuestro ordenador y nuestra Creality Sonic Pad... es importante hacerlo en el puerto USB con la etiqueta CAM!!!

Pulsaremos con un clip o una llave Allen del diámetro adecuado el pulsador FEL que podéis ver en la imagen a continuación al mismo tiempo que encendemos la Sonic Pad.

<figure><img src="https://276162026-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FH6gCE2fgkkpOScJ72TP7%2Fuploads%2FxTIWM99BdPoTfYBmlRhQ%2Fimage.png?alt=media&#x26;token=1204efdc-1787-4208-914b-158e609eb9f6" alt=""><figcaption></figcaption></figure>

Si todo ha ido bien nuestra Creality Sonic Pad estará en modo BOOT, la pantalla no mostrará imagen durante este modo.

### Instalación de drivers Sonic Pad

Con la Creality Sonic Pad en modo BOOT y con el cable USB-Am/Am conectados nuestro ordenador deberá detectar un nuevo dispositivo del que probablemente no tengamos drivers, estos drivers los podemos encontrar en el PhoenixSuit descomprimido en la carpeta Drivers.

<figure><img src="https://276162026-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FH6gCE2fgkkpOScJ72TP7%2Fuploads%2FyQ5LAWDHBQLwztqss2nH%2Fimage.png?alt=media&#x26;token=2fe6ef67-6a4e-4f5a-b687-4a3faa5c8171" alt=""><figcaption><p>Ejemplo Windows del administrador de dispositivos y la deteccion de un dispositivo desconocido al conectar la Sonic Pad</p></figcaption></figure>

<figure><img src="https://276162026-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FH6gCE2fgkkpOScJ72TP7%2Fuploads%2FW24GNmcL4PUcJ6sC9xfv%2Fimage.png?alt=media&#x26;token=1e7b4a80-f1a5-48e4-9df0-b2663e0f275e" alt=""><figcaption><p>Instalación Windows de drivers</p></figcaption></figure>

### Aplicar custom firmware (Debian) a nuestra Sonic Pad

Una vez tengamos los drivers instalados PhoenixSuit podrá aplicar el firmware custom a ella, como primer paso nos va a pedir que formateemos el dispositivo:

{% hint style="danger" %}
**Este proceso va a borrar completamente el contenido de nuestro Sonic Pad por lo que os aconsejamos disponer de un backup de vuestras configuraciones previas.**

**Este proceso es crítico, cualquier problema durante el mismo podría dañar la Sonic Pad y dejarla inservible.**
{% endhint %}

<figure><img src="https://276162026-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FH6gCE2fgkkpOScJ72TP7%2Fuploads%2F7xDiSukryllfGQcZIAZT%2Fimage.png?alt=media&#x26;token=162e6293-6e58-479d-b0c8-1e36baf00a47" alt=""><figcaption></figcaption></figure>

Una vez finalizado el proceso ya tendremos todo instalado, apagaremos la Sonic Pad y volveremos a encenderla normalmente asegurándonos que retiraremos el cable entre esta y el ordenador.

Si todo ha ido bien al encenderla veremos el logo rojo de Debian, el primer arranque puede tardar unos minutos.

## Primeros pasos con custom firmware (Debian) para Sonic Pad

Ahora que ya tenemos un sistema "libre" además de la IP podemos comenzar a por conectarnos a el por SSH para realizar algunas acciones.

### Conectar a la WiFi

El primer paso, si no conectamos por cable a nuestra red, será configurar la WiFi utilizando la pantalla de la Sonic Pad donde veremos el interfaz, puro, de KlipperScreen. Iremos a Menu -> Network donde veremos las redes WiFi disponibles y podemos conectarnos a una además de ver la IP asignada una vez conectados.

<figure><img src="https://276162026-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FH6gCE2fgkkpOScJ72TP7%2Fuploads%2FU1dJtjP3Wdjhw0HEMOM9%2Fimage.png?alt=media&#x26;token=30053a76-9fa0-4443-9993-c2503e5a8599" alt=""><figcaption></figcaption></figure>

### Conectar por SSH

Aunque tenemos más información sobre esto en nuestra [guia de primeros pasos ](https://klipper.3dwork.io/empezamos/puesta-en-marcha-inicial#conexion-a-ssh)os vamos a describir brevemente el proceso.

Lo primero es importante disponer de la IP de red asignada a nuestra Sonic Pad tal como vimos en el paso anterior, esta IP la utilizaremos para configurar el acceso desde nuestro cliente SSH os aconsejamos [**Terminus**](https://termius.com/download/) por ser multiplataforma, sencillo y no tiene coste para el uso de administrar tus máquinas con Klipper. También dispones de otras como [**Putty**](https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html).

Igualmente importante recordar el usuario/password que podemos utilizar, os aconsejamos utilizar sonic:

| Usuario | Password |
| ------- | -------- |
| root    | toor     |
| sonic   | pad      |

{% hint style="info" %}
Si tenemos nuestra Sonic Pad en un entorno con acceso de red compartido os aconsejamos cambiar estos passwords por unos propios por seguridad con el comando:

`sudo passwd root` -> si queremos cambiarlo para el usuario root

`sudo passwd sonic` -> en el caso del usuario sonic
{% endhint %}

También os aconsejamos actualizar el sistema mediante el comando `sudo apt-get update && sudo apt-get upgrade` para asegurarnos que tenemos todo actualizado.

### Kiauh

En esta distribución contamos con Kiauh que es un script que desde SSH y mediante sencillos menús nos va a permitir instalar, actualizar y eliminar componentes relacionados con Klipper.

<figure><img src="https://276162026-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FH6gCE2fgkkpOScJ72TP7%2Fuploads%2Foq4BfhzXKKGiMZ3Ua2cX%2Fimage.png?alt=media&#x26;token=63a3ccdf-feb0-41d0-9b07-233733796891" alt=""><figcaption></figcaption></figure>

Podremos lanzar Kiauh desde la línea de comandos de SSH lanzando `~/kiauh/kiauh.sh` (el path completo por información es `/home/sonic/kiauh/kiauh.sh`)

Toda la información de nuestra instancia de Klipper en nuestra nueva Sonic Pad custom la vamos a encontrar en el path `/home/sonic/printer_data/config`

{% hint style="warning" %}
**CONSEJOS SOBRE APAGADO DE LA SONIC PAD:**

**Para evitar problemas con el sistema os aconsejamos SIEMPRE realizar un apagado correcto de la Sonic Pad, apagar el sistema utilizando el botón de apagado/encendido es contraproducente.**

**El apagado correcto podremos realizarlo desde el interfaz web o Klipperscreen que disponen de opciones para ello apagando el sistema de la forma correcta.**
{% endhint %}

### Ajuste de zona horaria

Otro ajuste recomendable es el de la zona horaria para que la información de tiempos sea siempre correcta con nuestra localización.

Para ello:

* Podemos listar todas las zonas horarias con `timedatectl list-timezones | more`
* Para ajustar nuestra Sonic Pad a una zona horaria lo haremos con `timedatectl set-timezone 'Europe/Madrid'`
* Verificaremos que todo está correcto con `timedatectl` y reiniciaremos el sistema para que se apliquen los cambios

### Acelerómetro

Para aprovechar las capacidades de Klipper con su[ Input Shaper](https://klipper.3dwork.io/klipper/empezamos/input-shaper), os aconsejamos leer la guía del link, y el acelerómetro que podemos instalar en nuestra Sonic Pad os vamos a explicar el proceso para poder hacer funcionar este en nuestro custom firmware.

* Primero nos aseguramos que nuestro sistema esté completamente actualizado lanzando el siguiente comando desde nuestra linea de comandos SSH:

```bash
sudo apt update
```

* Instalaremos las dependencias para poder utilizar el acelerómetro y sus componentes

```bash
 sudo apt install binutils-arm-none-eabi libnewlib-arm-none-eabi libstdc++-arm-none-eabi-newlib gcc-arm-none-eabi
```

* Instalaremos los componentes para realizar los cálculos Input Shaper

```bash
sudo apt install python3-numpy python3-matplotlib libatlas-base-dev
```

* Añadiremos el componente numpy a nuestro entorno python virtual Klipper

```bash
~/klippy-env/bin/pip install -v nump
```

* Nos aseguramos que nuestro servicio Klipper MCU arranque al inicio

```bash
sudo cp ~klipper/scripts/klipper-mcu.service /etc/system/system/
```

* Aplicaremos el firmware Klipper a nuestra MCU Sonic Pad para tener acceso a sus pines/componentes (como en este caso el acelerómetro)

```bash
cd ~/klipper
make clean
make menuconfig # select "linux process"
make flash
```

* Ahora que ya hemos habilitado nuestra Sonic Pad como segunda MCU hemos de habilitar el acceso por parte de Klipper, añadiremos lo siguiente a nuestro `printer.cfg`

```django
[mcu rpi]
serial: /tmp/klipper_host_mcu

[adxl345]
cs_pin: rpi:None
spi_speed: 2000000
spi_bus: spidev2.0

[resonance_tester]
accel_chip: adxl345
accel_per_hz: 70
probe_points:
      117.5,117.5,10
```

Con esto ya tenemos listo nuestra Sonic Pad para utilizar su acelerómetro. Os aconsejamos revisar nuestra [**guía Input Shaper** ](https://klipper.3dwork.io/klipper/empezamos/input-shaper)para ver los siguientes pasos y ajustes.

***

#### Resolución de problemas - Errores al aplicar el firmware Klipper a la Sonic Pad para añadirla como segunda MCU

En algunos casos se pueden ver errores como el siguiente (unsupported locale setting) durante el proceso:

```bash
sonic@SonicPad:~/klipper$ make menuconfig #
Loaded configuration '/home/sonic/klipper/.config'
Traceback (most recent call last):
  File "/home/sonic/klipper/lib/kconfiglib/menuconfig.py", line 3281, in <module>
    _main()
  File "/home/sonic/klipper/lib/kconfiglib/menuconfig.py", line 661, in _main
    menuconfig(standard_kconfig(__doc__))
  File "/home/sonic/klipper/lib/kconfiglib/menuconfig.py", line 705, in menuconfig
    locale.setlocale(locale.LC_ALL, "")
  File "/usr/lib/python3.9/locale.py", line 610, in setlocale
    return _setlocale(category, locale)
locale.Error: unsupported locale setting
make: *** [Makefile:116: menuconfig] Error 1
```

Ejecutaremos los siguientes comandos para ajustar el locale en "en\_US UTF8"

```bash
export LC_ALL="en_US.UTF-8"
export LC_CTYPE="en_US.UTF-8"
sudo dpkg-reconfigure locales
```

#### Resolución de problemas - Durante el proceso de cálculo de resonancias se queda en "Wait for calculations"

Normalmente en estos casos puede ser por incompatibilidades entre la versión instalada de numpy y nuestro sistema, usando una versión anterior o actualizando esta suele ser la solución.

Para utilizar una versión anterior, donde podremos especificar la versión a usar:

```bash
~/klippy-env/bin/pip install -v numpy==1.25.2
```

### Añadir soporte USB para gcodes

Al realizar los cambios anteriores perdemos algunas de las funcionalidades que Creality integra en su firmware como es que podamos usar un USB para pasar los gcodes a nuestra máquina, algo que con Klipper no suele ser necesario salvo en determinados usos específicos por requerimiento... como por ejemplo tener la máquina en un entorno sin acceso a red.

* El primer paso, para simplificar el proceso, es darle un nombre estándar a nuestro USB... pongamos para la guía que le llamamos USB

{% hint style="warning" %}
Es importante recordar que Linux es sensible a mayúsculas y minúsculas por lo que el nombre que le des a tu USB ha de ser exactamente igual al que uses en los siguiente pasos.
{% endhint %}

* Editaremos la configuración de fstab que es el demonio que se encarga de montar unidades, esto lo haremos mediante el siguiente comando desde SSH `sudo nano /etc/fstab` (en la [guía de primeros pasos](https://klipper.3dwork.io/empezamos/puesta-en-marcha-inicial#conexion-a-ssh) tienes información de nano que es un editor de textos en línea de comandos para Linux) y añadiremos al final lo siguiente:

```bash
/dev/disk/by-label/USB  /home/sonic/printer_data/gcodes/USB    auto    defaults,uid=sonic      0       0
```

* Crearemos un punto de montaje para ello con `mkdir ~/printer_data/gcodes/USB`
* Montaremos todos los recursos `sudo mount -a`


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://klipper.3dwork.io/klipper/instalacion/guias-instalacion-especificas-impresora-electronica/creality-klipper/creality-sonic-pad-klipper-oficial-custom-firmware.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
