WalkPrint is a Flipper Zero external app for a WalkPrint / YHK-style thermal printer that can print typed messages, .txt files from the SD card, and 384px wide BMP images. It uses a single live path through an external ESP32 bridge instead of pretending the Flipper can talk to a Classic Bluetooth printer on its own.
| Features | Features |
|---|---|
| Print custom typed messages | Print .txt files from the SD card |
Print 384px BMP images from the SD card |
Discover nearby supported printers |
| Connect through the ESP32 Classic Bluetooth bridge | Scan Wi-Fi from the bridge |
| Adjust density, font size, spacing, and font family | Save printer address and print settings |
The app talks to an ESP32-WROOM over Flipper USART at 115200 8N1, and the ESP32 handles:
- Classic Bluetooth SPP printer discovery and connection
- raw printer byte transport
- Wi-Fi scan/status helpers
The build scripts prefer your local Momentum firmware checkout when it is present.
- The Flipper app builds cleanly against Momentum and outputs dist/walkprint.fap.
- The app UI now includes printer discovery, Wi-Fi scan, configurable message font size/family settings,
.txtprinting from the SD card, and BMP printing from the SD card. - The live transport in walkprint_transport_live.c uses Flipper header pins
13/14(PB6/PB7) at115200. - The ESP32 bridge sketch lives at esp32_bridge/walkprint_esp32_bridge/walkprint_esp32_bridge.ino.
- The optional WalkPrint Bridge is a PC-side Python script under
bridge/for desktop helpers like image conversion and direct PC printing. It is not required for the Flipper Zero app.
The ESP32 bridge is the practical transport layer for this setup because it can own Classic Bluetooth SPP while the Flipper app stays on a supported UART link.
![]() |
![]() |
![]() |
Files:
- Bridge sketch: esp32_bridge/walkprint_esp32_bridge/walkprint_esp32_bridge.ino
- Bridge notes: esp32_bridge
Wiring:
- ESP32
GPIO17TX -> FlipperPB7RX - ESP32
GPIO16RX -> FlipperPB6TX GND->GND
Protocol examples:
PINGBT_SCANBT_CONNECT|25:00:35:00:03:57BT_WRITE_HEX|...WIFI_SCAN
.
|-- .gitignore
|-- README.md
|-- application.fam
|-- app_ui.c
|-- app_ui.h
|-- build.sh
|-- deploy.sh
|-- walkprint_app.c
|-- walkprint_app.h
|-- walkprint_config.h
|-- walkprint_debug.c
|-- walkprint_debug.h
|-- walkprint_protocol.c
|-- walkprint_protocol.h
|-- walkprint_transport.h
`-- walkprint_transport_live.c
Printer-specific placeholders live in walkprint_config.h.
Edit these first:
walkprint_config_init_framewalkprint_config_start_print_framewalkprint_config_end_print_framewalkprint_config_feed_framewalkprint_config_raw_framewalkprint_demo_receipt_lines
export FLIPPER_FW_PATH=/path/to/Momentum-Firmware
./build.shOptional:
./build.sh --fw-path /path/to/Momentum-Firmware
./build.sh --fw-path /path/to/Momentum-Firmware --copyThe Windows build script also works directly with your local checkout:
./build.ps1 -FirmwareDir C:\Users\jasammarco.ENG\Projects\Momentum-FirmwareMounted SD card:
./deploy.sh --mount /Volumes/FLIPPERqFlipper CLI:
./deploy.sh- Discover Printer
- Connect
- Print Message
- Print TXT
- Print BMP
- Feed Paper
- WiFi Scan
- Settings
- About
The app now shows:
- connection state
- the saved printer address, once discovery or manual entry sets it
- the configured density placeholder
- the configured font size from
1-10 - the selected font family
- the latest bridge discovery or Wi-Fi scan result
- BMP print status for
.bmpfiles selected from storage - TXT print status for
.txtfiles selected from storage - persisted settings after the app closes, including printer MAC, message, BMP path, and print options
The desktop bridge now adds:
python bridge/walkprint_bridge.py image <path>to send an image directlypython bridge/walkprint_bridge.py convert-image <path>to generate the printer payload without sending.\bridge\send_image.ps1to select an image with a Windows file picker and send it.\bridge\send_image.ps1 -BmpOnlyto pick only.bmpfiles and send them at the default384pxprint width
- The Flipper talks to the printer through the ESP32 bridge over UART; it does not open the printer's Classic Bluetooth link on its own.
Print TXTreads a.txtfile from the Flipper SD card, keeps line breaks, and prints it across as many text pages as needed. While a multi-page TXT job is running,Backcancels after the current page finishes.- The built-in text renderer is best for standard printable ASCII. If a text file uses Unicode art, block characters, or other extended symbols, convert it to an image and use
Print BMPinstead. Print BMPexpects a.bmpfile on the Flipper SD card that is exactly384pxwide. Files with other widths are rejected by the app.- Use the Arduino IDE to compile and upload the ESP32 bridge sketch, and make sure the partition option matches the included
partitions.csvsetup. - Good next additions for the bridge would be printer status polling, Wi-Fi connect commands, and better paging for larger Bluetooth scan results.


