C#蓝牙通信,下位机esp32
这里展示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系统连接蓝牙,然后串口通信:






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();
}

至此全部结束。
第一种方式,通过代码搜索蓝牙会比较慢,每次都需要等待扫描设备,但好处是不需要用户去点击蓝牙连接和查看串口号。
第二种方式,由于通过系统蓝牙连接,程序立刻就能进行通信,坏处是需要用户连接蓝牙并且查看蓝牙串口号给到程序。