thermal-print

Crates.iothermal-print
lib.rsthermal-print
version0.2.0
sourcesrc
created_at2022-07-01 11:15:00.543651
updated_at2024-04-01 15:08:00.71181
descriptionAn almost fully featured, no-std-compatible embedded-hal driver for the CSN-A2 thermal printer
homepage
repositoryhttps://git.sr.ht/~doesnotcompete/thermal-print
max_upload_size
id617085
size64,381
Kevin (doesnotcompete)

documentation

https://docs.rs/thermal-print

README

thermal-print

Crates.io Crates.io

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 UART
  • embedded-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.

Commit count: 0

cargo fmt