Unity连接蓝牙设备的其中一种方法(不一定通用,但思路也许可以)

这篇具有很好参考价值的文章主要介绍了Unity连接蓝牙设备的其中一种方法(不一定通用,但思路也许可以)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 先让蓝牙设备与Windows系统进行蓝牙配对

        需要输入配对码进行配对,并且要配对成功,连接成功,之后Windows系统会自动分配一个COM端口给该蓝牙设备使用,是长期预留的那种端口,长期预留给该设备。

        也就是是说,若干年以后,如果蓝牙设备启动并连接到电脑,这个设备占用的端口依然还是当初那个端口。形如:“COM3”、“COM4”、“COM5”。。。。。。

         我用的是比较旧版本的设备,用的就是这种方式了,新版本应该也是大差不差。

         首先,打开Windows的设置面板
Unity连接蓝牙设备的其中一种方法(不一定通用,但思路也许可以),单片机,嵌入式硬件        接着,添加蓝牙设备

Unity连接蓝牙设备的其中一种方法(不一定通用,但思路也许可以),单片机,嵌入式硬件

        紧接着,确保先前已经开启了电脑的蓝牙功能,也确保蓝牙设备已经开启,连接需要连接的蓝牙设备,一般的蓝牙模块的默认名称是:HC-05

        据说:HC-05 通常是指一个能够作为主机或从机工作的全功能蓝牙模块,而它的亲戚型号 HC-06 主要用作从机。

Unity连接蓝牙设备的其中一种方法(不一定通用,但思路也许可以),单片机,嵌入式硬件

        然后,应该是需要配对的pin码,一般默认的配对码是:1234
        随后,一般就会配对成功,连接成功。
        其次,打开设备管理器(Win + X + M),查看端口(COM和LPT),刚刚配对的蓝牙设备所占用的端口就是其中的一个或者两个,如果是占用了两个,很可能是一个用于从电脑输出数据到蓝牙设备,一个是用于从蓝牙向电脑输入数据。

Unity连接蓝牙设备的其中一种方法(不一定通用,但思路也许可以),单片机,嵌入式硬件

        最后,既然已经知道了端口范围,那就去检验哪一个是“真正的端口”就可以了。

2. 火眼金睛判别真正的蓝牙设备端口

        可能用得到的命名空间
using System.Collections;
using System.Collections.Generic;
using System.IO.Ports;
using System.Threading;
using UnityEngine;
using TMPro;
using System;
using UnityEngine.UI;
using System.Drawing.Printing;
        我的方法的话,继承MonoBehaviour即可
public class COMPortFinderX : MonoBehaviour

        指定端口号或者遍历端口号,使用字符类型即可,

        例如,你可以指定 portName == "COM3"

private string portName;
        初始化一些后续需要用的东西:

        声明了一个SerialPort类型的私有变量serialPortSerialPort类在.NET中用于表示一个串行端口,可以用于串行通信。

        声明了一个Thread类型的私有变量readThreadThread类在.NET中用于表示一个线程,可以用于并行或后台执行任务。

        声明了一个int类型的私有变量baudRate,并将其初始化为9600。波特率(baud rate)是串行通信中的一个参数,表示每秒传输的符号(或比特)数量。9600是一个常见的波特率值。

private SerialPort serialPort;
private Thread readThread;
private int baudRate = 9600;
        顶层的判断(这里面有个CheckSerialData是我自己自定义的函数,底层的判断是CheckSerialData):

        注意,这里我打开了串口之后,测试完之后没有去关闭串口,在其他地方最终才关闭了串口,小伙伴记得注意打开串口之后要记得关闭串口哦,不然有可能会给项目的开发和测试造成干扰。

        在.NET的SerialPort类中,CtsHolding属性表示清除发送(Clear-to-Send,CTS)信号的状态。CTS是硬件流控制的一部分,用于在串行通信中协调数据的发送。

        当CtsHoldingtrue时,表示CTS信号是活动的,串行设备可以发送数据。当CtsHoldingfalse时,表示CTS信号是非活动的,串行设备应该停止发送数据。

        我使用的蓝牙手柄是支持发送数据的,如果不支持发送数据,或者某个端口是不支持发送数据的,那就不是我的蓝牙手柄,那就不是我想要的串口,那就可以PASS掉了。

try
{
    serialPort = new SerialPort(portName, baudRate);
    serialPort.ReadTimeout = 2000;
    serialPort.Open();
    if (serialPort.CtsHolding && CheckSerialData())
    {
        efficient= true;
    }
    else
    {
        invalid = true;
    }
}
catch (System.Exception e)
{
    string getE = e.ToString();
    invalid = true;
}
done = true;
        底层的判断:

        这里的判断我是根据数据按照自己的格式切分后的长度来判断是否蓝牙手柄

        如果切分后的长度大于等于1,那就是我想要的蓝牙手柄

        小伙伴们可以根据自己的项目需求来自定义自己的判断逻辑

try
{
    bool IsHC;
    string receivedData = serialPort.ReadLine();
    if (receivedData != null)
    {
        string[] values = receivedData.Split(',');
        if (values.Length >= 1)
        {
            IsHC = true;
        }
        else
        {
            IsHC = false;
        }
        serialPort.Close();
        return IsHC;
    }
    else
    {
        IsHC = false;
        serialPort.Close();
        return IsHC;
    }
}
catch (System.Exception e)
{
    bool IsHC = false;
    serialPort.Close();
    return IsHC;
}

        通过多层次的判断,最终就能得到自己的蓝牙设备的端口号了,这个端口号一般情况来说(不去刻意修改的情况下)是长期有效的,配对的时候是什么端口号,以后基本上还会是什么端口号,这个端口号就代表某个蓝牙设备。

        即使不放心,可以写一个自定义的程序,在每次使用蓝牙设备之前,重新识别和绑定一下自己的设备端口号,这种方法就十分稳妥。

        至此,既然得到了端口号,每次在Untiy游戏中需要的时候,连接这个端口,就可以让Unity与蓝牙设备交互了。

总共5个步骤:

        1. 指定端口号和波特率:

serialPort = new SerialPort(portName, baudRate);

        2. 可以指定超时的时间,超时就是过了这个时间还连接不成功,那就不连接了,无效处理

serialPort.ReadTimeout = 2000;

        3. 打开串口传输:

serialPort.Open();

        4. 逐行读取串口数据:

string receivedData = serialPort.ReadLine();

        5. 不用的时候,或者结束的时候,记得关闭串口哦

serialPort.Close();

        甚至是(因为我用的是子线程来连接串口):文章来源地址https://www.toymoban.com/news/detail-783059.html

readThread.Abort();

到了这里,关于Unity连接蓝牙设备的其中一种方法(不一定通用,但思路也许可以)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 检测已连接的蓝牙设备 - iOS

    检测蓝牙已连接 的情况下更加具体的获取一些当前连接设备的信息数据,具体实现方法如下: 以上便是此次分享的全部内容,希望能对大家有所帮助!

    2024年02月12日
    浏览(42)
  • 微信小程序 蓝牙设备连接,控制开关灯

    微信小程序中连接蓝牙设备,信息写入流程 1 、检测当前使用设备(如自己的手机)是否支持蓝牙/蓝牙开启状态 wx:openBluetoothAdapter({}) 2 、如蓝牙已开启状态,检查蓝牙适配器的状态 wx.getBluetoothAdapterState({}) 3 、添加监听蓝牙适配器状态变化 wx.onBluetoothAdapterStateChange({}) 4 、搜

    2024年02月12日
    浏览(51)
  • 微信小程序连接蓝牙设备并传递数据

    流程图 分步详解 wx.getSystemInfo(Object object)  获取系统信息 获取操作系统及版本 页面加载的时候(或者app.js中 ) ↓ 初始化蓝牙模块  wx.openBluetoothAdapter(Object object) 在用户蓝牙开关未开启或者手机不支持蓝牙功能的情况下,通过错误码(errCode=10001),提示打开蓝牙或蓝牙功能

    2024年02月08日
    浏览(54)
  • 【Windows】电脑修改已连接的蓝牙设备名称

    问题 有好几个同款的蓝牙耳机,连接电脑后默认显示名字一样,想像手机上一样备注这些耳机的名称。 网上搜索半天,只有修改电脑本身蓝牙名称的方法,而不是修改连接的设备的名称!摸索半天,得出下边的方法 修改连接的蓝牙设备名称 注1: 此方法重启后可能会恢复如

    2024年02月13日
    浏览(43)
  • iOS设备和蓝牙模块连接基础知识

    iOS设备和蓝牙模块连接基础知识 一:iOS连接外设的几种方式 如图下面几种方式: CoreBluetooth和ExternalAccessory,两个框架,基本上是蓝牙设备与iOS设备连接的方式 有图可知,EAP要MFi认证,要求设备的设计理念符合苹果的要求,不仅可以进行无线蓝牙通信,还可以进行有线通信(

    2023年04月20日
    浏览(49)
  • 微信小程序——实现蓝牙设备搜索及连接功能

    ✅作者简介:2022年 博客新星 第八 。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏:微信小程序学习分享 ✨特色专栏:国学周更-心性养成之路 🥭本文内容:微信小程序——实

    2024年02月08日
    浏览(60)
  • Android连接蓝牙设备问题(android.permission.BLUETOOTH)

            近期遇到一个问题,之前发布的APP连接蓝牙都是正常的,现在有人反映连不上了。经过测试发现:android 12 和 harmonyOS 3.0.0 都会有这个问题,而之前的版本就不会有这个。         经过网上一番查找,原来是因为最近Google发布的Android 12,新引入了 BLUETOOTH_SCAN、

    2024年01月16日
    浏览(44)
  • uniapp微信小程序蓝牙连接与设备数据对接

    蓝牙连接并通信方法封装大致步骤。 初始化蓝牙并搜索; 获取并启用service服务; 数据读取和监听设备返回数据 需要使用uniapp官方提供api: 1、开启蓝牙适配器初始化蓝牙模块,获取手机蓝牙是否打开 2、开启蓝牙设备搜索 3、获取搜索到的设备信息 4、关闭蓝牙搜索 5、连接

    2024年02月04日
    浏览(48)
  • 第三代网关,POE级联蓝牙网关VDB3601,至多可连接38台蓝牙设备

    第三代蓝牙网关,网关集成了蓝牙4.2/5.0+WiFi无线协议, 采用双网口设计,1台主蓝牙网关可级联多个从蓝牙网关设备,至多支持远距离连接和控制38台蓝牙设备的蓝牙网关VDB3601 ,支持双蓝牙模组、485通信、可兼容4G/Cat.1模块,安装更方便,能适用无法布线的特殊场景。VDB3601升

    2024年02月13日
    浏览(33)
  • 蓝牙bluesoleil 不能与该设备建立连接该怎么办?

    蓝牙设备无法正常连接,而且它是不需要配对密码的,可还是出现无法连接,并“蓝牙bluesoleil 不能与该设备建立连接,请确认其电源开启且已设置为可发现模式”,现在来解说如何解决这个问题 1、首先,单击右下角蓝牙图标,注意,此时,它是蓝色的,然后再单击“显示经

    2024年02月07日
    浏览(59)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包