在c#中通过串行端口访问蓝牙数据

本文关键字:访问 数据 串行端口 | 更新日期: 2023-09-27 18:04:51

所以我在Unity3D中工作,用c#编程,我听说可以通过SerialPort从蓝牙适配器读取数据。我有几个蓝牙USB适配器,我试图用这种方法在我的电脑上连接。但是,当我尝试打开SerialPort时,我得到一个错误消息,说端口不存在。我只包含了与问题相关的代码,但是portI是一个字符串("COM11"或"COM12"),而PortIn的类型是SerialPort。

void OnGUI() {
    GUI.Label(new Rect(btnX, btnY, btnW, btnH), "PortIn = " + portI);
    if(!connected) {
        for (int i = 0; i<ports.Length; i++) {
            if(GUI.Button(new Rect(btnX, btnY + btnH + (btnH * i), btnW, btnH), ports[i])) {
                portI = ports[i];
            }
        }           
    }       
    if(GUI.Button(new Rect(btnX + (btnW * 2 + 20), btnY, btnW, btnH), "Connect")) {
        portIn = new SerialPort(portI, 9600);               
        portIn.ReadTimeout = 1000;
        if (!portIn.IsOpen) {
            portIn.Open();
        }
        connected = true;
        }
    }       
}

在c#中通过串行端口访问蓝牙数据

这是我正在处理的一些代码,它从蓝牙连接到独立pc构建(或在编辑器中)获得数据,只要COM端口(在我的情况下COM9)与蓝牙设备在配对时相同。

配对后,进入蓝牙设置> COM端口,查看设备名称对应的端口。可能是COM8或COM9之类的。如果设备配对并且COM端口在代码中与蓝牙设置中相同,并且超时数和波特率与您正在发送数据的应用程序相同…然后,当您运行它时,您将从这段代码中得到一些东西。这只是为了帮助通过蓝牙连接到串行连接。

希望能帮到别人。我从阅读这些论坛中得到了很多很好的建议;)

using System.Collections;
using System.IO.Ports;
public class checker : MonoBehaviour {
    public static SerialPort sp = new SerialPort("COM9", 9600, Parity.None, 8, StopBits.One);
    public string message, message1;
    public string message2;
    void Start() {
        OpenConnection();   
    }
    void Update() { 
        message2 = sp.ReadLine(); 
    } 
    void OnGUI()    {
        GUI.Label(new Rect(10, 180, 100, 220), "Sensor1: " + message2);
    }
    public void OpenConnection() {
        if (sp != null) 
        {
            if (sp.IsOpen) 
            {
                sp.Close();
                message = "Closing port, because it was already open!";
            }
            else 
            {
                sp.Open(); 
                sp.ReadTimeout = 1000;  
                message = "Port Opened!";
            }
        }
        else 
        {
            if (sp.IsOpen)
            {
                print("Port is already open");
            }
            else 
            {
                print("Port == null");
            }
        }
    }
    void OnApplicationQuit() {
        sp.Close();
    }
}

这应该是可能的。蓝牙rfcomm/spp服务模拟一个串行端口。如果是在Windows上,则为COM端口。波特率在这个模拟中并不重要,它总是尽可能快地运行。

您需要将设备配对并连接。你在连接什么设备?尝试先用Putty或其他终端应用程序建立连接。