桌面软件开发之如何利用蓝牙与HC-05通信?

0.引言

  本文通过VisualStudio的C#开发桌面软件,实现蓝牙搜索、连接功能,并且能发送消息给HC-05蓝牙,也能接收HC-05回传的消息。本文在“ VisualStudio如何进行桌面软件开发?”一文的基础上,进行了第一次规范性应用,总结了这次开发经验。

1.安装蓝牙库

  安装InTheHand.Net.Bluetooth库。
  在这里插入图片描述

2.软件布局

  在这里插入图片描述

3.代码编写

  (1)初始化设置;
  在这里插入图片描述

private void Form1_Load(object sender, EventArgs e)
{
    //因需持续接收蓝牙信息,为防止卡死界面,需要开启线程
    //开启线程后,若要在线程中操作主界面控件,需要以下代码取消线程控件检查
    Control.CheckForIllegalCrossThreadCalls = false;
}

  (2)编写【搜索蓝牙】功能,双击搜索蓝牙按钮开始编写该按钮功能;
  在这里插入图片描述

private void button1_Click(object sender, EventArgs e)
{
    BluetoothClient client = new BluetoothClient();//处理蓝牙的对象
    BluetoothRadio radio = BluetoothRadio.Default;//获取电脑蓝牙
    radio.Mode = RadioMode.Connectable;//设置电脑蓝牙可被搜索到
    BluetoothDeviceInfo[] devices = client.DiscoverDevices().ToArray();//搜索蓝牙设备,10秒
	richTextBox1.Text = "";
    foreach (var item in devices)
    {               
        richTextBox1.AppendText(item.DeviceName + "\n");
    }
}

  (3)编写【连接蓝牙】功能,双击连接蓝牙按钮开始编写该按钮功能;
  在这里插入图片描述

 BluetoothClient client = new BluetoothClient();//处理蓝牙的对象
 BluetoothAddress blueAddress = null;//需要连接的蓝牙模块的唯一标识符
 private void button2_Click(object sender, EventArgs e)
 {
     BluetoothDeviceInfo[] devices = client.DiscoverDevices().ToArray();
     foreach (var item in devices)
     {
         if (item.DeviceName.Equals(textBox1.Text))//根据蓝牙名字找
         {
             blueAddress = item.DeviceAddress;//获得蓝牙模块的唯一标识符
             break;
         }
     }

     richTextBox1.Text = "";
     Thread listenThread;//监听线程
     listenThread = new Thread(ReceiveData);
     listenThread.Start();
 }

 /// <summary>
 /// 接收数据
 /// </summary>
 private void ReceiveData()
 {
     BluetoothEndPoint ep = new BluetoothEndPoint(blueAddress, BluetoothService.SerialPort);
     richTextBox1.AppendText("正在连接!" + "\n");
     client.Connect(ep);
     richTextBox1.AppendText("连接成功!" + "\n");
     while (client.Connected)
     {
         string receive = string.Empty;
         NetworkStream peerStream = client.GetStream();
         byte[] buffer = new byte[1024];
         peerStream.Read(buffer, 0, buffer.Length);
         receive = Encoding.UTF8.GetString(buffer).ToString();
         receive = Remove_0(receive);//格式处理,可根据情况改写函数
         //richTextBox1.AppendText(receive + "\n");
         string strTemp = "";
         if (receive.Length > 10)//接收的信息有中断情况,这里判断数据位数是否达到10位以上,未达到说明中断了,需要连接信息
         {
             richTextBox1.AppendText(strTemp+receive + "\n");
             strTemp = "";
         }
         else
         {
             strTemp = receive;
         }
         Thread.Sleep(100);
     }
 }

 private string Remove_0(string str)
 {
     string result = "";
     char[] chars = str.ToCharArray();
     for (int i = 0; i < chars.Count(); i++)
     {
         if (chars[i] != '\0' && chars[i] != '\r' && chars[i] != '\n')
         {
             result += chars[i];
         }
     }
     return result;
 }

  (4)编写【发送指令】功能,双击发送指令按钮开始编写该按钮功能。
  在这里插入图片描述

private void button3_Click(object sender, EventArgs e)
{
    if (client!=null)
    if (client.Connected)
    {
        NetworkStream peerStream = client.GetStream();//创建IO流对象
        string str = textBox1.Text;
        byte[] buffer = System.Text.Encoding.GetEncoding("gb2312").GetBytes(str);
        peerStream.Write(buffer, 0, buffer.Length);// 发送指令
        richTextBox1.AppendText("发送成功!" + "\n");
    }
}

4.功能演示

  (1)注意连接HC-05蓝牙前,必须将与HC-05配对过的设备取消配对;
  (2)第一连接蓝牙需要设置PIN;

  在这里插入图片描述
  (3)启动程序,搜索蓝牙;
  在这里插入图片描述
  (4)输入蓝牙名称:HC-05,连接蓝牙;
  在这里插入图片描述
  (5)输入指令:s,发送指令(这里的指令需要在HC-05接收端设置)。
  在这里插入图片描述

5.源代码

桌面软件开发之如何利用蓝牙与HC-05通信?-源代码

参考网址:
[1] cacrle. VisualStudio如何进行桌面软件开发?; 2023-03-18 [accessed 2023-03-28].
[2] 打代码的小明. 不一样的蓝牙连接方式——C#程序实现蓝牙通信; 2021-01-09 [accessed 2023-03-28].
[3] weixin_30341745. C#:蓝牙串口读数据和写数据; 2019-07-19 [accessed 2023-03-28].
[4] 努力成为好爸爸. 客户端实现蓝牙接收(C#); 2017-11-21 [accessed 2023-03-28].
[5] 东边的小山. [C#] 控制电脑蓝牙与外部蓝牙设备通信; 2022-02-19 [accessed 2023-03-28].
[6] M_Q. C# string类型和byte[]类型相互转换; 2016-10-12 [accessed 2023-03-28].
[7] ksr12333. C#蓝牙开发 “BluetoothRadio”未包含“PrimaryRadio”的定义; 2022-03-08 [accessed 2023-03-28].
[8] Air_Alter. 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败问题; 2017-12-25 [accessed 2023-03-28].
[9] cacrle. Arduino开发之如何连接蓝牙模块?; 2023-03-27 [accessed 2023-03-28].

  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值