Unity 实现蓝牙通信Arduino Bluetooth Plugin
2020-07-20 04:15
10878 查看
Unity 实现蓝牙通信
1.话不多说上效果,目前开发的是Android版本的蓝牙和带蓝牙电子设备连接,下图展示的蓝牙控制机器小车运动,由于上传完整视频会比较麻烦,所以选择截屏展示,望大家见谅。
2.首先导入一个插件,插件官方地址 https://assetstore.unity.com/packages/tools/input-management/arduino-bluetooth-plugin-98960
支持平台
2.从插件的名字可以看出支持Arduino,我们这篇主要讲解蓝牙功能,所以Ardunio在这边不介绍,有机会在做解析。插件导入成功后我们可以看到目录下 Assets/BluetoothAPI/Arduino Unity Plugin.pdf的文档,我们开始讲解。
- 打开文档,首页先是对环境进行配置,不做太多的讲解,大家根据自己的需求配置环境
- 文档有太多内容,百度一下翻译也行,这边直接上代码
界面展示
[code]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<string> _m_msgHandler; public void AddMsgHandler(Action<string> handler) { _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(); } } /// <summary> /// 输出日志 /// </summary> /// <param name="log">日志内容</param> public void Log(string log) { m_log_txt.text += "\n" + log; } /// <summary> /// 发送消息 /// </summary> /// <param name="msg">消息的内容</param> public void Send(string msg) { _m_helper.SendData(msg); } void OnDestroy() { Disconnect(); } /// <summary> /// 断开连接 /// </summary> 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下载(大家懂的),下面提供插件的下载
相关文章推荐
- 如何在 Windows Mobile (WinCE 5.0) 中用Vc++编程查找并连接周围的蓝牙(Bluetooth)设备并实现数据通信
- 如何在 Windows Mobile (WinCE 5.0) 中用Vc++编程查找并连接周围的蓝牙(Bluetooth)设备并实现数据通信
- hc-05蓝牙模块与arduino连接实现手机控制蓝牙智能小车
- Android上的蓝牙通信功能的开发:BluetoothChat例程分析
- 基于python实现蓝牙通信代码实例
- Windows Phone代码与Unity相互通信(事件方式)实现详解
- iOS基础——实现蓝牙BLE4.0通信功能
- Android Bluetooth蓝牙开发\蓝牙协议\蓝牙通信例子_Android支持蓝牙4.0版本_BLE开发
- Android BLE 蓝牙低功耗教程,中央BluetoothGatt和周边BluetoothGattServer的实现
- 【Unity与Android】01-Unity与Android交互通信的简易实现
- Android 蓝牙通信——AndroidBluetoothManager
- Android 蓝牙( Bluetooth)耳机连接分析及实现
- unity基于TCP的socket通信实现“群聊”功能
- 【arduino】anroid的app与arduino的ch05,进行蓝牙通信遇到的问题
- 如何实现Windows Phone代码与Unity相互通信(事件方式)
- 如何实现Windows Phone代码与Unity相互通信(插件方式)
- 通过aar包实现Unity与安卓间的通信
- Android 蓝牙( Bluetooth)耳机连接分析及实现
- Android BLE 蓝牙低功耗教程,中央BluetoothGatt和周边BluetoothGattServer的实现
- Android BLE设备蓝牙通信框架BluetoothKit