Unity 实现蓝牙通信Arduino Bluetooth Plugin

Unity 实现蓝牙通信

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

 

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

支持平台

Unity 实现蓝牙通信Arduino Bluetooth Plugin_第1张图片

Unity 实现蓝牙通信Arduino Bluetooth Plugin_第2张图片

 

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

Unity 实现蓝牙通信Arduino Bluetooth Plugin_第3张图片

 

  • 打开文档,首页先是对环境进行配置,不做太多的讲解,大家根据自己的需求配置环境
  • 文档有太多内容,百度一下翻译也行,这边直接上代码

     界面展示

using ArduinoBluetoothAPI;
using System;
using UnityEngine;
using UnityEngine.UI;
/*********
作者:Hankex
邮箱:[email protected]
功能:蓝牙模块的核心交互模块
*********/
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(Action 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();
            }
        }

        /// 
        /// 输出日志
        /// 
        /// 日志内容
        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下载(大家懂的),下面提供插件的下载

你可能感兴趣的:(Unity 实现蓝牙通信Arduino Bluetooth Plugin)