Italian stampante ZEBRA bluetooth

RonkyOne

Member
Licensed User
Longtime User
Buongiorno a tutti,
Sto cercando di collegare una stampante bluetooth ZEBRA da tavolo (la dt410)
Dopo aver fatto il pairing , nessun modo trovato nei forum riesce a connettere la stampante, ricevo sempre il messaggio SOCKET MIGHT CLOSED ret=-1

con il servizio di Zebra scaricato da Google play la connessione funziona.
Altre stampanti , piu economiche , si connettono senza problemi.
Qualcuno per favore ha esperienza con questa serie di stampanti con connessione bluetooth?

Grazie
 

cocale2001

Member
Licensed User
Longtime User
Abbiamo fatto noi intergrazioni con ZEBRA RW 420.
Il protocollo è proprietario e senza loro librerie ti attacchi al piffero.
La parte di utilizzo della stampante però la abbiamo sviluppata con android studio e utilizzato il driver messo a disposizione da zebra. E' un progetto molto specializzato in cui si stampano fatture per una applicazione di tentata vendita.
https://play.google.com/store/apps/details?id=hg.netmobility

Mentre il modulo per le stamapanti è:
https://play.google.com/store/apps/details?id=hg.zebraprint
Dubito che tu riesca ad riutilizzare il modulo di stampa in quanto è stato fatto per un cliente specifico e all'interno ha perfino il logo del cliente incorporato.
La logica è molto semplice il primo programma crea dei file di comandi da noi inventati e poi richiama il secondo programma il quale li legge e li traduce in comandi stampa.
Se dovessi rifalo oggi fare tutto i b4a facendo un wapper alle librerie di Zebra.

Prova a scaricare il secondo modulo e vedi se ti riesce a collegare alla stampante. Almento ti so dire che librerie utilizzare

Saluti
Paolo
 

Star-Dust

Expert
Licensed User
Longtime User
Alcuni modelli ZEBRA usano il protocollo ESC POS oltre quello proprietario.
Quindi potrebbe usarlo con ESC POS se compatibile. Ma bisogna fare prove.

@cirollo sta facendo delle prove.
 

RonkyOne

Member
Licensed User
Longtime User
La zebra che sto connettendo usa bluetooth low energy (BLE)
La connessione mi riesce, quello che non funziona è veder reagire la stampante.
La stampante usa comandi ZPL, (con stampanti ESCPOS bluetooth mi funziona gia tutto)

Uso la libreria BlexExtEx
e invio i comandi in questo modo.
B4X:
cwrite.SetStringValue("A50,150,0,4,1,1,N,TT")
    Manager.WriteCharacteristic(cwrite)               
[code]

non ottengo nessun risultato, per altro nemmeno un errore
@cocale2001 
[URL]https://play.google.com/store/apps/details?id=hg.zebraprint[/URL]
questo non trova la stampante
 

Star-Dust

Expert
Licensed User
Longtime User
La zebra che sto connettendo usa bluetooth low energy (BLE)
La connessione mi riesce, quello che non funziona è veder reagire la stampante.
La stampante usa comandi ZPL, (con stampanti ESCPOS bluetooth mi funziona gia tutto)
Allora se invece che Bluetooth vuoi usare BLE la cosa si complica.

Io ho sviluppato sia per B4J che per B4A una libreria per la stampa in Bluetooh (protocollo ESC POS) e per iOS sto sviluppato una versione BLE (che funziona tutto tranne la stampa immagini) e ti posso dire che la cosa si complica un pochino per via della grandezza dei pacchetti.

Ovviamente io uso una stampante cinese non la Zebra, quindi le cose saranno diverse

Uso la libreria BlexExtEx
e invio i comandi in questo modo.
B4X:
cwrite.SetStringValue("A50,150,0,4,1,1,N,TT")
    Manager.WriteCharacteristic(cwrite)            
[code]

non ottengo nessun risultato, per altro nemmeno un errore
@cocale2001
[URL]https://play.google.com/store/apps/details?id=hg.zebraprint[/URL]
questo non trova la stampante
Non conosco questa libreria, ma cosa vorresti fare di preciso con questa stringa "A50,150,0,4,1,1,N,TT") ?
 
Last edited:

RonkyOne

Member
Licensed User
Longtime User
Allora se invece che Bluetooth vuoi usare BLE la cosa si complica.

Io ho sviluppato sia per B4J che per B4A una libreria per la stampa in Bluetooh (protocollo ESC POS) e per iOS sto sviluppato una versione BLE (che funziona tutto tranne la stampa immagini) e ti posso dire che la cosa si complica un pochino per via della grandezza dei pacchetti.

Ovviamente io uso una stampante cinese non la Zebra, quindi le cose saranno diverse


Non conosco questa libreria, ma cosa vorresti fare di preciso con questa stringa "A50,150,0,4,1,1,N,TT") ?

Dovrebbe stampare l ora corrente, stando al manuale ZPL Zebra
temo sia da incapsulare la stringa in qualche modo, per farla digerire alla stampante,
al momento ripeto non reagisce in nessun modo...




 

micro

Well-Known Member
Licensed User
Longtime User
Dovrebbe stampare l ora corrente, stando al manuale ZPL Zebra
temo sia da incapsulare la stringa in qualche modo, per farla digerire alla stampante,
al momento ripeto non reagisce in nessun modo...
Salve ragazzi
Mi permetto d'intervenire perché ho fatto delle prove proprio poco tempo fa e devo dirti RockyOne che devi incapsulare i comandi tra un header e un fine pacchetto.
Adesso sono fuori e non ricordo bene quali siano ma ti assicuro che c'è un comando d'inizio stampa ed uno di fine, senza di questi non stamperebbe.
Naturalmente parlo di ZPL e le mie prove erano direttamente su seriale ma non cambia assolutamente nulla se usi il Bluetooth.
Buona giornata a tutti.

start_str = "^XA"
end_str = "^XZ"
 
Last edited:

cocale2001

Member
Licensed User
Longtime User
@RonkyOne
Il driver usato nel progetto indicato era specifico per famiglia stampatin Zebra RW42x
Evidentemente la tua usa altri dirver. Ti consiglio di guardare sul sito della zebra e cercare un driver appropriaato.

Se vuoi fare tutto in b4a ben venga anche se penso che utilizzandop il driver e facendo un wrapper faresti prima.
Se ti interessa ho due documenti della Zebra che illustrano i comandio da inviare per stamapre.
Siccome penso non si possano pubblicare , te li mando via email in provato se ti ti interessano

Se ti servono altre info volentieri.
 

RonkyOne

Member
Licensed User
Longtime User
riepilogando, e ringranzio dell interessamento, quello che ho scoperto e:
- le stampanti Zebra bluetooth , sono BLE, (blutooth low energy)
- Io uso la libreria BlexExtEx, che mi permette di vedere la stampante e collegarmi
- l' esempio di comando ZPL zebra e:

^XA 'apre invio
^FO50,50^ADN,36,20^FDstringa
^FS
^XZ ' chiude invio

passando i dati semplicemente mandando la riga comando , al posto di Stringa nel codice sotto, non succede nulla.



- il comando per l invio stringa credo sia:
B4X:
    Dim cwrite As BleCharacteristic
Dim Manager As BleManager
    cwrite.SetStringValue("stringa")
    Manager.WriteCharacteristic(cwrite)   
[code]
 

RonkyOne

Member
Licensed User
Longtime User
Salve ragazzi
Mi permetto d'intervenire perché ho fatto delle prove proprio poco tempo fa e devo dirti RockyOne che devi incapsulare i comandi tra un header e un fine pacchetto.
Adesso sono fuori e non ricordo bene quali siano ma ti assicuro che c'è un comando d'inizio stampa ed uno di fine, senza di questi non stamperebbe.
Naturalmente parlo di ZPL e le mie prove erano direttamente su seriale ma non cambia assolutamente nulla se usi il Bluetooth.
Buona giornata a tutti.

start_str = "^XA"
end_str = "^XZ"

In effetti è cosi, ma credi vadano convertite in array di byte?
 

RonkyOne

Member
Licensed User
Longtime User
questo finalmente è l esempio che zebra mette a disposizione per scrivere sulle sue stampanti:
riferimento web

https://github.com/Zebra/Zebra-Prin...MiniProgram-Samples/WeChatPrintDemo/README.md
Qualcuno può aiutarmi a tradurre?


B4X:
  writeStringToPrinter: function (str) {

   var that = this

   var maxChunk = 20 // Default is 20 bytes per write to characteristic

   if (app.getPlatform() == 'ios') {
     maxChunk = 300 // 300 bytes per write to characteristic works for iOS
   } else if (app.getPlatform() == 'android') {
     var maxChunk = 300 // Adjusting for Android     
   }

   if (str.length <= maxChunk) {
     writeStrToCharacteristic(str)
   } else {
     // Need to partion the string and write one chunk at a time.
     var j = 0
     for (var i = 0; i < str.length; i += maxChunk) {
       if (i + maxChunk <= str.length) {
         var subStr = str.substring(i, i + maxChunk)
       } else {
         var subStr = str.substring(i, str.length)
       }

       if (app.getPlatform() == 'ios') {
         writeStrToCharacteristic(subStr) // iOS doesn't need the delay during each write
       } else {
         // Android needs delay during each write.
         setTimeout(writeStrToCharacteristic, 250 * j, subStr) // Adjust the delay if needed
         j++
       }
     }
   }

   function writeStrToCharacteristic (str) {
     // Convert str to ArrayBuff and write to printer
     let buffer = new ArrayBuffer(str.length)
     let dataView = new DataView(buffer)
     for (var i = 0; i < str.length; i++) {
       dataView.setUint8(i, str.charAt(i).charCodeAt())
     }

     // Write buffer to printer
     wx.writeBLECharacteristicValue({
       deviceId: that.data.connectedDeviceId,
       serviceId: ZPRINTER_SERVICE_UUID,
       characteristicId: WRITE_TO_ZPRINTER_CHARACTERISTIC_UUID,
       value: buffer,
       success: function (res) {
         wx.showToast({
           title: 'Sent ZPL to printer successfully',
           icon: 'success',
           duration: 1000,
         })
       },
       fail: function (res) {
         console.log("ssi - Failed to send ZPL to printer:", res)
         wx.showToast({
           title: 'Failed to send ZPL',
           icon: 'none',
           duration: 1000,
         })
       }
     })
   }
  },
 

Star-Dust

Expert
Licensed User
Longtime User
Il driver usato nel progetto indicato era specifico per famiglia stampatin Zebra RW42x
Evidentemente la tua usa altri dirver. Ti consiglio di guardare sul sito della zebra e cercare un driver appropriaato.

Se vuoi fare tutto in b4a ben venga anche se penso che utilizzandop il driver e facendo un wrapper faresti prima.
Se ti interessa ho due documenti della Zebra che illustrano i comandio da inviare per stamapre.
Siccome penso non si possano pubblicare , te li mando via email in provato se ti ti interessano

Se ti servono altre info volentieri.
Non è necessario nessun driver e nessun avvolgimento. Ho creato una libreria multipiattaforma solo usando il manuale che c'è sul sito, niente di segreto.
Vedi qua:
 
Top