flutter-通过蓝牙给USBCAN卡发数据

最近公司接了一个关于蓝牙的项目,具体要做的是按照客户要求开发安卓端APP,APP里有多个页面,每个页面分别展示的是蓝牙控制按钮,点击按钮的时候发送蓝牙数据给蓝牙USBCAN卡,虽然我不会安卓原生,但学了flutter,安卓的东西也就能做了。UI这些非重点就不说了,主要说蓝牙和USBCAN卡。

客户是使用的如图显示的蓝牙USBCAN卡,这里有官网对于该蓝牙设备能下载的资源,包含蓝牙CAN无线接口卡配置软件蓝牙CAN卡使用手册,蓝牙2.0安卓源码及apk

蓝牙无线CAN卡

蓝牙代码这块,我是用的Flutter蓝牙插件flutter_blue,第一次使用的同学可以先看下官方的代码示例。我是直接使用官方提供的示例进行开发的,符合我的项目要求。也可以看下其他开发者写的使用介绍。

当代码完成以后,给蓝牙USBCAN卡接通电源,就可以发现蓝牙设备了,点击连接按钮连接上蓝牙设备以后,就可以给设备发数据了。这里又有一点问题,连接上蓝牙USBCAN卡后设备接受的数据能在哪里查看到,或者说我怎么知道设备接收到的数据格式是否正确呢?

带着疑问又去问了设备的技术支持,原来想要查看数据的格式,还需要一个叫做数据分析仪的机器,有了这个设备才能进行查看。然后我只能再去找客户要这个叫做数据分析仪的东西,客户又给发快递,过了几天终于到了,就是下面这个银白色的小盒子。

使用方法是将数据分析仪和蓝牙USBCAN卡进行串联,蓝牙USBCAN卡的另一端连接电源,数据分析仪的另一端链接数据线,数据线的另一端连接到电脑,通过CANTest监控软件就监听接收的数据了。

这里还有数据分析仪的生产厂家----广成科技CAN分析仪的B站视频教程,有疑问的小伙伴可以看看。

这里说一下我踩的坑

一、当我使用手机连接上蓝牙设备的时候,发送数据始终不能显示出接收到的数据,证明发送数据的代码是有问题的。仔细检查发现是我的数据格式不正确造成的。

蓝牙USBCAN卡接收的数据格式有严格的要求,缺少一位数据都会造成数据接收异常。而且还要注意,蓝牙发送的数据格式是十六进制的int类型的集合。

mCharacteristic.write([0x24,0x01,0x88,0x00,0x00,0xAA,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00]);

二、客户使用蓝牙无线CAN卡包含两个蓝牙版本,蓝牙2.0(经典蓝牙)和蓝牙4.0(低功耗蓝牙)。当给蓝牙设备通上电源以后,会发出两个蓝牙信号,也就是能搜到两个设备。但是因为我使用的flutter_blue蓝牙插件只支持低功耗蓝牙,所以只能搜到一个蓝牙信号。蓝牙无线CAN卡的蓝牙4.0信号不支持改设备名字,蓝牙2.0信号是支持改设备名字。

本来这样也没什么,但是客户的要求是要能给蓝牙设备改这个扫描到的蓝牙设备的名称,这样的话,我就不能使用蓝牙4.0信号也就是低功耗蓝牙了,只能使用蓝牙2.0信号。

flutter_blue蓝牙插件只支持低功耗蓝牙,不支持经典蓝牙,我只能换蓝牙插件了。恰好flutter_bluetooth_serial这个插件是支持经典蓝牙的,这样也就解决了蓝牙设备的改名称问题了。

三、因为蓝牙设备的接口卡配置软件没有Mac版本,所以我只能在Windows进行安装操作。而在Windows安装的时候,出现了一个问题就是始终无法正常安装,然后就找了蓝牙CAN卡的厂家技术支持,原来是因为开了360安全卫士,当时心里真是一万只草泥马奔腾而过。关闭了360,成功安装,真是坑啊。

四、当我开完完毕打包给测试同事测试的时候,发现一个问题,我debug的包可以正常使用蓝牙功能,但是release的包获取的蓝牙状态却是不可用,我分别查看了main文件夹和profile文件夹下的AndroidManifest.xml文件,关于权限的代码已经加上了,但是获取的蓝牙状态就是不可用,百度了好久,重要找到了解决方法。




 


解决方法就是在build.gradle文件中的buildTypes中的release中添加如下两行代码。

buildTypes {
        release {
            // TODO: Add your own signing config for the release build.
            // Signing with the debug keys for now, so `flutter run --release` works.
            signingConfig signingConfigs.debug

            //不加下面两行代码,打的release包蓝牙功能不可用
            shrinkResources false
            minifyEnabled false
            //在打包混淆时删除了无用代码导致程序bug,同样的问题也出现在百度地图发布release版本的情况
        }
    }

至此,终于把这个蓝牙的项目搞完了。联系客户,交付测试~~~~

你可能感兴趣的:(flutter-通过蓝牙给USBCAN卡发数据)