摘要:通过蓝牙连接打印机(打印机需选配蓝牙模块,以BLE方式传输数据,不需要配对)
通过蓝牙连接打印机(打印机需选配蓝牙模块,以BLE方式传输数据,不需要配对)
蓝牙需要引用相关包,这里不写详细代码,只给出流程。
(1)搜索蓝牙设备,并得到选定的蓝牙设备GUID(如果已经得到GUID,则跳过此步)
(2)通过已知的GUID连接蓝牙设备
(3)得到连接的设备,设置数据包大小,连接时间等
(4)获取服务
(5)从服务中获取写特性
(6)通过写特性写入数据
编程建议:
1、将需要打印在标签表面的内容,画在一张图片里,如PageBitmap
图片的像素大小需要根据打印机分辨率换算,如标签的宽70mm,高30mm,标签之间间隔5mm,
打印机的分辨率是300dpi,则换算出如下数据(四舍五入):
图片的像素宽度是:70*(300/25.4)=827
图片的像素高度是:30*(300/25.4)=354
间隔的像素高度是:5*(300/25.4)=59
2、将画好的图片转为GW指令的数据
int imagebytes = 0;//每行数据的字节数(1Byte=8bits)
int imageheight = 0;//图形的高度;以点(dots)为单位.
byte imagedata;//二进制图形数据
GetGWDataFromBitmap(PageBitmap, out imagebytes, out imageheight, out imagedata);//图片转换为GW数据
//该函数代码详见后附页
3、如果需要写入RFID数据,则增加RF指令
4、将所有控制指令及数据发送给打印机
生成发送给打印机的数据:
List
//设置打印速度黑度及标签尺寸
string commandstring = "";//发送给打印机的控制指令字符串
commandstring += "I8,1,001 ";
commandstring += "S40 ";//打印速度
commandstring += "H10 ";//打印黑度
commandstring += "q827 ";//设置标签宽度
commandstring += "Q354,59 ";//设置标签高度及间隙
commandstring += "N "//清除缓存
byteSource.AddRange(System.Text.Encoding.UTF8.GetBytes(commandstring));//将字符串转为字节数据,并添加进列表
//打印整个页面内容
int imagebytes = 0;//每行数据的字节数(1Byte=8bits)
int imageheight = 0;//图形的高度;以点(dots)为单位.
byte imagedata;//二进制图形数据
GetGWDataFromBitmap(PageBitmap, out imagebytes, out imageheight, out imagedata);//页面图片转换为GW数据
byteSource.AddRange(System.Text.Encoding.UTF8.GetBytes("GW0,0," + imagebytes + "," + imageheight));//GW打印图片
byteSource.AddRange(imagedata);
byteSource.AddRange(System.Text.Encoding.UTF8.GetBytes(" "));
//如果需要写入RFID数据,则使用下面代码
string rfidcommandstring += "RS0,0,0,2,0 ";//设置出错重试次数为2,即连续两次出错提示
string RfidData=”2021011100020001”;//需要写入芯片的16进制格式数据,建议字符串长度为8的倍数
int RfidDataLength= RfidData/2;//写入的字节数
rfidcommandstring += "RF1,0,0," + RfidDataLength + ",1,"" + RfidData + "" ";//写入RFID标签芯片
byteSource.AddRange(System.Text.Encoding.UTF8.GetBytes(rfidcommandstring));//将RFID字符串转为字节数据,并添加进列表
//开始打印
byteSource.AddRange(System.Text.Encoding.UTF8.GetBytes("W1,1 "));//将打印指令添加进列表
byte data= byteSource.ToArray;//将字节列表中的所有数据转为byte数组,然后发给打印机即可。
来源:RFID从业者