Skip to content

🖨 A library for the communication with NIIMBOT printers

License

Notifications You must be signed in to change notification settings

d4n1b/niimbluelib

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

48 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

NiimBlueLib NPM

Warning

This project is intended for informational and educational purposes only. The project is not affiliated with or endorsed by the original software or hardware vendor, and is not intended to be used for commercial purposes without the consent of the vendor.

NiimBlueLib is a library for the communication with NIIMBOT printers. Used in NiimBlue project.

This project is in Alpha state. Use only exact version when you add it to your project. API can be changed anytime.

Сheck out the experimеntal niimbluelib-headless for CLI use cases.

Installation

Yarn:

yarn add @mmote/niimbluelib --exact

Usage example (may be outdated)

import { Utils, RequestCommandId, ResponseCommandId, NiimbotBluetoothClient, ImageEncoder, PrintTaskVersion } from "@mmote/niimbluelib";

const client = new NiimbotBluetoothClient();

client.addEventListener("packetsent", (e) => {
  console.log(`>> ${Utils.bufToHex(e.packet.toBytes())} (${RequestCommandId[e.packet.command]})`);
});

client.addEventListener("packetreceived", (e) => {
  console.log(`<< ${Utils.bufToHex(e.packet.toBytes())} (${ResponseCommandId[e.packet.command]})`);
});

client.addEventListener("connect", () => {
  console.log("connected");
});

client.addEventListener("disconnect", () => {
  console.log("disconnected");
});

client.addEventListener("printprogress", (e) => {
  console.log(`Page ${e.page}/${e.pagesTotal}, Page print ${e.pagePrintProgress}%, Page feed ${e.pageFeedProgress}%`);
});

await client.connect();

// label props
const props = {
  width: 240,
  height: 96,
  printDirection: "left",
};
const quantity = 1;

const canvas = document.createElement("canvas");
canvas.width = props.width;
canvas.height = props.height;

const ctx = canvas.getContext("2d");

ctx.fillStyle = "white";
ctx.lineWidth = 3;

// fill background
ctx.fillRect(0, 0, canvas.width, canvas.height);
// draw diagonal line
ctx.beginPath();
ctx.moveTo(0, 0);
ctx.lineTo(canvas.width, canvas.height);
ctx.stroke();
// draw border
ctx.strokeRect(0.5, 0.5, canvas.width - 1, canvas.height - 1);

const encoded = ImageEncoder.encodeCanvas(canvas, props.printDirection);

const printTaskName = client.getPrintTaskType() ?? "D110";

const printTask = client.abstraction.newPrintTask(printTaskName, {
  totalPages: quantity,
  statusPollIntervalMs: 100,
  statusTimeoutMs: 8_000
})

try {
  await printTask.printInit();
  await printTask.printPage(encoded, quantity);
  await printTask.waitForFinished();
} catch (e) {
  console.error(e);
}

await client.abstraction.printEnd();
await client.disconnect();

Misc

Eslint not included. Install it with:

npm install --no-save --no-package-lock [email protected] globals @eslint/js typescript-eslint

About

🖨 A library for the communication with NIIMBOT printers

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • TypeScript 90.1%
  • JavaScript 9.9%