概述
本来以为用Unity开发蓝牙功能非常简单,但是实际上去测试的时候才发现,还是有不少问题的。Unity中蓝牙通讯插件基本上也都是是用于安卓和ios系统的,但是现在的需求是要和HC-02蓝牙串口模块进行通讯,很显然就不符合需求,然后我就想到.net的库如此丰富,写完功能集成到Unity中不就可以了吗!如此便有了这篇博客做个简单的记录,希望能够帮助到需要的开发同僚。
开发环境
-
Unity2019.4.29f1 -
Visual Studio 2019 -
Unity .Net 4.x
本次使用到的.net包
- System.IO.Ports
这个包可以直接在VS的Nuget包管理中下载安装,用于串口通讯,主要使用了SerialPort这个类 - InTheHand.Net.Bluetooth.4.0.20
这个包就是和蓝牙建立连接用的,主要用到了BluetoothClient、BluetoothAddress、BluetoothService这几个类的功能,这个包必须要在Unity中导入动态连接库(DLL)才可以使用。
在这里给到各位一个Unity非常好用的插件,“NuGetForUnity”这个插件可以让你在Unity中非常容易的使用.net所有的包,一键安装非常安逸,以下是百度云链接,有需要的可以拿走,算是一点小福利 链接:https://pan.baidu.com/s/1FWNYAo8YuNJnwp3RfGrWPw 提取码:zg1f
正文
void Start()
{
BluetoothClient client = new BluetoothClient();
SerialPort com = new SerialPort("COM6");
com.BaudRate = 9600;
com.Parity = Parity.None;
com.StopBits = StopBits.One;
com.Handshake = Handshake.RequestToSend;
com.Open();
BluetoothAddress blueAddress = new BluetoothAddress(new byte[] { 0x24, 0x49, 0x05, 0xbf, 0x0c, 0x00 });
print(blueAddress);
foreach (var item in client.PairedDevices)
{
print(item.DeviceName);
if (item.DeviceName.Equals("HC-02"))
{
print("找到啦");
print("正在连接!");
blueAddress = item.DeviceAddress;
print(blueAddress);
client.Connect(blueAddress, BluetoothService.SerialPort);
if (client.Connected)
{
print("连接成功!");
Stream peerStream = client.GetStream();
HEXData = { 0xaa, 0xaa, 0x01, 0x02, 0x99, 0x05, 0x45, 0x00};
peerStream.Write(HEXData, 0, HEXData.Length);
print("发送成功!");
}
}
}
}
void Update()
{
}
准备工作做完以后,正文的工作就非常简单了,都是C#的基础知识应用,我在这里贴出了发送消息的代码,接收消息的代码我就没写了,都是非常简单的内容。在代码上我都写了注释,清晰易懂,大家按照自己的需求把功能写完善封装好即可。
这里再提醒一下, 波特率,校验位,停止位,控制协议等都要保持一致,否则可能会出现无法正常通讯的情况
还有在做通讯测试的时候,在汇承自带的工具中,记得点开HEX接收,因为都是16进制的数据,不点这个会无法
显示数据。
蓝牙的唯一标识在设备和打印机这个里面看
|