unity bluetooth android,Unity 实现蓝牙通信Arduino Bluetooth Plugin

Unity 实现蓝牙通信

1.话不多说上效果,目前开发的是Android版本的蓝牙和带蓝牙电子设备连接,下图展示的蓝牙控制机器小车运动,由于上传完整视频会比较麻烦,所以选择截屏展示,望大家见谅。

2.首先导入一个插件,插件官方地址    https://assetstore.unity.com/packages/tools/input-management/arduino-bluetooth-plugin-98960

支持平台

48ccd8170648dfc0bd3b77e61e2ceda1.png

9d151b1a77fab2219d0f7b774f64e494.png

2.从插件的名字可以看出支持Arduino,我们这篇主要讲解蓝牙功能,所以Ardunio在这边不介绍,有机会在做解析。插件导入成功后我们可以看到目录下 Assets/BluetoothAPI/Arduino Unity Plugin.pdf的文档,我们开始讲解。

80ac167b57a3d1e80848179598c8ea14.png

打开文档,首页先是对环境进行配置,不做太多的讲解,大家根据自己的需求配置环境

文档有太多内容,百度一下翻译也行,这边直接上代码

界面展示

using ArduinoBluetoothAPI;

using System;

using UnityEngine;

using UnityEngine.UI;

/*********

作者:Hankex

邮箱:xuzhiqiangqiang@foxmail.com

功能:蓝牙模块的核心交互模块

*********/

namespace Buletooth

{

public class UIController : MonoBehaviour

{

BluetoothHelper _m_helper;

public InputField m_deviceName_ipt; // 输入设备名称

public Button m_connect_btn; // 连接蓝牙按钮

public Button m_disconnect_btn; // 断开蓝牙连接按钮

public Button m_clearLog_btn; // 清除日子面板信息按钮

public Button m_hideLog_btn; // 隐藏当前面板按钮,一般连接成功就关闭这些面板,进入控制

public Text m_log_txt; // 输入的日志信息

// 消息处理的回调

Action_m_msgHandler;

public void AddMsgHandler(Actionhandler)

{

_m_msgHandler = handler;

}

void Awake()

{

// 添加连接按钮的事件

m_connect_btn.onClick.AddListener(() =>

{

if (!string.IsNullOrEmpty(m_deviceName_ipt.text))

{

Log("开始连接蓝牙:" + m_deviceName_ipt.text);

// 设置连接的设备名字

_m_helper.setDeviceName(m_deviceName_ipt.text);

// 开始连接

_m_helper.Connect();

}

});

// 添加断开连接按钮的事件

m_disconnect_btn.onClick.AddListener(Disconnect);

// 添加日志清除按钮的事件

m_clearLog_btn.onClick.AddListener(() =>

{

m_log_txt.text = "日志";

});

// 隐藏面板操作事件监听

m_hideLog_btn.onClick.AddListener(() =>

{

gameObject.SetActive(false);

});

try

{

// 获取 BluetoothHelper 实例

_m_helper = BluetoothHelper.GetInstance();

// 打开蓝牙

_m_helper.EnableBluetooth(true);

// 设置收发字符的长度,这里是重点,不设置则接,发 不了消息,要到数据缓存的一定的量才一次性发送

_m_helper.setFixedLengthBasedStream(1);

// 连接成功的回调函数

_m_helper.OnConnected += () =>

{

Log("连接成功");

// 连接成功,开始监听消息

_m_helper.StartListening();

};

// 连接失败的回调函数

_m_helper.OnConnectionFailed += () =>

{

Log("连接失败");

Disconnect();

};

// 没有找到设备的回调函数

_m_helper.OnServiceNotFound += serviceName =>

{

Log("没有找到设备:" + serviceName);

// 断开连接

Disconnect();

};

// 接收到消息的回调函数

_m_helper.OnDataReceived += () =>

{

Log("接收到一条新消息");

// 处理接收到的回调

_m_msgHandler(_m_helper.Read());

};

}

catch (Exception e)

{

Log("连接异常:" + e.Message);

Disconnect();

}

}

/// /// 输出日志

///

/// 日志内容

public void Log(string log)

{

m_log_txt.text += "\n" + log;

}

/// /// 发送消息

///

/// 消息的内容

public void Send(string msg)

{

_m_helper.SendData(msg);

}

void OnDestroy()

{

Disconnect();

}

/// /// 断开连接

///

void Disconnect()

{

Log("断开连接");

if (_m_helper != null)

_m_helper.Disconnect();

}

}

}

以上是核心交互模块,基本的蓝牙功能已经在里面了,上面是已经配对好蓝牙才能连接。一定要设置 BluetoothHelper.setFixedLengthBasedStream(int length)不然接发的消息会被缓存下来,到达指定的长度然后发送,本人在这边踩坑踩了很久。

如果想拓展功能 BluetoothHelper 还有以下方法:

扫描附近的设备: ScanNearbyDevices()

扫描完成后有个事件回调: OnScanEnded

判断是否配对: isDevicePaired()

是否开启低功耗模式: BluetoothHelper .Bool BLE 默认不开启的,注意 有些设备不支持低功耗模式

除了设置连接蓝牙的设备名字,还可以使用mac地址: setDeviceAddress(string deviceAddress)

源码链接就不给你们了,给你们也用不了,面对的终端不一样,上面的已经够用了。

下面分享的是插件链接,推荐AssetStore下载(大家懂的),下面提供插件的下载