美文网首页
flutter-通过蓝牙给USBCAN卡发数据

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

作者: 为什么划船不靠桨 | 来源:发表于2022-12-04 20:43 被阅读0次

最近公司接了一个关于蓝牙的项目,具体要做的是按照客户要求开发安卓端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文件,关于权限的代码已经加上了,但是获取的蓝牙状态就是不可用,百度了好久,重要找到了解决方法。

<!--       这里我已经加上了蓝牙的权限申请-->
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
 <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-feature android:name="android.hardware.bluetooth_le" android:required="true"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

解决方法就是在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卡发数据

    最近公司接了一个关于蓝牙的项目,具体要做的是按照客户要求开发安卓端APP,APP里有多个页面,每个页面分别展示的是...

  • 疾风少年,南卡骨传导蓝牙耳机初体验!

    要说今年哪个品牌的蓝牙耳机是最为火爆?那么南卡应该是前三名了!南卡蓝牙耳机,在下半特别发力,通过不断的创新,推出好...

  • iOS 蓝牙通讯---简单的实现与蓝牙发送和接受数据

    首先描述一下我的使用场景,通过手机给蓝牙板子发送相应的数据(即指令)让蓝牙板子做出相应的操作;(如蓝牙锁的开锁关锁...

  • 2018-02-20

    简述安卓传统蓝牙和低耗蓝牙 概述: 通过蓝牙传输数据与Socket类似。在网络中使用Socket和ServerSo...

  • iOS轻松搞定蓝牙开发

    最近刚做了一个蓝牙开发的项目,要求通过蓝牙接收数据和写入数据,下面将蓝牙开发的流程做一个简单的介绍。 概念理解 开...

  • ios设备app作为蓝牙外设端

    苹果手机可以作为蓝牙外设端,被蓝牙中央端来扫描连接交互数据,实现模拟蓝牙外设硬件。通过阅读CoreBluetoot...

  • ESP32学习笔记(48)——WiFi蓝牙网关

    一、项目简介 蓝牙网关 又叫蓝牙探针,是采集蓝牙设备的蓝牙数据,通过 WIFI 等方式传至服务器的一款中继设备。如...

  • Android蓝牙通信

    基础准备 蓝牙通信概念 通常意义的蓝牙通信的含义就是Client通过蓝牙对接后进行数据通信,这里面需要注意的是蓝牙...

  • Android经典蓝牙通讯传输DEMO

    BlueUtils 项目地址:GitHub 经典蓝牙搜索,连接,数据传输小DEMO 通过经典模式 搜索 蓝牙应用。...

  • ios 智能电表蓝牙通信

    1、写数据: 蓝牙的读数据跟写数据都是通过向服务特征写入数据来完成。 [_currentPeripheral wr...

网友评论

      本文标题:flutter-通过蓝牙给USBCAN卡发数据

      本文链接:https://www.haomeiwen.com/subject/ojaixdtx.html