基于CC2530的蓝牙模块实验

实验内容

  • 了解蓝牙模块的基本原理
  • 通过简单的编程实现手机连接蓝牙模块,实现数据收发。

实验环境

实验所需硬件

序号 名称 数量 备注
1 电脑 1台 系统Windows7及以上
2 CC2530底座模块 1个 ·
3 蓝牙模块 1个 ·
4 CC Debugger 仿真器和连接线 1套 ·
5 USB线 1根 ·
6 蓝牙模块实验代码 1份 ·

实验所需软件

CC2530底座:HIVE ZigBee Pro(简称CC2530底座)是一种基于CC2530F256芯片的蜂巢底座。

实验硬件

CC Debugger 仿真器和连接线

实验硬件

蓝牙模块

蓝牙模块

USB线

USB线

实验原理

蓝牙是一种短距的无线通讯技术,可实现固定设备、移动设备之间的数据交换。一般将蓝牙3.0之前的BR/EDR蓝牙称为传统蓝牙,而将蓝牙4.0规范下的LE蓝牙称为低功耗蓝牙。

蓝牙分类

蓝牙4.0标准包括传统蓝牙模块部分和低功耗蓝牙模块部分,是一个双模标准。低功耗蓝牙也是建立在传统蓝牙基础之上发展起来的,并区别于传统模块,最大的特点就是成本和功耗降低,应用于实时性要求比较高。

蓝牙和蓝牙BLE对比:
蓝牙分类

BLE(Bluetooh Low Energy)蓝牙低能耗技术是短距离、低成本、可互操作性的无线技术,它利用许多智能手段最大限度地降低功耗。 BLE技术的工作模式非常适合用于从微型无线传感器(每半秒交换一次数据)或使用完全异步通信的遥控器等其它外设传送数据。这些设备发送的数据量非常少(通常几个字节),而且发送次数也很少(例如每秒几次到每分钟一次,甚至更少)。

BLE协议栈的结构和配置:

  1. 协议有两个部分组成:Controller和Host。
  2. Profiles和应用总是基于GAP和GATT之上。
  3. 在单芯片方案中,Controller和Host,profiles,和应用层都在同一片芯片中。
  4. 在网络控制器模式中,Host和Controller是在一起运行的,但是应用和profiles在另外一个器件上,比如PC或者其他微控制器,可以通过UART,USB进行操作。
  5. 在双芯片模式中,Controller运行在一个控制器,而应用层,profiles和Host是运行在另外一个控制器上。

BLE设备连接状态流程图

BLE连接流程图

低功耗蓝牙体系结构:

BLE蓝牙模块主要应用领域:

  • 移动扩展设备
  • 汽车电子设备
  • 健康医疗用品:心跳带、血压计等
  • 定位应用:室内定位、井下定位等
  • 近距离数据采集:无线抄表、无线遥测等
  • 数据传输:智能家居室内控制、蓝牙调光、打印机等

实验步骤

① 将蓝牙模块安装到CC2530底座上,如下图所示:

模块组装

② 轻按CCDebugger复位按键,指示灯变绿,表示连接正常。如下图:

模块组装

③ 访问github,进入github界面后点击Code,Clone HTTPS安全链接,如下图所示:

操作步骤

④ 打开电脑终端,进入工作目录workspace (workspace 为工程文件夹所在目录):

$ cd workspace

⑤ 运行clone命令:

$ git clone https://github.com/aiotcom/eps.git 

下载目录至指定文件夹下。
如果提示“command not found”表示电脑没有安装Git,请至Git官网下载。
如果电脑没有安装 Git 软件,也可以进入Github,点击 Code -> DownLoad ZIP 下载所有工程代码。如下图所示:
下载代码
如果电脑没有公网,可以进:D盘\实验教程与代码选择相应的代码。

⑥ 打开 IAR Embedded Workbench 工程软件,点击工具栏: File -> Open -> Workspace,选择工程文件:基于CC2530的模块实验\10.蓝牙模块\蓝牙模块程序\BLE.eww 并打开。

打开工程

选择文件

⑦ 点击Make按钮,重新编译文件,显示没有错误。

文件编译

⑧ 点击Download and Debug按钮,将程序下载到模块中。

下载程序

代码下载成功

⑨ 点击X退出仿真模式。

退出仿真

⑩ 移除CC Debugger仿真器,采用USB线供电。

⑪ 手机上安装“蓝牙调试器.apk”(只支持安卓手机),到手机应用商中店,搜索“蓝牙调试器”,如下图:

选择文件

⑫ 打开蓝牙调试器,找到BLE开头的蓝牙设备,如下图所示:

搜索蓝牙信号

⑬ 点击设置按照下图选择最每个选择框最下面的选项,如图所示:

选择特征值

⑭ 出现红色加号表明连接成功,进入对话模式,如下图:
进入对话模式

⑮ 输入在聊天框中输入123456,则会返回相同的数据信息,如下图所示。
进入对话模式

代码讲解

① 程序目录结构,源代码文件如下图:
代码目录结构

② main.c代码对蓝牙模块串口、蓝牙模块初始化,完成后,等待蓝牙设备被连接,连接后从串口接收数据,并返回接收到的数据。当设备被连接后,串口返回“Connected”,串口只要接收到这个字符器表明。

    void main(void)
    {
        Hal_Init_32M();//初始化32M时钟
        Init_Uart0();//初始化串口0,连接蓝牙模块,接收数据保存在USART0_RX_BUF
        BLE_Init();//初始化蓝牙为从机模式
        
        /*设备被连接后,返回“Connected”*/
        while(!strstr((const char*)USART0_RX_BUF,(const char*)"Connected"));
        USART0_RX_STA = 0;//清空串口接收计数
        while(1)
        {
            if(USART0_RX_STA)//接收到数据
            {
                delay_ms(50);//延时50ms等待数据接收完成
                UR0SendString(USART0_RX_BUF);//发送接收到的数据
                USART0_RX_STA = 0;//清空串口接收计数
                memset(USART0_RX_BUF,0,USART0_RX_SIZE);//清空数组
            }
        }
    }

常见问题

  1. 弹出警告窗口,不能下载程序。

    • 请确认CCDebugger驱动否安装。
    • 轻按CCDebugger仿真器的按键,指示灯不是绿色连接有问题。
    • CCDebugger仿真器是否正常接入到底座,参考实验步骤第一步。
  2. 下载代码后程序没观察到实验现象。

    • 请重新上电,或者按下底座上的复位按键。
    • 模块没有安装稳妥。
  3. 手机找不支蓝牙模块信号。

    • 确认模块电源灯是亮起,模块是否安装稳妥。