前言

前段时间看见 claude-desktop-buddy 这个项目,十分感兴趣,于是买了一个 M5StickC Plus,准备刷入 claude-desktop-buddy,本文介绍整个流程。

步骤

安装 platformio

使用 uv pip install platformio 安装 platformio。

platformio 安装

clone claude-desktop-buddy 项目

使用 git clone https://github.com/anthropics/claude-desktop-buddy.git 克隆项目。

连接 M5StickC Plus 到电脑(USB-C)

连接 M5StickC Plus 到电脑(USB-C)

刷固件

使用 pio run -t upload 刷入固件。

󰀵 ming …/claude-desktop-buddy   main   v3.13.12(#m5stack)   20:27  ❯ pio run -t upload

Processing m5stickc-plus (platform: espressif32; board: m5stick-c; framework: arduino)
------------------------------------------------------------------------------------------------------------------------
Tool Manager: Installing platformio/tool-esptoolpy @ ~2.41100.0
Unpacking  [####################################]  100%
Collecting cryptography~=45.0.3
  Downloading cryptography-45.0.7-cp311-abi3-macosx_10_9_universal2.whl.metadata (5.7 kB)
Collecting ecdsa~=0.19.1
  Downloading ecdsa-0.19.2-py2.py3-none-any.whl.metadata (29 kB)
Collecting bitstring~=4.3.1
  Downloading bitstring-4.3.1-py3-none-any.whl.metadata (5.3 kB)
Collecting reedsolo~=1.7.0
  Downloading reedsolo-1.7.0-py3-none-any.whl.metadata (23 kB)
Collecting intelhex~=2.3.0
  Downloading intelhex-2.3.0-py2.py3-none-any.whl.metadata (2.7 kB)
Collecting cffi>=1.14 (from cryptography~=45.0.3)
  Downloading cffi-2.0.0-cp313-cp313-macosx_11_0_arm64.whl.metadata (2.6 kB)
Collecting six>=1.9.0 (from ecdsa~=0.19.1)
  Downloading six-1.17.0-py2.py3-none-any.whl.metadata (1.7 kB)
Collecting bitarray<4.0,>=3.0.0 (from bitstring~=4.3.1)
  Downloading bitarray-3.8.1-cp313-cp313-macosx_11_0_arm64.whl.metadata (34 kB)
Collecting pycparser (from cffi>=1.14->cryptography~=45.0.3)
  Downloading pycparser-3.0-py3-none-any.whl.metadata (8.2 kB)
Downloading cryptography-45.0.7-cp311-abi3-macosx_10_9_universal2.whl (7.0 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 7.0/7.0 MB 20.9 MB/s  0:00:00
Downloading ecdsa-0.19.2-py2.py3-none-any.whl (150 kB)
Downloading bitstring-4.3.1-py3-none-any.whl (71 kB)
Downloading reedsolo-1.7.0-py3-none-any.whl (32 kB)
Downloading intelhex-2.3.0-py2.py3-none-any.whl (50 kB)
Downloading bitarray-3.8.1-cp313-cp313-macosx_11_0_arm64.whl (146 kB)
Downloading cffi-2.0.0-cp313-cp313-macosx_11_0_arm64.whl (181 kB)
Downloading six-1.17.0-py2.py3-none-any.whl (11 kB)
Downloading pycparser-3.0-py3-none-any.whl (48 kB)
Installing collected packages: reedsolo, intelhex, bitarray, six, pycparser, bitstring, ecdsa, cffi, cryptography
Successfully installed bitarray-3.8.1 bitstring-4.3.1 cffi-2.0.0 cryptography-45.0.7 ecdsa-0.19.2 intelhex-2.3.0 pycparser-3.0 reedsolo-1.7.0 six-1.17.0
Tool Manager: [email protected] has been installed!
Tool Manager: Installing platformio/tool-mkspiffs @ ~2.230.0
Downloading  [####################################]  100%
Unpacking  [####################################]  100%
Tool Manager: [email protected] has been installed!
Tool Manager: Installing platformio/tool-mklittlefs @ ~1.203.0
Downloading  [####################################]  100%
Unpacking  [####################################]  100%
Tool Manager: [email protected] has been installed!
Tool Manager: Installing platformio/tool-mkfatfs @ ~2.0.0
Downloading  [####################################]  100%
Unpacking  [####################################]  100%
Tool Manager: [email protected] has been installed!
Tool Manager: Installing platformio/tool-scons @ ~4.40801.0
Downloading  [####################################]  100%
Unpacking  [####################################]  100%
Tool Manager: [email protected] has been installed!
Library Manager: Installing m5stack/M5StickCPlus
Downloading  [####################################]  100%
Unpacking  [####################################]  100%
Library Manager: [email protected] has been installed!
Library Manager: Installing bitbank2/AnimatedGIF @ ^2.1.1
Downloading  [####################################]  100%
Unpacking  [####################################]  100%
Library Manager: [email protected] has been installed!
Library Manager: Installing bblanchon/ArduinoJson @ ^7.0.0
Downloading  [####################################]  100%
Unpacking  [####################################]  100%
Library Manager: [email protected] has been installed!
Verbose mode can be enabled via `-v, --verbose` option
CONFIGURATION: https://docs.platformio.org/page/boards/espressif32/m5stick-c.html
PLATFORM: Espressif 32 (7.0.1) > M5Stick-C
HARDWARE: ESP32 160MHz, 320KB RAM, 4MB Flash
DEBUG: Current (cmsis-dap) External (cmsis-dap, esp-bridge, esp-prog, iot-bus-jtag, jlink, minimodule, olimex-arm-usb-ocd, olimex-arm-usb-ocd-h, olimex-arm-usb-tiny-h, olimex-jtag-tiny, tumpa)
PACKAGES:
 - framework-arduinoespressif32 @ 3.20017.241212+sha.dcc1105b
 - tool-esptoolpy @ 2.41100.0 (4.11.0)
 - tool-mkfatfs @ 2.0.1
 - tool-mklittlefs @ 1.203.210628 (2.3)
 - tool-mkspiffs @ 2.230.0 (2.30)
 - toolchain-xtensa-esp32 @ 8.4.0+2021r2-patch5
LDF: Library Dependency Finder -> https://bit.ly/configure-pio-ldf
LDF Modes: Finder ~ chain, Compatibility ~ soft
Found 36 compatible libraries
Scanning dependencies...
Dependency Graph
|-- M5StickCPlus @ 0.1.1
|-- AnimatedGIF @ 2.2.2
|-- ArduinoJson @ 7.4.3
|-- ESP32 BLE Arduino @ 2.0.0
|-- LittleFS @ 2.0.0
|-- Preferences @ 2.0.0
Building in release mode
Compiling .pio/build/m5stickc-plus/src/ble_bridge.cpp.o
Compiling .pio/build/m5stickc-plus/src/buddies/axolotl.cpp.o
Compiling .pio/build/m5stickc-plus/src/buddies/blob.cpp.o
Compiling .pio/build/m5stickc-plus/src/buddies/cactus.cpp.o
Compiling .pio/build/m5stickc-plus/src/buddies/capybara.cpp.o
Compiling .pio/build/m5stickc-plus/src/buddies/cat.cpp.o
Compiling .pio/build/m5stickc-plus/src/buddies/chonk.cpp.o
Compiling .pio/build/m5stickc-plus/src/buddies/dragon.cpp.o
Compiling .pio/build/m5stickc-plus/src/buddies/duck.cpp.o
Compiling .pio/build/m5stickc-plus/src/buddies/ghost.cpp.o
Compiling .pio/build/m5stickc-plus/src/buddies/goose.cpp.o
Compiling .pio/build/m5stickc-plus/src/buddies/mushroom.cpp.o
Compiling .pio/build/m5stickc-plus/src/buddies/octopus.cpp.o
Compiling .pio/build/m5stickc-plus/src/buddies/owl.cpp.o
Compiling .pio/build/m5stickc-plus/src/buddies/penguin.cpp.o
Compiling .pio/build/m5stickc-plus/src/buddies/rabbit.cpp.o
Compiling .pio/build/m5stickc-plus/src/buddies/robot.cpp.o
Compiling .pio/build/m5stickc-plus/src/buddies/snail.cpp.o
Compiling .pio/build/m5stickc-plus/src/buddies/turtle.cpp.o
Compiling .pio/build/m5stickc-plus/src/buddy.cpp.o
Compiling .pio/build/m5stickc-plus/src/character.cpp.o
Compiling .pio/build/m5stickc-plus/src/main.cpp.o
Building .pio/build/m5stickc-plus/bootloader.bin
Generating partitions .pio/build/m5stickc-plus/partitions.bin
Compiling .pio/build/m5stickc-plus/liba41/SPI/SPI.cpp.o
Compiling .pio/build/m5stickc-plus/lib270/Wire/Wire.cpp.o
esptool.py v4.11.0
Creating esp32 image...
Merged 1 ELF section
Successfully created esp32 image.
Compiling .pio/build/m5stickc-plus/libc92/FS/FS.cpp.o
Compiling .pio/build/m5stickc-plus/libc92/FS/vfs_api.cpp.o
Compiling .pio/build/m5stickc-plus/lib489/SPIFFS/SPIFFS.cpp.o
Compiling .pio/build/m5stickc-plus/libd34/M5StickCPlus/AXP192.cpp.o
Compiling .pio/build/m5stickc-plus/libd34/M5StickCPlus/Fonts/Font16.c.o
Archiving .pio/build/m5stickc-plus/liba41/libSPI.a
Archiving .pio/build/m5stickc-plus/lib270/libWire.a
Compiling .pio/build/m5stickc-plus/libd34/M5StickCPlus/Fonts/Font32rle.c.o
Compiling .pio/build/m5stickc-plus/libd34/M5StickCPlus/Fonts/Font64rle.c.o
Compiling .pio/build/m5stickc-plus/libd34/M5StickCPlus/Fonts/Font72rle.c.o
Archiving .pio/build/m5stickc-plus/lib489/libSPIFFS.a
Compiling .pio/build/m5stickc-plus/libd34/M5StickCPlus/Fonts/Font7srle.c.o
Archiving .pio/build/m5stickc-plus/libc92/libFS.a
Compiling .pio/build/m5stickc-plus/libd34/M5StickCPlus/Fonts/glcdfont.c.o
Compiling .pio/build/m5stickc-plus/libd34/M5StickCPlus/M5Display.cpp.o
Compiling .pio/build/m5stickc-plus/libd34/M5StickCPlus/M5StickCPlus.cpp.o
Compiling .pio/build/m5stickc-plus/libd34/M5StickCPlus/RTC.cpp.o
Compiling .pio/build/m5stickc-plus/libd34/M5StickCPlus/utility/Button.cpp.o
Compiling .pio/build/m5stickc-plus/libd34/M5StickCPlus/utility/In_eSPI.cpp.o
Compiling .pio/build/m5stickc-plus/libd34/M5StickCPlus/utility/MPU6886.cpp.o
Compiling .pio/build/m5stickc-plus/libd34/M5StickCPlus/utility/MahonyAHRS.cpp.o
Compiling .pio/build/m5stickc-plus/libd34/M5StickCPlus/utility/Speaker.cpp.o
Compiling .pio/build/m5stickc-plus/libd34/M5StickCPlus/utility/Sprite.cpp.o
Compiling .pio/build/m5stickc-plus/libd34/M5StickCPlus/utility/qrcode.c.o
Compiling .pio/build/m5stickc-plus/libc04/AnimatedGIF/AnimatedGIF.cpp.o
Compiling .pio/build/m5stickc-plus/libc04/AnimatedGIF/p4_transparent.S.o
Indexing .pio/build/m5stickc-plus/lib489/libSPIFFS.a
Indexing .pio/build/m5stickc-plus/lib270/libWire.a
Indexing .pio/build/m5stickc-plus/libc92/libFS.a
Indexing .pio/build/m5stickc-plus/liba41/libSPI.a
Compiling .pio/build/m5stickc-plus/libc04/AnimatedGIF/s3_transparent.S.o
Compiling .pio/build/m5stickc-plus/libd28/BLE/BLE2902.cpp.o
Compiling .pio/build/m5stickc-plus/libd28/BLE/BLE2904.cpp.o
Compiling .pio/build/m5stickc-plus/libd28/BLE/BLEAddress.cpp.o
Compiling .pio/build/m5stickc-plus/libd28/BLE/BLEAdvertisedDevice.cpp.o
Compiling .pio/build/m5stickc-plus/libd28/BLE/BLEAdvertising.cpp.o
Compiling .pio/build/m5stickc-plus/libd28/BLE/BLEBeacon.cpp.o
Compiling .pio/build/m5stickc-plus/libd28/BLE/BLECharacteristic.cpp.o
Compiling .pio/build/m5stickc-plus/libd28/BLE/BLECharacteristicMap.cpp.o
Compiling .pio/build/m5stickc-plus/libd28/BLE/BLEClient.cpp.o
Archiving .pio/build/m5stickc-plus/libc04/libAnimatedGIF.a
Compiling .pio/build/m5stickc-plus/libd28/BLE/BLEDescriptor.cpp.o
Compiling .pio/build/m5stickc-plus/libd28/BLE/BLEDescriptorMap.cpp.o
Indexing .pio/build/m5stickc-plus/libc04/libAnimatedGIF.a
Compiling .pio/build/m5stickc-plus/libd28/BLE/BLEDevice.cpp.o
Compiling .pio/build/m5stickc-plus/libd28/BLE/BLEEddystoneTLM.cpp.o
Compiling .pio/build/m5stickc-plus/libd28/BLE/BLEEddystoneURL.cpp.o
Compiling .pio/build/m5stickc-plus/libd28/BLE/BLEExceptions.cpp.o
Compiling .pio/build/m5stickc-plus/libd28/BLE/BLEHIDDevice.cpp.o
Compiling .pio/build/m5stickc-plus/libd28/BLE/BLERemoteCharacteristic.cpp.o
Archiving .pio/build/m5stickc-plus/libd34/libM5StickCPlus.a
Compiling .pio/build/m5stickc-plus/libd28/BLE/BLERemoteDescriptor.cpp.o
Indexing .pio/build/m5stickc-plus/libd34/libM5StickCPlus.a
Compiling .pio/build/m5stickc-plus/libd28/BLE/BLERemoteService.cpp.o
Compiling .pio/build/m5stickc-plus/libd28/BLE/BLEScan.cpp.o
Compiling .pio/build/m5stickc-plus/libd28/BLE/BLESecurity.cpp.o
Compiling .pio/build/m5stickc-plus/libd28/BLE/BLEServer.cpp.o
Compiling .pio/build/m5stickc-plus/libd28/BLE/BLEService.cpp.o
Compiling .pio/build/m5stickc-plus/libd28/BLE/BLEServiceMap.cpp.o
Compiling .pio/build/m5stickc-plus/libd28/BLE/BLEUUID.cpp.o
Compiling .pio/build/m5stickc-plus/libd28/BLE/BLEUtils.cpp.o
Compiling .pio/build/m5stickc-plus/libd28/BLE/BLEValue.cpp.o
Compiling .pio/build/m5stickc-plus/libd28/BLE/FreeRTOS.cpp.o
Compiling .pio/build/m5stickc-plus/libd28/BLE/GeneralUtils.cpp.o
Compiling .pio/build/m5stickc-plus/lib3f6/LittleFS/LittleFS.cpp.o
Compiling .pio/build/m5stickc-plus/lib90f/Preferences/Preferences.cpp.o
Compiling .pio/build/m5stickc-plus/FrameworkArduino/Esp.cpp.o
Compiling .pio/build/m5stickc-plus/FrameworkArduino/FirmwareMSC.cpp.o
Compiling .pio/build/m5stickc-plus/FrameworkArduino/FunctionalInterrupt.cpp.o
Compiling .pio/build/m5stickc-plus/FrameworkArduino/HWCDC.cpp.o
Compiling .pio/build/m5stickc-plus/FrameworkArduino/HardwareSerial.cpp.o
Compiling .pio/build/m5stickc-plus/FrameworkArduino/IPAddress.cpp.o
Compiling .pio/build/m5stickc-plus/FrameworkArduino/IPv6Address.cpp.o
Compiling .pio/build/m5stickc-plus/FrameworkArduino/MD5Builder.cpp.o
Compiling .pio/build/m5stickc-plus/FrameworkArduino/Print.cpp.o
Compiling .pio/build/m5stickc-plus/FrameworkArduino/Stream.cpp.o
Compiling .pio/build/m5stickc-plus/FrameworkArduino/StreamString.cpp.o
Compiling .pio/build/m5stickc-plus/FrameworkArduino/Tone.cpp.o
Compiling .pio/build/m5stickc-plus/FrameworkArduino/USB.cpp.o
Compiling .pio/build/m5stickc-plus/FrameworkArduino/USBCDC.cpp.o
Compiling .pio/build/m5stickc-plus/FrameworkArduino/USBMSC.cpp.o
Archiving .pio/build/m5stickc-plus/libd28/libBLE.a
Archiving .pio/build/m5stickc-plus/lib3f6/libLittleFS.a
Compiling .pio/build/m5stickc-plus/FrameworkArduino/WMath.cpp.o
Indexing .pio/build/m5stickc-plus/lib3f6/libLittleFS.a
Archiving .pio/build/m5stickc-plus/lib90f/libPreferences.a
Compiling .pio/build/m5stickc-plus/FrameworkArduino/WString.cpp.o
Indexing .pio/build/m5stickc-plus/libd28/libBLE.a
Indexing .pio/build/m5stickc-plus/lib90f/libPreferences.a
Compiling .pio/build/m5stickc-plus/FrameworkArduino/base64.cpp.o
Compiling .pio/build/m5stickc-plus/FrameworkArduino/cbuf.cpp.o
Compiling .pio/build/m5stickc-plus/FrameworkArduino/esp32-hal-adc.c.o
Compiling .pio/build/m5stickc-plus/FrameworkArduino/esp32-hal-bt.c.o
Compiling .pio/build/m5stickc-plus/FrameworkArduino/esp32-hal-cpu.c.o
Compiling .pio/build/m5stickc-plus/FrameworkArduino/esp32-hal-dac.c.o
Compiling .pio/build/m5stickc-plus/FrameworkArduino/esp32-hal-gpio.c.o
Compiling .pio/build/m5stickc-plus/FrameworkArduino/esp32-hal-i2c-slave.c.o
Compiling .pio/build/m5stickc-plus/FrameworkArduino/esp32-hal-i2c.c.o
Compiling .pio/build/m5stickc-plus/FrameworkArduino/esp32-hal-ledc.c.o
Compiling .pio/build/m5stickc-plus/FrameworkArduino/esp32-hal-matrix.c.o
Compiling .pio/build/m5stickc-plus/FrameworkArduino/esp32-hal-misc.c.o
Compiling .pio/build/m5stickc-plus/FrameworkArduino/esp32-hal-psram.c.o
Compiling .pio/build/m5stickc-plus/FrameworkArduino/esp32-hal-rgb-led.c.o
Compiling .pio/build/m5stickc-plus/FrameworkArduino/esp32-hal-rmt.c.o
Compiling .pio/build/m5stickc-plus/FrameworkArduino/esp32-hal-sigmadelta.c.o
Compiling .pio/build/m5stickc-plus/FrameworkArduino/esp32-hal-spi.c.o
Compiling .pio/build/m5stickc-plus/FrameworkArduino/esp32-hal-time.c.o
Compiling .pio/build/m5stickc-plus/FrameworkArduino/esp32-hal-timer.c.o
Compiling .pio/build/m5stickc-plus/FrameworkArduino/esp32-hal-tinyusb.c.o
Compiling .pio/build/m5stickc-plus/FrameworkArduino/esp32-hal-touch.c.o
Compiling .pio/build/m5stickc-plus/FrameworkArduino/esp32-hal-uart.c.o
Compiling .pio/build/m5stickc-plus/FrameworkArduino/firmware_msc_fat.c.o
Compiling .pio/build/m5stickc-plus/FrameworkArduino/libb64/cdecode.c.o
Compiling .pio/build/m5stickc-plus/FrameworkArduino/libb64/cencode.c.o
Compiling .pio/build/m5stickc-plus/FrameworkArduino/main.cpp.o
Compiling .pio/build/m5stickc-plus/FrameworkArduino/stdlib_noniso.c.o
Compiling .pio/build/m5stickc-plus/FrameworkArduino/wiring_pulse.c.o
Compiling .pio/build/m5stickc-plus/FrameworkArduino/wiring_shift.c.o
Archiving .pio/build/m5stickc-plus/libFrameworkArduino.a
Indexing .pio/build/m5stickc-plus/libFrameworkArduino.a
Linking .pio/build/m5stickc-plus/firmware.elf
Retrieving maximum program size .pio/build/m5stickc-plus/firmware.elf
Checking size .pio/build/m5stickc-plus/firmware.elf
Advanced Memory Usage is available via "PlatformIO Home > Project Inspect"
RAM:   [==        ]  22.4% (used 73492 bytes from 327680 bytes)
Flash: [======    ]  64.8% (used 1357937 bytes from 2097152 bytes)
Building .pio/build/m5stickc-plus/firmware.bin
esptool.py v4.11.0
Creating esp32 image...
Merged 27 ELF sections
Successfully created esp32 image.
Configuring upload protocol...
AVAILABLE: cmsis-dap, esp-bridge, esp-prog, espota, esptool, iot-bus-jtag, jlink, minimodule, olimex-arm-usb-ocd, olimex-arm-usb-ocd-h, olimex-arm-usb-tiny-h, olimex-jtag-tiny, tumpa
CURRENT: upload_protocol = esptool
Looking for upload port...
Auto-detected: /dev/cu.usbserial-8D52B9E74F
Uploading .pio/build/m5stickc-plus/firmware.bin
esptool.py v4.11.0
Serial port /dev/cu.usbserial-8D52B9E74F
Connecting....
Chip is ESP32-PICO-D4 (revision v1.1)
Features: WiFi, BT, Dual Core, 240MHz, Embedded Flash, VRef calibration in efuse, Coding Scheme None
Crystal is 40MHz
MAC: c8:85:41:68:33:64
Uploading stub...
Running stub...
Stub running...
Changing baud rate to 1500000
Changed.
Configuring flash size...
Flash will be erased from 0x00001000 to 0x00005fff...
Flash will be erased from 0x00008000 to 0x00008fff...
Flash will be erased from 0x0000e000 to 0x0000ffff...
Flash will be erased from 0x00010000 to 0x0015dfff...
SHA digest in image updated
Compressed 17536 bytes to 12202...
Writing at 0x00001000... (100 %)
Wrote 17536 bytes (12202 compressed) at 0x00001000 in 0.3 seconds (effective 508.2 kbit/s)...
Hash of data verified.
Compressed 3072 bytes to 134...
Writing at 0x00008000... (100 %)
Wrote 3072 bytes (134 compressed) at 0x00008000 in 0.0 seconds (effective 614.0 kbit/s)...
Hash of data verified.
Compressed 8192 bytes to 47...
Writing at 0x0000e000... (100 %)
Wrote 8192 bytes (47 compressed) at 0x0000e000 in 0.1 seconds (effective 978.3 kbit/s)...
Hash of data verified.
Compressed 1364512 bytes to 839192...
Writing at 0x00010000... (1 %)
Writing at 0x0001a80f... (3 %)
Writing at 0x00028017... (5 %)
Writing at 0x0003292e... (7 %)
Writing at 0x0003e689... (9 %)
Writing at 0x000502f9... (11 %)
Writing at 0x00056ec5... (13 %)
Writing at 0x0005ccdc... (15 %)
Writing at 0x00062782... (17 %)
Writing at 0x00067e70... (19 %)
Writing at 0x0006da7d... (21 %)
Writing at 0x000733ed... (23 %)
Writing at 0x00078dab... (25 %)
Writing at 0x0007ebe2... (26 %)
Writing at 0x000847ae... (28 %)
Writing at 0x00089e32... (30 %)
Writing at 0x0008f4b7... (32 %)
Writing at 0x00094acf... (34 %)
Writing at 0x00099e5f... (36 %)
Writing at 0x000a0180... (38 %)
Writing at 0x000a5a46... (40 %)
Writing at 0x000ab4ec... (42 %)
Writing at 0x000b1467... (44 %)
Writing at 0x000b6c9f... (46 %)
Writing at 0x000bc3b8... (48 %)
Writing at 0x000c1df7... (50 %)
Writing at 0x000c752b... (51 %)
Writing at 0x000cd0da... (53 %)
Writing at 0x000d2e64... (55 %)
Writing at 0x000d90d8... (57 %)
Writing at 0x000dfa7d... (59 %)
Writing at 0x000e52f6... (61 %)
Writing at 0x000eaea2... (63 %)
Writing at 0x000f03b6... (65 %)
Writing at 0x000f5902... (67 %)
Writing at 0x000fb2b7... (69 %)
Writing at 0x001003f2... (71 %)
Writing at 0x00106373... (73 %)
Writing at 0x0010c1d2... (75 %)
Writing at 0x0011221b... (76 %)
Writing at 0x00117da7... (78 %)
Writing at 0x0011d794... (80 %)
Writing at 0x0012301d... (82 %)
Writing at 0x00128b7c... (84 %)
Writing at 0x00130b44... (86 %)
Writing at 0x00137ed7... (88 %)
Writing at 0x0013ff28... (90 %)
Writing at 0x00145a66... (92 %)
Writing at 0x0014af92... (94 %)
Writing at 0x00150e83... (96 %)
Writing at 0x0015619d... (98 %)
Writing at 0x0015bd46... (100 %)
Wrote 1364512 bytes (839192 compressed) at 0x00010000 in 10.5 seconds (effective 1041.2 kbit/s)...
Hash of data verified.

Leaving...
Hard resetting via RTS pin...
============================================= [SUCCESS] Took 61.01 seconds =============================================

󰀵 ming …/claude-desktop-buddy   main   v3.13.12(#m5stack)   20:28   in 1m1s232ms ❯

很快,就刷好了固件。

其它

如果你的设备之前已经刷过机,请先将其擦除:

pio run -t erase && pio run -t upload

运行后,您还可以清除设备本身的所有内容:按住 A → 设置 → 重置 → 恢复出厂设置 → 点击两次。

配对

打开 claude 软件,启用开发者模式 (help->troubleshooting->enable developer mode) 然后再 developer 选项中打开 open hardware buddy。

open hardware buddy

点击连接。

点击连接

效果

配对成功后,设备上就会显示 buddy 的状态界面,包括 mood、fed、energy 等信息。

设备状态界面

按 A 键可以切换屏幕,B 键翻页,长按 A 进入菜单。下面是说明页:

设备说明页

小结

整个过程比想象中要简单:装好 platformio,clone 项目,连上 M5StickC Plus,一条 pio run -t upload 就能把固件刷进去,全程不到一分钟。配对也只需要在 Claude 桌面端打开开发者模式,连接硬件 buddy 即可。

刷好后,这只小宠物会显示 mood、fed、energy 等状态,可以通过按键切换屏幕和翻页,把 Claude 真正"摆"到了桌面上,是个很有趣的小玩具。如果你手上正好有一块 M5StickC Plus(或其它兼容的 M5Stack 设备),不妨花几分钟动手试试。

几个小提示:

  • 如果设备之前刷过其它固件,记得先 pio run -t erase 再刷,避免残留数据导致异常。
  • 刷机和配对都依赖 USB-C 数据线,确保用的是数据线而非仅供电的线。
  • 配对走的是 BLE,连接时让设备和电脑保持在较近的距离。

参考