立刷pos机连接不了蓝牙(iOS开发之蓝牙Socket链接小票打印机(二))

本文目录
一、iOS开发之蓝牙/Socket链接小票打印机(二)
上一篇主要介绍了部分ESC/POS指令集,包括一些常用的排版指令,打印位图指令等。另外,还介绍了将图片转换成点阵图的方法。在这篇文章中,将主要介绍通过蓝牙和Socket连接打印机,发送打印指令相关知识。这里将用到 CoreBluetooth.framework和 CocoaAsyncSocket。
蓝牙是一种支持设备间短距离通讯的无线电技术。iOS系统中,有四个框架支持蓝牙链接:
CoreBluetooth框架有两个核心概念,central(中心)和 peripheral(外设),它们分别有自己对应的API;这里显然是手机作为central,蓝牙打印机作为peripheral;
设置代理后,会回调此方法,确认蓝牙状态,当状态为 CBCentralManagerStatePoweredOn才能去扫描设备,蓝牙状态变化时,也会回调此方法
注意:第一个参数指定一个 CBUUID对象数组,每个对象表示外围设备正在通告的服务的通用唯一标识符(UUID)。此时,仅返回公布这些服务的外设。当参数为 nil,则返回所有橘友宴已发现的外设,而不管其支持的服务是什么。
当扫描到4.0外设后会回调此方法,这里包含设备的相关信息,如名称、UUID、信号强度等;
[self.centralManager connectPeripheral:peripheral options:nil];
注意:第一个参数是要连接的外设。第二个参数 options是可告肆选的 NSDictionary,系统定义了一下三个键,它们的值都是NSNumber(Boolean);默认为NO。当设置为YES,则应用进入后台或者被挂起后,系统会用Alert通知蓝牙外设的状态变化,效果是这样
连接成功或失败,都有对应的回调方法
连接成功后设置代理 peripheral.delegate= self,调用 [peripheral discoverServices:nil];寻找外设内的服务。这里的参数是一个存放 CBUUID对象的数组,用于发现特定的服务。当传nil时,表示发现外设内所有的服务。发现服务后系统会回调下面的方法:
发现服务后,调用 [peripheral discoverCharacteristics:nil forService:service];去发现服务中包含的特征。和上面几个方法一样,第一个参数用于发现指定的特征。为nil时,表示发现服务的所有特征。
当扫描到写入特征时,保存,用于写入数据。
这里的 self.peripheral就是连接的外设, self.characteristicInfo就是之前保存的写入特征;这里最好使用 CBCharacteristicPropertyWrite特征,并且 type选择 CBCharacteristicWriteWithResponse。当写入数据成功后,系统会通过下面这个方法通知我们:
由于蓝牙设备每次可写入的数据量是有限制的,因此,我们需要将之前拼接的打印数据进行拆分,分批发送给打印机
这里的 MAX_CHARACTERISTIC_VALUE_SIZE是个宏定义,表示每次发送的数据长度,经笔者测试,当 MAX_CHARACTERISTIC_VALUE_SIZE= 20时,打印文字是正常速度。但打印图片的速度非常慢,应该在硬件允许的范围内,每次发尽量多的数据。不同品牌型号的打印机,这个参数是不同的,笔者的蓝牙打印机该值最多到140。超出后会出现无法打印问题。最后笔者将该值定为 MAX_CHARACTERISTIC_VALUE_SIZE= 120,测试了公司几台打印机都没有问题。
另外iOS9以后增加了方法 maximumWriteValueLengthForType:可以获取写入特诊的最大写入数据量,但经笔者测试,对于部分打印机(比如我们公司的)圆银是不准确的,因此,不要太依赖此方法,最好还是自己取一个合适的值。
注意:每个打印机都有一个缓冲区,缓冲区的大小视品牌型号有所不同。打印机的打印速度有限,如果我们瞬间发送大量的数据给打印机,会造成打印机缓冲区满。缓冲区满后,如继续写入,可能会出现数据丢失,打印乱码。
这里使用 CocoaAsyncSocket开源框架,与打印机进行 Socket连接。 CocoaAsyncSocket中主要包含两个类:
这里我们只用到 GCDAsyncSocket,因此只需要将 GCDAsyncSocket.h和 GCDAsyncSocket.m两个文件导入项目。
注意:手机和打印机必须在同一局域网下,设置到打印机的host和port。
Timeout为负,表示不设置超时时间。这里的data就是上一篇中拼接的打印数据。
网口打印机一般都支持状态查询,查询指令如下:
可以通过上一篇介绍指令拼接方法,查询打印机的状态。
本篇只是简单介绍了,通过蓝牙和Socket连接打印机的方法。虽然可以初步完成连接和打印,但是,在真正的项目中使用还是远远不够的。这里还有很多情况需要考虑,比如连接断开、打印机异常、打印机缓冲区满、打印机缺纸等。我们可以针对自身的业务情况,进行相应的处理。
Core Bluetooth Programming Guide
Getting the pixel data from a CGImage object
Core Bluetooth Programming Guide
二、移动pos机的技术指标
功能读写ISO15693协议 13.56MHz I.code2/ Tag-it电子标签(卡)中央处理器:32位高速微处理器,主频最高 140MHz;显示分辨率:单色LCD,160×160点(汉字 10行 10列);手触式防水按键:27个,分别为:数字键、功能键、开关键;数据存储器:超低功耗大容量 RAM 64Mbit; Flash Memory:16~144Mbit;(16M bits为标准配置)电池:锂离子电池,功率:2000mAh,待机时间为10天;安全模块:标配 2个 PSAM卡;实时时钟,带备用电池。标签频率 13.56MHz PSAM卡协议 ISO7816协议标准 ISO15693阅读距离 3~7cm支持卡类型 I.code2/Tag-it电子标签(卡)通讯接口 RS232,USB操作系统 C语言自主开发专有操作系统开发环境可锋薯橘提供开发包,支持二次开发。二次开发工具为C尺寸(mm) 185×70×35重量 280g充电电源专用充电器环境温度工作-5℃-50℃储存-20℃-70℃湿度 30%到 85%RH工业等级 IP54冲击试验高度 150cm颜色参考图片(外壳颜色可订制)无线通讯模块(可选) G01 GPRS模块 C01 CDMA模块 Z01 Zigbee模块 W01 WiFi模块 M01 433模块 B01蓝牙模块产品型号传输 RS232/USB GPRS(G) WiFi(W) 433(M) ZigBee(Z) CDMA©红外(H) GPS(S) 15693协议(3) SIC02-3 SIC02-3G SIC02-3W SIC02-3M SIC02-3Z SIC02-3C SIC02-3H SIC02-3S SCL8300手持移动pos机是思创莱为适合小额支付市场和非银行类电子支付市场而定制研发的新款移动POS机终端。具有运行稳定、功能多样、成本经济等特点。
在通讯模式上,既支持传统的电话线PSTN拨号连接模式,也支持目前最流行的CDMA、GPRS、以太网、WiFi等方式,从而使该终端既可以应用于固定场所,也可以用于手持移动支付环境。与传统POS不同,该款POS的网络通讯均使用Linux系统内核进行统一封装,减少使用通讯配件的高层功能,避免了因配件供应商技术实力不同而导致的通讯不稳定。
SCL8300支持目市面上所有流行的卡片类型,包括接触式内存卡、磁条卡、双界面CPU卡、非接触式逻辑加密卡等,为客户提供了一个丰富的可选平台,充分考虑了不同预算客户对于卡种的需求。
该款机器采用了ARM9硬件架构和Linux软件操作系统,在考虑了成本的基础上兼顾了产品的稳定性。定制化的Linux系统非常适合客户在此平台上进行二次开发,普通程序员经过简单培训即可掌握二次开发的能力。
SCL8300是业内第一款支付型移动银团POS机与条码扫描功能融合的终端设备,具备强大的电子支付能力的同时,也增强了与企业ERP自动化系统的对接能力。8300同时支持一维条码和二维条码,可广泛应用于快递、物流、仓手谈储等领域。
优雅流线型外观,方便操作的竖刷卡设计;
无线信号捕捉能力强,交易稳定、流畅,交易失败率在信号稳定区域小于千分之五;
超大容量电池,保障400笔以上的持续交易和打印(每3分钟一笔交易);
LCD采用 128 x 64点阵带背光液晶屏,支持 8 x 4汉字显示;
32位ARM9 400MHz CPU,内嵌Linxu安全操作系统;
64MB大容量内存,可同时下载运行多个不同应用程序;
可选内置以太网、CDMA、Wi-Fi、GPRS通讯模块,支持SSL(Security Socket Layer);
支持磁条卡、非接触式IC卡(M1卡、CPU卡)、接触式IC卡(4428、24C、CPU卡);
支持远程多应用程序下载、远程参数下载(思创莱DMS系统);
高速热敏打印机,高达28行/秒,易装纸设计,支持双层纸打印,打印深度可调;
网络层采用Linux内建协议栈,使用统一的 Linux socket调用模式,无论选择以太网、WiFi、GPRS、CDMA等任意通讯方式,均为一次开发所有接口通用,摒弃了传统的AT指令集等数据传输形式。SSL层采用Open SSL国际通用SSL库,具有非常广泛的适用范围;
1.传统POS机进行GPRS连接时采用无线Modem模块内置的TCP协议栈,该方式有两个缺点:第一个缺点是通用性差,程序员进行开发时需要修改大量网络通讯源代码,用AT指令集代替标准socket调用。第二个缺点是无线Modem内置TCP协议栈容量有限,在传输大数据包(大于500字节)时极易导致丢包、错包现象。而思创莱系列POS机采用机器内Linux系统内置的PPP协议进行GPRS拨号,仅使用了无线Modem的二层链路层,由本机Linux内核处理三层以上的传输数据,极大地提高了无线传输的稳定性。程序员在网络调用时直接调用Linux标准的connect(), read(), write(), close()函数,程序员可以在以太网环境下调试通过然后无缝移植到GPRS网络环境下使用,几乎不需要修改源代码。
2.与以上GPRS的特性相同,思创莱系列POS机在WiFi无线局域网的实现方式上也是采用了Linux内核处理TCP协议,当从有线以太网环境移植到WiFi环境下时,程序员不需要做任何源代码的修改。
3.思创莱系列POS机均运行于Linux系统,使用通用标准的文件系统、进程调度功能,程序员几乎无需经过特别培训即可快速掌握开发模式。
4.思创莱系列POS机支持低功耗休眠,通过用户设置,机器可以在无用户操作时在指定的时间内进入休眠状态。进入休眠状态后,机器电池可以保持最长一个星期的待机而无需充电。
手持移动pos机SCL8300技术指标:处理器 32位高速CPU,ARM9内核,主频400MHz存储器 128MB FLASH,64MB DDR2 SDRAM显示器 128×64点阵液晶显示器,白色LED背光和专用图标按键键盘 10个数字/字母键,9个功能键,1个电源开关键,白色LED背光磁卡阅读器符合ISO7811、ISO7812标准,1/2/3磁道,支持双向竖刷卡 IC卡读写器 1个用户卡,符合 EMV4.2标准,支持 SLE4442/ SLE4428逻辑加密存储卡条码扫描头 630nm红光光源,最大扫描距离60cm,300次每秒超灵敏扫描性能 PSAM卡座 4个PSAM卡座,符合 ISO7816标准,支持PPS协议,最高速率可达300kbps可选非接触卡读写器支持Mifare classic、Mifare Ultralight、Mifare DESFire、ISO14443 A& B、SONY FeliCa读写可选内置无线通信 GPRS/ CDMA/ Wi-Fi/ GPRS& Wi-Fi,支持SSLv2/3 TLSv1可选内置MODEM通信同步HDLC:V.22bis,V.29,传输速率1200/2400/9600bps异步:V.34,传输速率可达33.6Kbps,可选56Kbps支持PPP拨号通讯,支持SSLv2/3 TLSv1远程下载支持DMS、FTP方式的远程下载外接接口个HDMI转换头,1个RJ45,1个RS-232(输出:5VDC,500mA)打印机高速热敏打印机易装纸设计速度:最高28行/秒(84毫米/秒)纸宽:58+0/-1mm纸卷外径:38mm打印深度可调,支持双层热敏纸打印语言中文(GB2312或GB18030)、英文、法文、德文、拉丁文、俄文、阿拉伯文、越南文等支持中文转换:简ó繁、BIG5óGB18030;支持Unicode字符集电源适配器输入:100~ 240VAC,50Hz/60Hz;输出:12VDC,3.0A可选锂电池 2150mAh,7. 4V,支持40小时以上待机时间,或400笔以上交易工作环境温度: 0℃~ 50℃(32℉~ 122℉),相对湿度:10%~ 90%(非冷凝)储藏环境温度:-20℃~ 60℃(-4℉~ 140℉),相对湿度:5%~ 95%(非冷凝)外型尺寸 200mm×85mm×68mm(长×宽×高)重量 700克可选配件皮套、备用锂电池、车载充电器、座充认证 CCC, CE, FCC, UL, RoHS 8200与8300功能对比 8200 8300外观普通结构更紧凑、手持更舒适。 LCD 128x64 128x64以太网有有 GPRS有有 WIFI无可扩展电话线接口可扩展可扩展热敏打印有有,打印效果更精致,噪音更低接触式IC卡有有磁条卡有有非接触式IC卡有有锂电池有,2000MAH有,2000MAH光学扫描头无可扩展,支持一维、二维扫描 USB口无有,包含USB HOST和USB SLAVE两种接口串口 1个 2个 PSAM 3个插槽 4个插槽 GPS卫星定位无可扩展