基于蓝牙的手机与单片机通信讲解,附代码
应粉丝要求,今天就把基于蓝牙的手机与单片机通信的代码送给大家,喜欢就关注我吧,让我们一块讨论技术问题!
在进行单片机开发以及参加比赛时,由于蓝牙模块控制方便,手机附带蓝牙功能(作为主机),信号稳定,低功耗等天然条件,这也决定了蓝牙模块必火。
今天我们使用的蓝牙模块为HC06一共有四个引脚分别为VCC,GND,RXD,TXD 对应连接到单片机上的VCC,GND,TXD,RXD 一定要注意RXD与TXD在连接中是交叉相连的,否则不能正常使用。
HC06正面图
51单片机引脚图
连接好之后就是写程序了(文章后面会出程序),写好之后生成HEX文件烧录到板子中,这时我们从机部分就完成了,主机也就是手机需要下载一个蓝牙串口通信助手,没有的伙伴可以去网上下载一个,百度上都能找的到,下载好之后打开蓝牙串口通信助手然后与蓝牙模块HC06连接,第一次连接的时候可能会输入密码,一般默认为1234,连接成功之后,一般有实时发送模式和键盘发送模式,具体使用方法大家可以下载下来试用一下。
蓝牙串口调试助手
键盘模式
实时发送模式
程序
#include<reg52.h>
sbit LED=P1^1;
unsigned char rx;
int flag;
void init(void)
{
TMOD|=0x20;
SCON=0x50;
PCON&=0x7f;
TH1=TL1=0xfd;
TR1=1;
ES=1;
EA=1;
}
void serial(void)interrupt 4 using 1
{
RI=0;
rx=SBUF;
switch(rx)
{
case 'a':flag=0;
break;
case'b':flag=1;
break;
default:
break;
}
}
main()
{
init();
while(1)
{
if(flag==0)
LED=0;
if(flag==1)
LED=1;
}
}
在上述程序中a和b即为单片机所接受到的数据,如果接收到信号a那么就打开LED灯,接收到信号b就关闭LED,你也可以多加点比如c,d等等这是完全可以的,那么手机呢就需要发送a或b在实时模式直接输入发送即可,在键盘模式需要设置一下,设置的时候需要点手机菜单键,然后在出现界面设置即可,这里没有图片就不给大家展示了,主机从机都设置完以后就可以正常使用了,接下来的工作就是任由你开发了,祝你取得好的成绩。
PS:上述程序只适用于51系列单片机,晶振为11.0592MHZ。
项目分享|小师弟手把手教你用蓝牙模块
一 、模块简介
嵌入式蓝牙串口通讯模块(简称蓝牙模块)具有两种工作模式:
命令响应工作模式和自动连接工作模式。
当模块处于命令响应工作模式(或者AT模式)时能才能执行 AT 命令,用户可向模块发送各种 AT指令,为模块设定控制参数或发布控制命令。(AT指令就是我们PC与一些终端设备(例如蓝牙,WiFi模块)之间进行通信的,配置这些终端设备参数的一套指令。)
在自动连接工作模式下模块又可分为主(Master)、从(Slave)和回环(Loopback)三种工作角色。当模块处于自动连接工作模式时,将自动根据事先设定的方式连接的数据传输。主模式:该模块可以主动搜索并连接其它蓝牙模块并接收发送数据。从模式:只能被搜索被其它蓝牙模块连接进行接收发送数据。回环:蓝牙模块就是将接收的数据原样返回给远程的主设备。
二、开发工具
1.USB转TTL模块(可用CH340),蓝牙模块(HC-05),PC端串口助助手。
2.蓝牙模块与USB转TTL模块的接线情况就是VCC-VCC,GND-GND,RXD-TXD,TXD-RXD,有的蓝牙模块只有四个引脚,而且我们见到的大多数蓝牙模块都是四个或者只需要用到四个引脚。
3年嵌入式物联网学习资源整理分享:C语言、Linux开发、数据结构;软件开发,STM32单片机、ARM硬件开发、物联网通信开发、综合项目开发教程资料;笔试面试真题。点击下方插件免费领取↓↓↓嵌入式物联网学习资料(头条)
3.手机需要安装一个可以进行蓝牙通信的APP ,一般直接在你手机的应用商店搜蓝牙串口就可以下载相关APP,如“串口调试助手”。
三、蓝牙模块初始化
这里以蓝牙模块HC-05为例,蓝牙模块可能每个人买到的不一样,但是用法都相近,可以作为参考,建议你在哪里买的模块就找对应的卖家找到对应的蓝牙模块中文数据手册,一般来说里面都有对应的AT指令集。这里要注意的是如果你发送对应的指令,在硬件连接都正确的情况下如果串口调试助手不能得到回应,那么很可能是你的AT指令集是错的,因为不同的蓝牙模块对应的蓝牙AT指令集是有差别的。
HC-05蓝牙模块引脚说明:
蓝牙模块自带一个状态指示灯1.在上电时,将KEY脚悬空或接地,红灯1s一次快速闪烁,表示进入可配对模式。2.在上电之前,按住黑色小设置按钮不放,同时KEY接高电平,上电,灯2s一次慢速闪烁,表示进入AT模式,进入AT模式可以对蓝牙模块进行设置。3.配对成功模式,快速闪烁。
这三点很重要,蓝牙模块只有进入了AT模式才能发送AT指令集,很多小白以为只要接上USB转TTL模块插到电脑,打开串口调试助手就可以发送指令。这是不可以的。切记!!!
四、单片机串口程序
这里以51单片机为例,蓝牙串口的程序最重要的就是配置串口定时器,这里将定时器相关的代码贴出来,大家最好按照这种方法配置,经过多次建议程序稳定。
串口初始化 1void Usartinit ()//初始化 2{ 3 TMOD=0x21; //设置定时器1的工作方式2 0010 0000 GATE C/T 8位初值自动重装8位定时器 4 PCON=0x80; //波特率加倍 电源管理寄存器 5 TH1=0xf3; //给定时器重装初值 6 TL1=0xf3; //这里的波特率必须加倍 不加倍的话 通讯不成功 本人目前还不知道原因 7 //由于开发板使用的晶振频率是12M,非标准频率,在设置波特率时很容易产生误差,而导致串口通信出现乱码或者失败 8 //目前来说,选择波特率4800,SMOD=1波特率加倍的方式,误差率仅为0.16%,为12M晶振中最小的误差 9 TH0=0XEC; //5ms定时 10 TL0=0X78; 11 TR0=1; 12 ET0=1; 13 TR1=1; //开定时器114 SM0=0; //选择串口工作方式1,常用15 SM1=1; 16 REN=1; //开串口接收 此时接收器所选择的波特率16倍速率采样RXD移交的电平 开始接收信息17 ES=1; //串行中断总开关18 EA=1; //开总中断19}
相关配置程序注释已相当明白。
主函数 1uchar flag,i,receive; 2uchar code table1[]="GO"; 3uchar code table2[]="Stop"; 4void main () 5{ 6 Usartinit(); //调用初始化函数进行初始化 7 while (1) 8 { 9 if (flag==1) //不断的检测标志位是否被置1 被置1说明已经执行了中断服务程序,即已经接数据,否则一直检测flag的状态10 { 11 switch (receive)12 { 13 case 1: 14 ES=0; //接下来要发送数据 先要使ES=0关闭串口中断 等数据发送完后再打开串口中断15 for (i=0;i<2;i++)16 {17 SBUF=table1[i];18 while (!TI); //等待是否发送完成 因为发送完成后TUI会有硬件置119 TI=0; //清除发送完成标志位 手动清020 } 21 ES=1; 22 flag=0; 23 break ;24 case 2: 25 ES=0;26 for (i=0;i<4;i++)27 {28 SBUF=table2[i];29 while (!TI);30 TI=0; 31 } 32 ES=1;33 flag=0; 34 break ; 35 } 36 }37 } 38}39void Usart () interrupt 4 //一旦有数据接入,串行口中断触发40{41 receive=SBUF-48; //当REN为1时 开始接收数据 将接收到的值赋予receive 这里的是ACSII 所以要减去4842 RI=0; //当RI=0 将接收数据存入SBUF寄存器中 清除接收中断标志位 有内部硬件置1,项CPU发出中断请求 在中断服务程序中,必须用软件将其清零, 取消此中断申请 43 flag=1; //将标志位置1 这个是方便在主程序中查询判断是否已经接收到数据44}
以上是单片机的程序,由于51单片机只有一对RXD和TXD引脚,故先将程序下载到单片机后再将蓝牙模块的四个引脚接到单片机的RXD和TXD引脚,以后每次下载程序是都要这样操作,但不要嫌麻烦。
五、手机端操作
在安卓手机的应用商店搜索“蓝牙调试助手”,我的应用商店下载的是“蓝牙调试器”
在没有连接成功蓝牙时,蓝牙上面的红灯一直在闪烁,当连接成功后,红灯停止闪烁,每发送一条指令,电脑的串口调试助手就会收到手机端发送的消息。
原文标题:项目分享|小师弟手把手教你用蓝牙模块
原文链接:https://mp.weixin.qq.com/s/ggA2x_prpV9EWO_uIyNUHA
原文作者:果果小师弟
相关问答
你好想问一下LC-05 蓝牙模块 如何与 单片机 相连?单片机+蓝牙模块的组合比较容易上手。单片机入门可考虑玩Arduino,注重功能实现,有较丰富的社区资源支持。蓝牙模块有多种,有支持2.0的,4.0的,有从机模块的hc...
蓝牙模块 AT指令修改如何用 单片机 实现 - 懂得使用AT指令的时候,先使蓝牙模块进入AT模式,然后你就当蓝牙就是命令的接收端,单片机或者PC串口就是命令的发送端(就当蓝牙是独立的模块)。串口发送的...
手机 蓝牙 与 单片机 的通信如何实现?本篇回答,前半部分简单介绍一下,后半部分很详细!欢迎大家关注:电气电子视界手机蓝牙与单片机的通信实现方式如下。使用蓝牙转串口模块连接51单片机的RX和TX...
你好,怎么用 单片机 通过 蓝牙模块 向手机发数据?直接买个蓝牙透传模块,即蓝牙转串口模块,也就二三十块钱,直接连接单片串口,单片机程序里你就操作该串口就行了,手机搜索该蓝牙模块,配对连接后,单片机向串...
如何从51 单片机 向 蓝牙模块 发送AT指令?蓝牙有RXD与TXD引脚,用串口通信,代码可以参考网上的一些资料使用AT指令的时候,先使蓝牙模块进入AT模式,然后你就当蓝牙就是命令的接收端,单片机或者PC串口...
8位 单片机 如何实现 蓝牙 协议栈处理? - 巫塔小妖 的回答 - 懂得可以使用带UART的蓝牙模块
求一个手机通过蓝牙连接HC-06 蓝牙模块 控制 单片机 上的继电器开关的程序,可以烧录到 单片机 的?这是单片机用串口多机通讯的仿真实例,可以参考一下,如果是手机要控制单片机,只要单片机用串口连接蓝牙模块串口,手机需要用蓝牙APP蓝牙单片机蓝牙、发送控制...
请问 单片机 用的 蓝牙模块 和无线模块的区别是什么?它们两个都是属于2.4GISM无线频段,传输距离也差不多,大概10m,HC-05嵌入式蓝牙串口通讯模块比nRF24L01无线模块多了蓝牙通讯协议硬件,如果你想传输大量数据或则...
51 单片机 远程控制方法?在51单片机远程控制方面,可以采用无线通信技术,如蓝牙、Wi-Fi或者RF模块,将单片机与远程设备连接起来。通过编写相应的程序,可以实现远程控制单片机的功能,...
如何用手机通过esp8266实现对51 单片机 的控制,求源代码?使用ESP8266做过项目,这类问题,不管是WIFI还是蓝牙,或者其他的数据传输手段,简单的说都需要一个通信协议,这个协议可以很简单,比如0xAA,具体可以分为下面...