2. 树莓派与打印机主控板连接配置
任务说明
本案例目标:完成树莓派(运行Klipper固件上位机)与打印机主控板(下位机MCU)之间的物理连接与软件配置,使Klipper主机能够通过串口识别并通信主控板,为后续运动控制做好准备。任务闭环包括:接线确认、系统识别MCU串口设备、配置klipper.ko固件并烧录至MCU、修改printer.cfg中的串口参数、验证通信链路。
硬件连接与依赖
所需硬件:树莓派(推荐3B/4B)、打印机主控板(如SKR Mini E3 V2.0)、USB转TTL线或主控板原生USB接口、5V/3.3V电平匹配确认。软件依赖:树莓派已安装Klipper主机环境(含klipper、klipper-screen等),系统为Raspberry Pi OS Lite(32位或64位均可)。
接线要求:若主控板有原生USB口(如SKR系列),直接使用USB线连接树莓派与主控板;若主控板仅提供串口引脚(如老式RAMPS),则需USB转TTL模块,接线为:树莓派GND→转接板GND,树莓派TXD(GPIO14)→转接板RXD,树莓派RXD(GPIO15)→转接板TXD,切勿交叉接错。确认主控板跳线选择USB供电或外部供电,避免树莓派供电不足。
系统识别MCU设备
连接后,在树莓派终端执行以下命令,确认系统已识别主控板串口设备:
lsusb
ls /dev/serial/by-id/* 2>/dev/null || ls /dev/ttyUSB* /dev/ttyACM* 2>/dev/null
预期输出:lsusb显示主控板厂商信息(如STMicroelectronics或Creality);/dev/serial/by-id/下出现类似usb-Klipper_stm32f103xe_xxx-if00的稳定链接。若未出现,检查USB线缆、主控板供电及驱动(多数主控板使用CDC ACM类,内核自带驱动)。
编译并烧录MCU固件
Klipper通过编译专属固件并烧录至主控板实现通信。首先进入Klipper固件源码目录并配置:
cd ~/klipper
make menuconfig
在菜单中根据主控板型号设置:微控制器(如STM32F103)、Bootloader offset(如SKR Mini E3选28KiB)、通信接口(选USB或USART,取决于实际接线)。保存退出后编译:
make -j4
编译产物为out/klipper.bin。烧录方式取决于主控板:若支持SD卡烧录,将klipper.bin重命名为firmware.bin放入SD卡根目录,插入主控板并上电,等待约10秒完成烧录;若支持DFU模式(如STM32),执行:
sudo dfu-util -a 0 -D out/klipper.bin --dfuse-address 0x08000000:leave
烧录成功后,重新插拔USB线,再次执行ls /dev/serial/by-id/*,此时应出现以Klipper_stm32开头的设备链接。
配置printer.cfg串口参数
编辑Klipper配置文件(通常位于~/printer_data/config/printer.cfg),找到[mcu]段落,将串口路径修改为实际识别到的设备:
[mcu]
serial: /dev/serial/by-id/usb-Klipper_stm32f103xe_xxx-if00
restart_method: command
若使用USB转TTL模块连接,则需额外配置baud: 250000(与menuconfig中设置的波特率一致)。保存文件后,重启Klipper服务:
sudo systemctl restart klipper
验证通信链路
通过Klipper命令终端检查MCU是否在线:
cd ~/klipper/scripts
python3 flash_usb.py -s /dev/serial/by-id/usb-Klipper_stm32f103xe_xxx-if00
或使用Klipper的Moonraker API查询:
curl -X POST http://localhost:7125/printer/firmware/restart
观察Klipper日志(~/printer_data/logs/klippy.log),若出现类似Starting Klippy...且无Unable to open serial port错误,说明通信正常。进一步验证:在Klipper控制台发送QUERY_ENDSTOPS命令,若返回各限位开关状态(如x:open),则证明MCU已正确响应主机指令。
判定标准
满足以下条件即判定本案例通过:
ls /dev/serial/by-id/能稳定显示Klipper固件设备链接,且重启后链接名不变;- Klipper服务启动日志无串口错误,
QUERY_ENDSTOPS命令能返回限位状态; - 通过
FIRMWARE_RESTART命令后MCU能自动重连,无需手动插拔USB。