@rojonantenaina/expo-usb-printer
v0.1.1
Published
Direct USB ESC/POS thermal printing for Expo (Android dev build / CNG).
Maintainers
Readme
@rojonantenaina/expo-usb-printer
Impression USB directe (ESC/POS) pour Expo — Android uniquement.
Parle au périphérique via UsbManager + bulkTransfer, sans app tierce ni
service d'impression. Pensé pour les imprimantes thermiques USB (classe 07),
y compris les imprimantes intégrées des tablettes POS.
Prérequis
- Projet Expo avec dev build / CNG (
expo-dev-client,expo prebuild). Ne fonctionne pas dans Expo Go (code natif). - L'imprimante doit apparaître sur le bus USB-host Android
(vérifiable via
getDeviceList()).
Installation
# via npm (recommandé)
npx expo install @rojonantenaina/expo-usb-printer
# ou via git
npx expo install git+https://github.com/rojonantenaina/expo-usb-printer.git
# ou en local pour le dev (tarball — évite les soucis de symlink Metro)
npm pack # dans ce dossier -> .tgz
npm install ../expo-usb-printer/rojonantenaina-expo-usb-printer-0.1.0.tgzChemin local en symlink (
npm install ../expo-usb-printer) : Metro ne résout pas un package situé hors de la racine du projet. Si vous y tenez, ajoutez le dossier àwatchFoldersdansmetro.config.js. Le tarball (ci-dessus) ou l'install npm/git n'ont pas ce problème.
Pour formater des tickets, installez aussi
esc-pos-encoder:npx expo install esc-pos-encoder
Puis régénérez le natif et rebuildez le dev client :
npx expo prebuild
npx expo run:androidAPI
import {
getDeviceList,
hasPermission,
printRaw,
printBytes,
} from "@rojonantenaina/expo-usb-printer";
// 1. Trouver l'imprimante (diagnostic)
const devices = getDeviceList();
// [{ deviceName, vendorId, productId, productName, manufacturerName, interfaceCount }]
// 2. Imprimer des octets ESC/POS (ex. via esc-pos-encoder)
import EscPosEncoder from "esc-pos-encoder";
const bytes = new EscPosEncoder()
.initialize()
.align("center")
.line("Hello")
.qrcode("https://example.com")
.cut("full")
.encode();
// vendorId / productId de VOTRE imprimante
await printBytes(0x0fe6, 0x811e, bytes);Fonctions
| Fonction | Description |
| --- | --- |
| getDeviceList() | Liste les périphériques USB connectés. |
| hasPermission(vid, pid) | true si la permission USB est déjà accordée. |
| printRaw(vid, pid, base64) | Envoie des octets (base64) bruts. |
| printBytes(vid, pid, Uint8Array) | Comme printRaw mais encode en base64 pour vous. |
Au premier envoi vers un périphérique, Android affiche une popup de permission USB à accepter.
Codes d'erreur (rejets de promesse)
E_NO_DEVICE, E_PERMISSION, E_NO_ENDPOINT, E_OPEN, E_CLAIM,
E_TRANSFER, E_DECODE, E_PRINT.
Trouver le VID/PID
console.log(getDeviceList());Ou via adb : adb shell 'cat /sys/bus/usb/devices/*/idVendor'.
