4 releases
0.2.0 | Apr 1, 2024 |
---|---|
0.1.2 | Jul 17, 2022 |
0.1.1 | Jul 1, 2022 |
0.1.0 | Jul 1, 2022 |
#718 in Hardware support
27 downloads per month
30KB
497 lines
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
tinybmp
crate).
Usage
Just depend on the crate in your Cargo manifest:
[dependencies]
thermal-print = "0.2"
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.embedded-hal-nb
: Use embedded-hal-nb traits for UARTembedded-io
: Use embedded-io traits for UART
Bug Reports and Feature Requests
Contributions to this project are welcome. You can find the issue tracker and the code repository at sourcehut. You may also submit bug reports or feature requests via email to ~doesnotcompete/thermal-print@todo.sr.ht.
Dependencies
~5.5MB
~86K SLoC