ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

不一样的蓝牙连接方式——C#程序实现蓝牙通信

2021-01-09 23:33:03  阅读:284  来源: 互联网

标签:Console item 程序实现 蓝牙 C# WriteLine using 标识符


之前做项目的时候,需要使用电脑程序通过蓝牙向硬件设备发送指令,于是便研究了一下怎么用C#程序和蓝牙进行通信。

1、思路

  1. 电脑蓝牙和蓝牙模块配对连接
    和我们平时正常连接蓝牙设备一样,需要先搜索附近的蓝牙设备,然后根据设备名来选择要连接的蓝牙模块,连接时就根据该蓝牙模块的地址(惟一标识号)来进行连接。
  2. 发送数据给蓝牙模块
    发送的过程就和平时读写文件很类似,只是IO流不一样的区别

2、实现

2.1 使用的库

C#进行蓝牙操作需要用到的库是 InTheHand.Net。在VS中可以直接在Nuget中安装,这是我觉得VS最好用的一个找各种库的最好的方法。
工具菜单->NuGet包管理器->管理解决方案的Nuget程序包
在这里插入图片描述
然后直接搜索 InTheHand.Net,选择对应的库文件之后点击安装即可使用
在这里插入图片描述

2.2 搜索附近的蓝牙设备

BluetoothClient client = new BluetoothClient();     //处理蓝牙的对象
BluetoothRadio radio = BluetoothRadio.PrimaryRadio;  //获取电脑蓝牙
radio.Mode = RadioMode.Connectable;     //设置电脑蓝牙可被搜索到
BluetoothAddress blueAddress ;  		//需要连接的蓝牙模块的唯一标识符
BluetoothDeviceInfo[] devices = client.DiscoverDevices(); 	//搜索蓝牙设备,10秒
 //从搜索到的所有蓝牙设备中选择需要的那个
 foreach (var item in devices) 
 {
     if(item.DeviceName.Equals("需要连接的蓝牙模块名字"))	//根据蓝牙名字找
     {
         Console.WriteLine(item.DeviceAddress);
         Console.WriteLine(item.DeviceName);
         blueAddress = item.DeviceAddress;			//获得蓝牙模块的唯一标识符
         break;
     }
     Console.WriteLine(item.DeviceAddress);
     Console.WriteLine(item.DeviceName);
 }

搜索蓝牙设备的目的是为了得到想要连接的那个蓝牙模块的唯一标识符,如果之前这个蓝牙设备已经和电脑连接过,那么电脑上就会有设备记录,可以直接找到唯一标识符从而就可以省去上面的这一步直接进行连接。
控制面板->设备和打印机-》右键想要连接的蓝牙设备->属性->蓝牙->唯一标识符
在这里插入图片描述
在这里插入图片描述
在代码中只需要创建一个蓝牙唯一标识符的对象即可,但是填写唯一标识符的时候需要倒着填并且用16进制表示

BluetoothAddress blueAddress = new BluetoothAddress(new byte[] { 0x21, 0x18, 0x28, 0x03, 0x19, 0x20 }) ; 

3、样例代码

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using InTheHand.Net;
using InTheHand.Net.Bluetooth;
using InTheHand.Net.Sockets;

namespace BluetoothStudy
{
    class Program
    {
        static void Main(string[] args)
        {
            BluetoothClient client = new BluetoothClient();     //处理蓝牙的对象
            BluetoothRadio radio = BluetoothRadio.PrimaryRadio;  //获取电脑蓝牙
            radio.Mode = RadioMode.Connectable;     //设置电脑蓝牙可被搜索到
            BluetoothAddress blueAddress ;  		//需要连接的蓝牙模块的唯一标识符
            BluetoothDeviceInfo[] devices = client.DiscoverDevices(); 	//搜索蓝牙设备,10秒
             //从搜索到的所有蓝牙设备中选择需要的那个
             foreach (var item in devices) 
             {
                 if(item.DeviceName.Equals("需要连接的蓝牙模块名字"))	//根据蓝牙名字找
                 {
                     Console.WriteLine(item.DeviceAddress);
                     Console.WriteLine(item.DeviceName);
                     blueAddress = item.DeviceAddress;			//获得蓝牙模块的唯一标识符
                     break;
                 }
                 Console.WriteLine(item.DeviceAddress);
                 Console.WriteLine(item.DeviceName);
             }
             
            BluetoothEndPoint ep = new BluetoothEndPoint(blueAddress, BluetoothService.SerialPort);
            Console.WriteLine("正在连接!");
            client.Connect(ep);   //开始配对 蓝牙4.0不需要setpin
            if(client.Connected)
            {
                Console.WriteLine("连接成功!");
                Stream peerStream = client.GetStream();		//创建IO流对象
                string str = "发送的内容";
                peerStream.Write(str,0,str.Length); // 发送开门指令
                Console.WriteLine("发送成功!");
            }
        }
    }
}

4、总结

  • 处理类似蓝牙等和硬件相关的程序,一定是存在某个库专门来处理的,就拿InTheHand.Net这个库来举例子,我看了他们的官网,除了可以对蓝牙进行处理之外,还可以对NFC进行处理。所以在遇到一些不知道不同东西怎么结合的情况时,就多上网查有没有什么类似的库可以用
  • 一般拿到一个库时,大多数情况只需要一些最基本的功能,最好的学习方法就是找一个经典的代码例子,看懂了基本就知道怎么用了。但如果需要深度使用的话,最好就是上官网,官网都会有开发文档介绍具体的用法

标签:Console,item,程序实现,蓝牙,C#,WriteLine,using,标识符
来源: https://blog.csdn.net/weixin_44689154/article/details/112412013

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有