De labelprinter liegt over de DPI

Een open-source Web Bluetooth-driver laat zien dat de N1-labelprinter van Niimbot, die wordt aangeprezen als een apparaat met 300 dpi, in werkelijkheid op ongeveer 203 dpi print.

De ontwikkelaar bouwde de driver om direct vanuit een webpagina te printen in plaats van de mobiele app van Niimbot te gebruiken. Hij heeft het propriëtaire protocol reverse-engineered en via de Web Bluetooth API beschikbaar gemaakt voor browsers. Hierbij ontdekte hij niet alleen een ontbrekende functie, maar ook een fundamentele onjuiste specificatie die kleine productieseries, voorraadlabels of hobbyprojecten waarbij precisie belangrijk is, kan verpesten.

Hoe de onjuiste specificatie aan het licht kwam

Niimbot vermarkt de N1 als een 300 dpi-printer, wat duidt op 300 dots per inch. De ontwikkelaar printte een afbeelding met een liniaal-schaal en een genummerd testpatroon, en mat de markeringen vervolgens met een fysieke liniaal. De berekeningen wezen consequent op ongeveer 203 dpi, niet op de geclaimde 300.

Vier hard wonen lessen uit het schrijven van een hardware-driver

  1. Een "geslaagde" opdracht kan niets opleveren. De printer streamt gegevens in bursts. Op sommige platforms laat de Bluetooth-stack een schrijfactie vallen zonder een foutmelding te geven. De driver gaat ervan uit dat de opdracht is voltooid, maar het label komt blanco of afgebroken uit de printer. De auteur leest nu na elke opdracht de fysieke paginateller van de printer af om te controleren of er daadwerkelijk een vel is ingevoerd.

  2. Documentatie is niet de werkelijkheid. De claim van 300 dpi is een duidelijk voorbeeld. Specificaties kunnen optimistisch, verouderd of simpelweg onjuist zijn. Ontwikkelaars moeten kritieke parameters zelf meten wanneer visuele getrouwheid belangrijk is.

  3. Fysieke markeringen zijn beter dan "pasvorm"-tests. Het printen van een afbeelding om te zien of deze op het labeloppervlak past, maskeert fouten in resolutie, printkopbreedte of offset. Het printen van een bekende geometrische markering en het meten van de exacte locatie onthult het werkelijke gedrag van het apparaat.

  4. Een protocol beschrijft de grammatica, niet het temperament van de hardware. Twee printers kunnen hetzelfde commando-set delen maar zich toch anders gedragen—de ene gaat goed om met snelle herhalingen van pagina's, de andere loopt vast. De driver kan niet uitgaan van identieke prestaties op basis van enkel de protocoldocumentatie; elk model heeft tests in de praktijk nodig.

Waarom de driver belangrijk is

De driver doet nooit alsof hij alles weet. Telkens wanneer hij een waarde afleidt in plaats van deze uit de printer te lezen, markeert hij het veld als een schatting. Deze transparantie voorkomt stille fouten die anders uren aan debugging zouden kosten.

De driver verkrijgen

De driver draait in Chrome of Edge en heeft alleen een Bluetooth-geactiveerd apparaat en een ondersteunde Niimbot-printer nodig. Probeer de live demo op:

https://iscarelli.github.io/niimbot-web-bluetooth/demo/

De broncode staat op GitHub, waar de community modelgegevens kan bijdragen, bugs kan oplossen of de driver kan aanpassen voor andere browsers:

https://github.com/iscarelli/niimbot-web-bluetooth

Eigenaren van Niimbot-apparaten kunnen helpen bij het vullen van de modeldatabase; het proces duurt ongeveer tien minuten en vereist twee labels.

Kanttekening

Totdat het bedrijf de discrepantie opheldert, moeten ontwikkelaars werken met de gemeten waarde.

De belangrijkste les is simpel: hardware die je aanroept vanuit een webpagina, doet misschien niet wat de specificaties beloven. Controleer kritieke parameters, houd rekening met stille fouten en kies drivers die onzekerheid blootleggen in plaats van deze te verbergen.