文章目录

  • 一 、模块简介
  • 二、开发工具
  • 三、蓝牙模块初始化
  • 四、单片机串口程序
    • 串口初始化
    • 主函数
  • 五、手机端操作

一 、模块简介

嵌入式蓝牙串口通讯模块(简称蓝牙模块)具有两种工作模式:
命令响应工作模式和自动连接工作模式。

当模块处于命令响应工作模式(或者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.手机需要安装一个可以进行蓝牙通信的APP,一般直接在你手机的应用商店搜蓝牙串口就可以下载相关APP,如“串口调试助手”。

三、蓝牙模块初始化

这里以蓝牙模块HC-05为例,蓝牙模块可能每个人买到的不一样,但是用法都相近,可以作为参考,建议你在哪里买的模块就找对应的卖家找到对应的蓝牙模块中文数据手册,一般来说里面都有对应的AT指令集。这里要注意的是如果你发送对应的指令,在硬件连接都正确的情况下如果串口调试助手不能得到回应,那么很可能是你的AT指令集是错的,因为不同的蓝牙模块对应的蓝牙AT指令集是有差别的。

HC-05蓝牙模块引脚说明:

蓝牙模块自带一个状态指示灯

1.在上电时,将KEY脚悬空或接地,红灯1s一次快速闪烁,表示进入可配对模式。

2.在上电之前,按住黑色小设置按钮不放,同时KEY接高电平,上电,灯2s一次慢速闪烁,表示进入AT模式,进入AT模式可以对蓝牙模块进行设置。

3.配对成功模式,快速闪烁。

这三点很重要,蓝牙模块只有进入了AT模式才能发送AT指令集,很多小白以为只要接上USB转TTL模块插到电脑,打开串口调试助手就可以发送指令。这是不可以的。切记!!!

四、单片机串口程序

这里以51单片机为例,蓝牙串口的程序最重要的就是配置串口定时器,这里将定时器相关的代码贴出来,大家最好按照这种方法配置,经过多次建议程序稳定。

串口初始化

void Usartinit()//初始化
{TMOD=0x21;  //设置定时器1的工作方式2   0010 0000  GATE C/T 8位初值自动重装8位定时器PCON=0x80;  //波特率加倍     电源管理寄存器 TH1=0xf3;   //给定时器重装初值TL1=0xf3;   //这里的波特率必须加倍  不加倍的话 通讯不成功 本人目前还不知道原因//由于开发板使用的晶振频率是12M,非标准频率,在设置波特率时很容易产生误差,而导致串口通信出现乱码或者失败//目前来说,选择波特率4800,SMOD=1波特率加倍的方式,误差率仅为0.16%,为12M晶振中最小的误差TH0=0XEC;   //5ms定时    TL0=0X78;   TR0=1;  ET0=1; TR1=1;      //开定时器1SM0=0;      //选择串口工作方式1,常用SM1=1;   REN=1;     //开串口接收   此时接收器所选择的波特率16倍速率采样RXD移交的电平 开始接收信息ES=1;      //串行中断总开关EA=1;      //开总中断
}

相关配置程序注释已相当明白。

主函数

uchar flag,i,receive;
uchar code table1[]="GO";
uchar code table2[]="Stop";
void main()
{Usartinit(); //调用初始化函数进行初始化 while(1){if(flag==1)     //不断的检测标志位是否被置1  被置1说明已经执行了中断服务程序,即已经接数据,否则一直检测flag的状态{  switch(receive){ case 1:       ES=0;  //接下来要发送数据 先要使ES=0关闭串口中断 等数据发送完后再打开串口中断for(i=0;i<2;i++){SBUF=table1[i];while(!TI);   //等待是否发送完成    因为发送完成后TUI会有硬件置1TI=0;           //清除发送完成标志位  手动清0}       ES=1;                flag=0;         break;case 2:   ES=0;for(i=0;i<4;i++){SBUF=table2[i];while(!TI);TI=0;   }       ES=1;flag=0;     break;                  }         }}
}
void Usart() interrupt 4 //一旦有数据接入,串行口中断触发
{receive=SBUF-48;     //当REN为1时  开始接收数据 将接收到的值赋予receive   这里的是ACSII 所以要减去48RI=0;                //当RI=0   将接收数据存入SBUF寄存器中  清除接收中断标志位  有内部硬件置1,项CPU发出中断请求 在中断服务程序中,必须用软件将其清零, 取消此中断申请 flag=1;              //将标志位置1  这个是方便在主程序中查询判断是否已经接收到数据
}

以上是单片机的程序,由于51单片机只有一对RXD和TXD引脚,故先将程序下载到单片机后再将蓝牙模块的四个引脚接到单片机的RXD和TXD引脚,以后每次下载程序是都要这样操作,但不要嫌麻烦。

五、手机端操作

在安卓手机的应用商店搜索“蓝牙调试助手”,我的应用商店下载的是“蓝牙调试器”

在没有连接成功蓝牙时,蓝牙上面的红灯一直在闪烁,当连接成功后,红灯停止闪烁,每发送一条指令,电脑的串口调试助手就会收到手机端发送的消息。

现在,你会用蓝牙模块了吗?

项目分享|小师弟手把手教你用蓝牙模块相关推荐

  1. 零基础学习嵌入式入门以及项目实战开发【手把手教+国内独家+原创】

    零基础学习嵌入式入门以及项目实战开发[手把手教+国内独家+原创] 独家拥有,绝对经典                            创 科 之 龙 嵌入式开发经典系列教程 [第一期] 主讲人: ...

  2. 微信小程序手把手教你实现类似Android中ViewPager控件效果

    微信小程序手把手教你实现类似Android中ViewPager控件效果 前言 需求分析 头部TAB 滑动的内容部分 最终版本 尾巴 前言 在做Android开发的时候,ViewPager是开发者使用频 ...

  3. 微信小程序手把手教你实现带字母索引的城市选择列表

    微信小程序手把手教你实现带字母索引的城市选择列表 前言 需求分析 左边可滑动列表 滑动列表UI实现 item点击事件 右边带字母的索引条 索引条从上到下分别是定位和26个大写字母 索引条响应触摸和点击 ...

  4. 验收房子时的N个小窍门 手把手教你买房子

    http://news.hz.soufun.com/2010-07-22/3583104_all.html 验收房子时的N个小窍门 手把手教你买房子 买了房子领了钥匙就要验收房子的,而验收商品房质量的 ...

  5. 手把手教你Nginx常用模块详解之ngx_http_rewrite_module(十)

    本专栏非常感谢大家得关注和支持,本人开源项目站点https://erosbt.com 将自己热爱与信仰的技术,持续不辍地传递. Nginx专栏 手把手教你Nginx常用模块详解之ngx_http_ac ...

  6. 手把手教你Nginx常用模块详解之ngx_http_status_module(十一)

    本专栏非常感谢大家得关注和支持,本人开源项目站点https://erosbt.com 将自己热爱与信仰的技术,持续不辍地传递. Nginx专栏 手把手教你Nginx常用模块详解之ngx_http_ac ...

  7. 超详细深度学习debug指南,国外小哥手把手教你如何调试模型 | 附PPT

    晓查 发自 凹非寺 量子位 出品 | 公众号 QbitAI 已经学会深度学习,但你搭建的模型为什么还跑不动,到底哪里出了问题? 看懂了教材,一到编程调试就跪,为了寻找bug的你是否曾经手足无措? 虽然 ...

  8. 手把手教你做蓝牙小车(一)

    第1节 选择Arduino开发板 1.1 Arduino是什么 对Arduino,官方有一堆解释. 作为一个软件程序猿,在我眼里,Arduino是学习"可怕硬件"的一个便捷通道.它 ...

  9. 蓝牙控制小车c语言程序,手把手教你做蓝牙小车(一)

    第1节 选择Arduino开发板 1.1 Arduino是什么 对Arduino,官方有一堆解释. 作为一个软件程序猿,在我眼里,Arduino是学习"可怕硬件"的一个便捷通道.它 ...

最新文章

  1. 自己动手写cpu pdf_自己动手写 Promise
  2. Android动态加载jar/dex
  3. 2017软件工程第一次作业
  4. TXSQL企业级特性揭秘:加密与审计
  5. I帧、P帧和B帧的特点
  6. request 和require区别_JAVA WEB开发中涉及到的get和post请求,他们的区别
  7. Romoting 通信DEMO(整理)
  8. (转载)tomcat5下jsp出现getOutputStream() has already been called for this
  9. java 集合 总结 表_java 列表与集合总结
  10. 实用js小汇总--获取服务器控件ID
  11. 关于Runtime.getRuntime().exec()运行python代码失败的问题
  12. 大数据面试都问些什么?
  13. 0017-Spark的HistoryServer不能查看到所有历史作业分析
  14. 《MATLAB图像处理375例》——1.3 MATLAB概述
  15. 基于SSM的毕业生就业管理系统设计与实现 Java mysql
  16. [OfficeExcel] OfficeExcel2010 第18讲 Lookup--浅谈数组
  17. 赵小楼《天道》《遥远的救世主》深度解析(109)天下乌鸦一般黑,不要幻想
  18. phpmywind 数据记录查询
  19. 苹果app旧版本软件下载
  20. 依存句法分析与语义依存分析的区别

热门文章

  1. 常见的http状态消息
  2. Bootstrap3的栅格化布局样式
  3. Spring的作用域与生命周期
  4. PPC关闭和切换程序小软件收集
  5. 画质、分辨率、帧率之间有什么关系与区别?
  6. 美团后台开发面试经验
  7. 边缘计算:一文理解云边端协同架构中的高性能云计算、边缘计算、云边协同
  8. AV1的五种编码进展
  9. 杂谈 之 闲来无事 (一)
  10. ios开发者平台生成App 专用密码