shmily-iOS/Mac

iOS蓝牙·热敏打印机

2018-06-08  本文已影响0人  思想猿

(更新) 这两天在网上又翻找了一下,发现已经有位大神对蓝牙打印机这一块操作作了详细的讲解,大家可以移步iOS Bluetooth 打印小票(二)进行学习。


最近由于项目需要,了解了下蓝牙相关的知识,实现了通过iPhone来操作蓝牙热敏打印机打印小票的功能,在此记录总结。

背景

网上已经有很多关于蓝牙知识的介绍,此处不做详述,可以参考这篇文章iOS蓝牙知识快速入门,这里做一个说明,对于目前大多数已经支持到4.0版本的蓝牙设备,苹果本身已经提供了对应的框架 CoreBluetooth.framework, 对于4.0以下的蓝牙设备,连接起来比较麻烦,不过网上也有不少解决方法,故此篇文章只是对于蓝牙4.0设备连接的操作说明。


蓝牙

苹果对于蓝牙设备分为2种角色,一种是中心设备Central,另一种是外围设备Peripheral,这两种角色决定了谁来发起连接,谁是被动连接,同一种设备,在不同场合下扮演的角色可能不相同,比如iPhone,在本文中所扮演的就是中心设备角色,对于被操作的打印机,就是外设;而在文件传输中,iPhone所扮演的角色可以是中心设备,也可以是外围设备,这取决于具体场合。

那么对于一个完整的蓝牙连接流程,可以分为下面几大步骤。

1. 扫描

开发之前提一句,蓝牙功能一般是抽离出来做成一个单独的工具类,方便在其他地方使用,最好的就是写成一个单例,方便全局调用,毕竟蓝牙这东西初始化也就那么一次,其他的时候基本都是连接->传输数据这么些操作,状态啥的也都是能通过代理来获取的。

2. 连接

连接分为3个部分:连接指定的蓝牙设备、获取到指定设备的服务列表、针对不同的服务获取特征值列表

3. 数据传输

蓝牙的中心设备与外围设备数据传输有多种方式:读取、写入、通知,针对蓝牙打印机,我们这里主要使用的是写入方法,将封装好的数据通过中心设备发送到外围设备上,并且指定特征码进行打印操作:

//发送打印数据以及对应的操作特征码
-(void)sendPrintData:(NSData *)printData
{
    [_connectedPeripheral writeValue:printData forCharacteristic:_character type:CBCharacteristicWriteWithoutResponse];
}

此处printData是已经封装完毕的打印数据,下面会说到如何封装此数据,另外对于参数CBCharacteristicWriteWithResponse指的是打印结果需要代理来返回,如果不需要返回结果,还有一个值可以设置:CBCharacteristicWriteWithoutResponse

结束

到此为止,蓝牙搜索、连接、数据传输已经完成,所有的代理只说了成功部分,失败的代理大家可以进入到CBCentralManagerDelegateCBPeripheralDelegate协议里面进行查看。


打印

蓝牙配对部分完成了,接下来才是重头戏:如何对连接的蓝牙外设进行数据传输,如何操作对应的功能,如何封装等待传输的数据?下面一一来说明。

指令

先从数据说起,一般需要我们发送给外围蓝牙设备的数据,都是以字节形式传输的,那么在传输数据之前,有个更重要的事情需要完成,就是数据封装,此处所对应的蓝牙外设前面已经提到了,蓝牙小票打印机,具体的型号是佳博热敏票据打印机KS-2160II,其使用的是常见的ESC/POS指令集,其他类型的打印机需要对照具体的指令说明书来对数据进行封装设置,大体上只要能看懂具体指令对应的操作功能,基本都是相通的。

上一篇 下一篇

猜你喜欢

热点阅读