C#蓝牙通信,下位机esp32

By qq84628151 没有评论

这里展示2种C#蓝牙通信方式。

第一种是代码根据蓝牙名称搜索从机。

第二种是windows系统连接蓝牙,会多出2个串口,一个传入端,一个传出端。

1.先编写esp32下位机代码:

2.第一种通信方式,代码搜索从机并通信:

static void Main(string[] args)
{
    //创建蓝牙客户端实例
    BluetoothClient client = new BluetoothClient();
    //查询搜索到的所有设备然后查找对应的从机设备
    BluetoothDeviceInfo device = client.DiscoverDevices().FirstOrDefault(v => v.DeviceName == "ESP32-BT-Slave");

    if (device != null)
    {
        //蓝牙连接
        client.Connect(device.DeviceAddress, BluetoothService.SerialPort);
        //获取流
        using (var stream = client.GetStream())
        {
            //写入字符串
            byte[] dataWr = Encoding.ASCII.GetBytes("Hello world!\r\n");
            stream.Write(dataWr, 0, dataWr.Length);
            stream.Flush();

            Thread.Sleep(100);

            //读取字符串并打印
            byte[] dataRr = new byte[1024];
            var len = stream.Read(dataRr, 0, dataRr.Length);
            var data = Encoding.ASCII.GetString(dataRr, 0, len);
            Console.WriteLine($"收到数据: {data}");
        }

        client.Close();
    }

    Console.ReadLine();
}

2.第二种通信方式,用Windows系统连接蓝牙,然后串口通信:

桌面右下角找到蓝牙设备,点击添加蓝牙设备
蓝牙设置里点击添加蓝牙或其他设备
点击蓝牙
点击下位机蓝牙从机
匹配成功
代码使用串口COM5通信

C#代码串口通信读写数据:

static void Main(string[] args)
{
    //创建串口实例
    var serialPort = new SerialPort("COM5", 9600, Parity.None, 8, StopBits.One);
    //打开串口
    serialPort.Open();

    //写入数据
    var dataWr = Encoding.ASCII.GetBytes("Hello world!\r\n");
    serialPort.Write(dataWr, 0, dataWr.Length);
    serialPort.BaseStream.Flush();

    Thread.Sleep(100);

    //读取数据
    byte[] dataRr = new byte[1024];
    var len = serialPort.Read(dataRr, 0, dataRr.Length);
    var data = Encoding.ASCII.GetString(dataRr, 0, len);
    Console.WriteLine($"收到数据: {data}");

    serialPort.Close();

    Console.ReadLine();
}

至此全部结束。

第一种方式,通过代码搜索蓝牙会比较慢,每次都需要等待扫描设备,但好处是不需要用户去点击蓝牙连接和查看串口号。

第二种方式,由于通过系统蓝牙连接,程序立刻就能进行通信,坏处是需要用户连接蓝牙并且查看蓝牙串口号给到程序。