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 o PuTTY por ejemplo.

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

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

cd ~/klipper/
  • Instalaremos el soporte local para MCU, al usar el comando sudo nos solicitará la contraseña:

sudo cp ./scripts/klipper-mcu.service /etc/systemd/system/
  • Haremos que el servicio de MCU Klipper funcione en el arranque:

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:

cd ~/klipper/
make menuconfig
  • Pararemos por seguridad el servicio Klipper con el siguiento comando:

sudo service klipper stop
  • Ejecutaremos el comando siguiente para crear y aplicar el firmware Klipper para nuestro Host:

make flash
  • 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:

sudo service klipper start

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:

sudo usermod -a -G tty pi

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:

printer.cfg
# 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

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

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:

sudo raspi-config

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

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:

sudo raspi-config

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

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):

sudo nano /boot/config.txt
dtparam=i2c_arm=on,i2c_arm_baudrate=400000

Con este cambio habilitaremos el canal I2C para que use 400000 como baudrate, en caso que nuestro dispositivo use uno diferente deberiamos ajustarlo

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:

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

Última actualización