Bluetooth连接蓝牙热敏打印机打印

Bluetooth连接蓝牙热敏打印机打印收银小票功能 步骤如下

1、添加必要权限

Info.plist 文件中添加以下权限:

<key>NSBluetoothAlwaysUsageDescription</key>
<string>我们需要访问蓝牙来连接打印机</string>
<key>NSBluetoothPeripheralUsageDescription</key>
<string>我们需要访问蓝牙来连接打印机</string>
2、检查蓝牙状态
// 检查状态
DPBLEManager.shared().startCheckStatus { central in
    if central.state == .poweredOn {
         // 扫描蓝牙
    } else {
         print("Bluetooth is not available.")
    }
}

各状态的详细说明

  1. .unknown

    • 描述:初始状态,表示管理器的状态尚未确定。
    • 原因:通常是刚初始化 CBCentralManager 时的状态。
  2. .resetting

    • 描述:蓝牙硬件正在重置。
    • 原因:系统正在进行内部重置,通常不需要特别处理,等待重置完成即可。
  3. .unsupported

    • 描述:设备不支持蓝牙低功耗(BLE)功能。
    • 原因:设备硬件不支持 BLE,或者操作系统版本太低。
  4. .unauthorized

    • 描述:应用程序没有权限使用蓝牙。
    • 原因:用户拒绝了应用程序的蓝牙权限,或者应用程序没有在 Info.plist 中声明必要的权限。
  5. .poweredOff

    • 描述:蓝牙已关闭。
    • 原因:用户在设置中关闭了蓝牙,或者设备的蓝牙硬件被禁用。
  6. .poweredOn

    • 描述:蓝牙已开启并且可以使用。
    • 原因:蓝牙硬件正常工作,应用程序可以开始扫描和连接蓝牙设备。
3、搜索可用蓝牙外设
// 热敏打印机的蓝牙服务ID, 一般为 18F0 ,具体根据打印机文档确定
var printerServiceUUIDs:Array<CBUUID> = [CBUUID(string: "18F0")]

// 开始扫描蓝牙
DPBLEManager.shared().scan(self.printerServiceUUIDs) { central, peripheral, advertisementData, rssi in
       // 打印机名称
       let deviceName = peripheral.name ?? "Unknown Device"
 }
4、连接蓝牙外设
DPBLEManager.shared().connect(peripheral, options: nil, stopScanAfterConnected: true, serviceUUIDs: printerServiceUUIDs, characteristicUUIDs: nil) { stage, peripheral, service, character, error in
    switch stage {
        case .connectStart:
            // 开始连接
            break
        case .connectFail:
            // 连接失败
            break
        case .connectSuccess:
            // 蓝牙连接成功
            break
        case .seekService:
            // 搜索服务
            print("打印机服务\(peripheral.services ?? [])")
            break
           case .seekCharacteristic:
            // 搜索特性
            print("服务特性\(String(describing: service?.characteristics))")
            break
         case .seekDescriptors:
            // 搜索描述
            print("服务描述\(String(describing: character?.description))")
            break
    }
}
5、写入数据
let command:DPEscCommand = DPEscCommand()
command.appendText("单据标题",alignment: .center,fontSize: .titleHMiddle, fontStyle: .bold)
command.appendText("地址:金翠芳")
command.appendText("下单时间:2024-22-06 14:27:24")
command.appendSeparatorLine()
command.appendText("商品名称", middle: "数量", right: "金额", isTitle: true)
command.appendSolidLine()
command.appendText("香菇饭", middle: "2", right: "28")
command.appendSolidLine()
command.appendText("合计金额", value: "100",titleFontStyle: .bold, valueFontStyle: .bold)
command.appendDottedLine()
command.appendSolidLine(withText: "二维码")
// 如果打印机支持打印二维码
// command.appendQRCode(withInfo: "https://www.baidu.com/", size: 7)
// 如果打印机不支持打印二维码,以打印图片代替
command.appendQRImgCode(withInfo: "https://www.baidu.com/",maxWidth: 264)
command.appendSolidLine(withText: "公众号", symbol: "&")
// 打印图片
command.appendImage(UIImage(named: "gong_zhong_hao"))
// 切纸        
command.printCutPaper(.full, num: 5)      
// 写入数据
DPBLEManager.shared().writeValue(data)

完整的Demo地址: github地址

img