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