在本教程中,我们将学习如何通过连接蓝牙模块(HC-06)来无线制作PIC项目。在上一教程中,我们已经学习了如何在PIC单片机中使用USART模块,并建立了PIC与计算机之间的通信。如果您是绝对的初学者,请在此处查看我们所有的PIC教程,这些教程都是我们从头开始的,例如学习MPLAB和XC8,连接LED,LCD,使用定时器,ADC,PWM等。
在这里,我们使用了流行的 蓝牙模块HC-06。使用此模块,我们可以从PIC MCU无线接收信息并将信息发送到移动应用程序或计算机。 PIC和HC-06之间的通信是使用PIC微控制器中提供的USART模块建立的。您也可以使用HC-05。我们再次在相同的异步8位模式下运行,但是这次我们将稍稍修改一下代码,使其可与Bluetooth模块配合使用。因此,事先学习UART教程是该项目的另一个优点。
在本教程中,我们将通过从智能手机发送打开或关闭命令来切换LED。我们将使用一个名为Bluetooth Terminal的Android应用程序,该应用程序可以通过Bluetooth发送和接收数据。如果我们从应用程序发送了一个字符“ 1”,则该光将在PIC板上打开,并且我们将向电话确认回光。同样,我们可以从电话发送“ 0”以将其关闭。这样,我们可以控制PIC板上的LED灯,类似于UART教程,但现在是无线的。本教程末尾提供了完整程序和详细视频。
设置的基本框图如下所示。
要求:
硬件:
- PIC16F877A性能评估板
- HC-05或HC-06蓝牙模块
- 电脑(用于编程)
- 移动电话
- PICkit 3编程器
软件:
- MPLABX
- 蓝牙终端(移动应用)
蓝牙模块HC-06:
蓝牙可以在以下两种模式下运行:
- 命令模式
- 操作模式
在 命令模式下, 我们将能够配置蓝牙属性,例如蓝牙信号的名称,其密码,工作波特率等。“ 工作模式” 是一种我们可以在PIC微控制器之间发送和接收数据的模式。和蓝牙模块。因此,在本教程中,我们将只涉及“操作模式”。命令模式将保留为默认设置。设备名称为HC-05(我正在使用HC-06),密码为0000或1234,最重要的是,所有蓝牙模块的默认波特率均为9600。
该模块采用5V电源供电,信号引脚采用3.3V工作电压,因此模块本身具有3.3V稳压器。因此,我们不必为此担心。在六个引脚中,只有四个将用于工作模式。引脚连接表如下所示
序号 |
钉在HC-05 / HC-06上 |
MCU上的引脚名称 |
PIC中的引脚号 |
1个 |
Vcc |
Vdd |
31日销 |
2 |
Vcc |
nd |
32 ND销 |
3 |
Tx |
RC6 /发送/ CK |
第25针 |
4 |
接收 |
RC7 /接收/ DT |
26个销 |
5 |
州 |
数控 |
数控 |
6 |
EN(启用) |
数控 |
数控 |
查看我们的其他项目,以了解有关带有其他微控制器的蓝牙模块HC-05的更多信息:
- 使用Arduino的蓝牙控制玩具车
- 使用8051的蓝牙控制的家庭自动化系统
- 使用Raspberry Pi的声控灯
- 使用Arduino和处理功能的智能手机控制FM收音机
- 使用G传感器和Arduino的手机控制机器人车
编程用于蓝牙通信的PIC微控制器:
像所有模块(ADC,定时器,PWM)一样,我们还应该初始化蓝牙模块。初始化类似于UART初始化,但是我们需要进行一些更改,以使蓝牙与PIC16F877A MCU完美配合。让我们定义配置位,并从蓝牙初始化功能开始。
初始化蓝牙:
市场上几乎所有的蓝牙模块都以9600的波特率工作,将您的波特率设置为与运行波特率的蓝牙模块相同是非常重要的,由于我们以20Mhz的时钟频率运行,因此此处设置SPBRG = 129 9600作为波特率。因此,以上初始化仅适用于以9600波特率运行的蓝牙模块。也必须使能高速波特率位BRGH。这将有助于设置准确的波特率。
// ******使用USART初始化蓝牙******** // void Initialize_Bluetooth(){//设置RX和TX的引脚// TRISC6 = 1; TRISC7 = 1; //使用数据表中的查询表设置波特率(pg114)// BRGH = 1; //始终与蓝牙一起使用高速波特率,否则它将不起作用SPBRG = 129; //打开Asyc。串口// SYNC = 0; SPEN = 1; //设置8位收发RX9 = 0;TX9 = 0; //启用发送和// TXEN = 1;CREN = 1;//启用global和ph。中断// GIE = 1; PEIE = 1;//为Tx启用中断。和Rx.// RCIE = 1; TXIE = 1; } // ___________ BT已初始化______________ //
如果您有一个以不同波特率运行的BT模块,则可以参考下面的查找表来找出SPBRG的值。
将数据加载到蓝牙:
一旦函数被初始化,我们的程序中就有三个函数可以从蓝牙发送和接收数据。与UART不同,我们在传输或接收数据之前没有什么要考虑的事情。蓝牙模块内部有一个发送和接收缓冲区,发送给它的数据将存储在Tx缓冲区中。除非将回车发送到模块,否则不会广播(广播)此数据。因此,为了传输数据,我们必须加载BT的Rx缓冲区,然后使用回车将其广播。
通过使用以下功能,可以轻松实现上述工作。当我们只需要在Rx缓冲区中加载一个字符时,可以使用下面的函数。我们将数据加载到TXREG寄存器中,并等待直到通过使用while循环检查标志TXIF和TRMT对其进行处理。
//加载蓝牙Rx的功能。具有一个字符的缓冲区。// void BT_load_char(char byte){TXREG = byte; while(!TXIF); while(!TRMT); } //函数结束//
以下函数用于将字符串加载到蓝牙模块的Rx缓冲区中。字符串被分成字符,每个字符被发送到 BT_load_char() 函数。
//加载蓝牙Rx的功能。带字符串的缓冲区//空BT_load_string(char * string){while(* string)BT_load_char(* string ++); } //函数结束/
通过蓝牙广播数据:
到目前为止,我们只是将信息传输到HC-05模块的Rx缓冲区中。现在,我们必须指示它使用此功能通过空中广播数据。
//用于从RX广播数据的功能。缓冲区// void broadcast_BT(){TXREG = 13; __delay_ms(500); } //函数结束//
在此函数中,我们将值13发送到TXREG寄存器。该值13等于十进制的小数(请参见ASCII图表)。然后,为广播公司创建了一个小的延迟。
从蓝牙读取数据:
与UART类似,以下功能用于从蓝牙读取数据
//从BT的Rx.buffer中获取char的函数// char BT_get_char(void){if(OERR)//检查超限运行错误{CREN = 0; CREN = 1;//重置CREN} if(RCIF == 1)//如果用户发送了一个char,则返回char(ASCII值){while(!RCIF); 返回RCREG;} else //如果用户未发送任何消息,则返回0返回0; } //函数结束/
如果用户发送了数据,则此函数将返回可以保存在变量中并进行处理的特定数据。如果用户未发送任何内容,该函数将返回零。
主功能:
我们已经在内部或主要功能中使用了上述所有功能。我们发送一些介绍性消息,然后等待用户发送一些值,基于这些值,我们将切换连接到Perf板上的RB3引脚的RED led灯。
void main(void){//作用域变量声明// int get_value; //变量声明的结尾//// I / O声明// TRISB3 = 0; // I / O声明的结尾// Initialize_Bluetooth(); //让我们的蓝牙做好准备// //开机后立即显示一些介绍性消息// BT_load_string(“ Bluetooth Initialized and Ready”); broadcast_BT(); BT_load_string(“按1打开LED”); broadcast_BT(); BT_load_string(“按下0来关闭LED”); broadcast_BT(); //消息结尾// while(1)//无限次{{get_value = BT_get_char(); //读取字符。通过BT收到// //如果收到'0'// if(get_value =='0'){RB3 = 0; BT_load_string(“ LED熄灭”); broadcast_BT(); } //如果我们收到'1'// if(get_value =='1'){RB3 = 1; BT_load_string(“ LED点亮”); broadcast_BT();}}}
在下面的代码部分中检查完整程序。
电路图和硬件设置:
这个项目的电路连接非常简单,我们只需要开机蓝牙模块和TX连接到26个PIC和Rx的引脚和25个PIC的引脚如下图所示的电路示意图:
现在让我们继续进行硬件。一旦连接完成,它应该看起来像这样。
使用蓝牙移动应用程序控制LED:
现在让我们准备好我们的Android应用程序。从App Store下载名为Bluetooth Terminal的应用程序,或使用此链接。一旦下载并安装了该应用程序,请打开您自开始使用的PIC性能板。蓝牙模块上的小LED灯应闪烁以表明其已打开电源,并且正在积极寻找用于建立连接的电话。
现在进入手机的蓝牙设置并搜索新的蓝牙设备,您应该可以根据模块看到名称HC-05或HC-06。我正在使用HC-06,因此我的手机显示以下显示。然后尝试与之配对,它将要求输入密码。输入密码1234(某些密码可能是0000),然后单击“确定”,如下所示。
配对成功后,打开我们刚刚安装的Bluetooth Terminal应用程序。进入设置选项,然后选择 “连接设备-安全” ,如下所示。这将打开一个弹出框,其中将列出我们所有已配对的设备,如下所示。选择HC-05或HC-06模块。
建立连接后,到目前为止,蓝牙模块上正在闪烁的指示灯必须一直保持不变,以表明它已成功连接到您的手机。并且我们应该从我们的程序中获得介绍性消息,如下所示。
现在按“ 1”打开LED灯,然后按“ 0”关闭灯。完整的工作将在视频中显示。您的移动屏幕将如下所示。
就是这样,我们已经学会了如何将蓝牙模块连接到PIC微控制器,现在借助此我们可以尝试无线项目。有许多使用蓝牙的项目,您可以尝试使用它们或提出自己的想法,并在评论部分中进行共享。另外,请使用蓝牙终端应用程序和HC-05检查我们以前的项目,例如使用Arduino的智能手机控制家庭自动化和使用Arduino的智能手机控制数字密码锁。
希望本教程对您有所帮助!如果您卡在某个地方,请使用注释部分。