thermal-print
Summary
thermal-print provides a serial interface driver for the ESC/POS implementation of the CSN-A2 thermal printer sold by Adafruit and others. The crate should be supported on all platforms targeted by embedded-hal which possess a dynamic allocator, and it is #![no_std]-compatible.
Functionality
thermal-print still lacks some minor functionality, but already supports
- text formatting (such as justification, selecting a print mode, and choosing fonts),
- printing barcodes,
- bitmap printing (via the
tinybmpcrate, on platforms possessing a dynamic allocator).
Usage
Minimum Supported Rust Version: 1.56.0
Just depend on the crate in your Cargo manifest:
[dependencies]
thermal-print = "0.1"
Now you can bring the crate into scope:
use thermal_print::*
Bitmap printing depends on the TinyBMP crate. See the example on [Printing Bitmaps] below.
Examples
Setup, Formatting, and Printing Text
This example initializes the printer, configures font B, sets the justification to center and prints Hello, world! onto the paper.
// Configure the serial interface for your platform
let config = serial::config::Config::default()
.baudrate(Hertz(19_200));
let mut serial: serial::Serial<serial::UART1, _, _> = serial::Serial::new(
peripherals.uart1,
serial::Pins {
tx: peripherals.pins.gpio21,
rx: peripherals.pins.gpio19,
cts: None,
rts: None,
},
config
).expect("Error while configuring UART!");
// Construct a new `Printer` with the serial interface and a `delay` implementation for
// blocking while the printer prints
let mut printer = Printer::new(serial, delay::FreeRtos);
printer.init();
printer.set_print_mode(
PrintModeBuilder::default()
.font(Font::FontB)
.build()
.unwrap()
);
printer.set_justification(Justification::Center);
writeln!(printer, "Hello, world!");
Printing Bitmaps
This example prints a bitmap embedded via the include_bytes! macro. It assumes you have added tinybmp as a dependency to your manifest, and that a suitable bitmap file ./resources/ferris.bmp is present in your project. See the documentation on further information on bitmap printing.
use tinybmp::RawBmp;
printer.print_bitmap(
RawBmp::from_slice(
include_bytes!("../resources/ferris.bmp")
).unwrap(),
RasterBitImageMode::Normal
);
Feature Flags
std: This enables linking against the Rust standard library. It is disabled by default.