您的位置:首页 > 移动开发 > Unity3D

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下载(大家懂的),下面提供插件的下载

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: