> For the complete documentation index, see [llms.txt](https://klipper.3dwork.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://klipper.3dwork.io/klipper/mejoras/raspberry-como-segunda-mcu.md).

# Host como segunda MCU

En ocasiones como por ejemplo añadir un sensor acelerómetro, un relé de apagado o la gestión de dispositivos por GPIO nos puede interesar usar nuestro host como segunda MCU y poder integrarla para su uso en Klipper.

## Instalación firmware Klipper en nuestro Host para que actúe como MCU

El proceso es muy sencillo:

* Usando nuestro cliente SSH/Terminal favorito nos conectaremos a nuestro Host. Os aconsejamos usar [Terminus](https://termius.com/) o [PuTTY](https://www.putty.org/) por ejemplo.

{% hint style="info" %}
Para OS Raspberry, recordamos que por defecto normalmente se usa "**pi**" como nombre de usuario y "**raspberry**" como contraseña.

Revisar en cualquier caso el user/password de vuestro sistema
{% endhint %}

* Entraremos en el directorio de Klipper lanzando el siguiente comando:

{% code overflow="wrap" %}

```bash
cd ~/klipper/
```

{% endcode %}

* Instalaremos el soporte local para MCU, al usar el comando sudo nos solicitará la contraseña:

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

* Haremos que el servicio de MCU Klipper funcione en el arranque:

```bash
sudo systemctl enable klipper-mcu.service
```

* Crearemos nuestro firmware Klipper para nuestro Host, en las opciones iremos con las flechas a la opción **Micro-controller Architecture** y pulsando enter seleccionaremos de la lista **Linux process** una vez seleccionado pulsaremos **Q** e **Y** para confirmar:

```bash
cd ~/klipper/
make menuconfig
```

<figure><img src="/files/jfTp6YyBn281O9tlacmi" alt=""><figcaption></figcaption></figure>

* Pararemos por seguridad el servicio Klipper con el siguiento comando:

```bash
sudo service klipper stop
```

* Ejecutaremos el comando siguiente para crear y aplicar el firmware Klipper para nuestro Host:

```bash
make flash
```

<figure><img src="/files/LWjPIGp5VKApiyVQx5uq" alt=""><figcaption></figcaption></figure>

* Ahora tan solo tenemos que iniciar nuestro servicio Klipper y si hemos seguido las instrucciones correctamente y no falló ningún paso ya tendremos nuestro Host como segunda MCU:

```bash
sudo service klipper start
```

{% hint style="warning" %}
Si nuestro **Klipper no conecta con nuestro Host como MCU podemos revisar el log de Klipper (klippy.log):**

* revisaremos que el servicio klipper-mcu funcione correctamente\
  `systemctl status klipper-mcu`\
  Nos debería retornar algo así:\
  `klipper@bigtreetech-cb1:~# systemctl status klipper-mcu ● klipper-mcu.service - Starts the MCU Linux firmware for klipper on startup Loaded: loaded (/etc/systemd/system/klipper-mcu.service; enabled; preset: enabled) Active: activating (auto-restart) (Result: exit-code) since Mon 2023-12-11 19:39:56 CET; 4s ago Docs: https://www.klipper3d.org/RPi_microcontroller.html Process: 2408 ExecStart=/usr/local/bin/klipper_mcu -r -I ${KLIPPER_HOST_MCU_SERIAL} (code=exited, status=255/EXCEPTION) Main PID: 2408 (code=exited, status=255/EXCEPTION) CPU: 6ms`\
  En el caso que nos indique que el servicio no este funcionando y mediante un sudo service klipper-mcu restart nos diga que el servicio no existe realizaremos los pasos previos para montarlo
* **si vemos problemas de Permission denied al intentar conectar a /tmp/klipper\_host\_mcu** podemos intentar reparando añadiendo permisos al usuario pi al grupo tty necesario para el acceso:

```bash
sudo usermod -a -G tty pi
```

{% endhint %}

## Añadir nuestro MCU Host a nuestra configuración

Ahora solo nos queda añadir a nuestro printer.cfg la configuración de nuestra nueva MCU:

{% code title="printer.cfg" %}

```django
# The rpi microcontroller is used as secondary.
# Typically, both the X and Y axes
# are connected to the main micro-controller. The rpi microcontroller is used
# on non time-critical functions such as enclosure sensors, additional fan or
# light sources
[mcu host]
serial: /tmp/klipper_host_mcu
```

{% endcode %}

{% hint style="info" %}
Podemos cambiar el nombre de host en la definición de la sección \[mcu por otro más descriptivo como rpi, raspberry, cb1 o host si os es más sencillo para identificarla, en todo caso recordad que ese será el nombre que debereis usar al definir componentes conectados a nuestro host `pin: host:gpio211` a modo de ejemplo
{% endhint %}

## Habilitar SPI (Raspberry)

Este paso es opcional y normalmente se utilizará en el caso de que queramos usar un componente externo SPI conectado a nuestra RPI como por ejemplo un acelerómetro.

Para ello y desde SSH ejecutaremos:

```bash
sudo raspi-config
```

Encontraremos la **opción de habilitar SPI en Interfacing options**:

![](/files/Oqj3QRkYei2sdpS8Sjrv)

## Habilitar I2C (Raspberry)

Al igual que el paso anterior, en ocasiones puede interesarnos habilitar el soporte para I2C, normalmente para acelerómetros de la familia MPU.

Para ello y desde SSH ejecutaremos:

```bash
sudo raspi-config
```

Encontraremos la **opción de habilitar I2C en Interfacing options**:

![](/files/1inXH6TjuItAlbUbXnwP)

Además, en este caso necesitaremos añadir o des comentar unas líneas de nuestro /boot/config.txt (o /boot/firmware/config.txt dependiendo de la distro usada para instalar el OS en nuestra RPI):

{% code title="sudo nano /boot/config.txt" %}

```bash
dtparam=i2c_arm=on,i2c_arm_baudrate=400000
```

{% endcode %}

{% hint style="info" %}
Con este cambio habilitaremos el canal I2C para que use 400000 como baudrate, en caso que nuestro dispositivo use uno diferente deberiamos ajustarlo
{% endhint %}

## Utilidades GPIO (Raspberry)

Ahora que ya podemos usar nuestra Raspberry como segunda MCU de nuestro Klipper y dado que normalmente el objetivo suele ser para poder tener control desde Klipper sobre las funcionalidades de nuestra Raspberry como pueda ser el acceso a los GPIO os sugerimos algunas herramientas que facilitarán la gestión:

* Lo primero que haremos será instalar las herramientas para tenerlas disponibles:

```bash
sudo apt-get install gpiod
```

* Con gpiod instalado ya dispondremos de comandos útiles para la gestión de nuestro GPIO:

  * **gpiodetect**, que nos permitirá detectar nuestros gpio
  * **gpioinfo**, nos proporcionará información sobre gpio

  <figure><img src="/files/fz6rBMAiG216FnfDd0kT" alt=""><figcaption></figcaption></figure>
