很久很久以前,丹麦有一个国王Harald Blatand,将纷争不断的各丹麦部落统一成为一个完整的国家。国王有个绰号叫“blátǫnn”,翻译成英文就是bluetooth。在北欧古文字中,国王名字的首字母“H”“B”写法与现在不同:

微信图片_20170719133622.jpg

没错,这就是蓝牙符号以及名称的由来

 

曾经的通信巨头索尼爱立信在1994年创制蓝牙通讯技术时,就借了这个彩头。

时光荏苒,索爱已走下神坛,而“蓝牙”却再次完成了“统一”,成为通讯协议的全球标准。

 

昔日的近场控制霸主红外遥控,技术成熟、成本低廉、应用广泛,但红外传输却有两个无法超越的弱点:

        1.极强的指向性与极短的通讯距离;

        2.单向通讯(除非同时配备发射及接收模块)


红外通讯双方要么只能发出指令,要么只能接收指令。蓝牙传输则不同,在信号覆盖范围内,无需指向,信号甚至能穿墙;通讯设备主从状态随时切换,信息可收可发。

微信图片_20170719133627.jpg

注:对比中忽略红外点对点文件传输情形


这种自由与便利,让蓝牙应用迅速覆盖了我们日常生活需求:蓝牙耳机、蓝牙鼠标、智能手环甚至电视或智能盒子的遥控器。蓝牙几乎以电子设备标配的形式融入了我们的日常生活。

 

乐高也不例外,WeDo和EV3套件都支持蓝牙,WeDo套件甚至只能通过蓝牙连接编程控制。Arduino的板子虽默认不带蓝牙功能(Arduino BT除外),但都可方便的进行蓝牙扩展。


一起来看下我们今天的主角:


HC-05    主从一体蓝牙模块


微信图片_20170719133632.jpg

HC-05 ZS-040 蓝牙模块


这款模块由分线板(breakout board)和蓝牙插件板(daughter board)两片电路板拼成。分线板由于自带分压模块,可适应3.6V~6V电压输入,但蓝牙插线板通讯接口电压被限定在3.3V,过高的电压输入有可能烧坏插件板(别问我是怎么知道的)。



1.0 接口及连线图


RX为蓝牙插件板信号输入接口,TX为信号输出接口,两者的工作电压均为3.3V。基于Arduino对高低电平的定义,高于3V即可被识别为高电平,TX接口0V/3.3V的状态切换可以被识别为高低电平切换,所以TX接口可直接与arduino相连。但RX作为插件板输入端,必须要遵循3.3V的输入限制,在使用时需要对arduino输出的电平信号做降压,降压原理就是物理中学到的分压定律:

微信图片_20170719133637.jpg

连线原理图及面包板连线图


 RX与GND之间分得2V/(1V+2V)*5V≈3.33V电压,满足插件版的电压需求。

微信图片_20170719133642.jpg



2.0 蓝牙设置


设备连线完成,并不意味着蓝牙模块可以直接使用,此时蓝牙设备的各项参数如通信端口、连接密码、主从状态等都处在出厂状态,我们需要结合需求进行配置。各配置参数断电仍可保存,所以只需设置一次即可。


板子通电后默认直接进入工作状态,想进入设置模式,则需要先按住蓝牙板上的SWITCH按钮,再通电,板子上的蓝色指示灯变为2S为周期的慢闪则表示进入设置模式。

微信图片_20170719133647.gif

配置模式

 

配置过程要依次更改通信端口、设备名称、连接PIN码、主从状态、校检等参数,满足后续程序需求。配置过程可利用arduino的串口转发来实现,arduino将我们输入到串口监视器内的命令转发给MC-05,完成设置。


设置采用AT+COMMAND的方式,常用设置命令如下:

微信图片_20170719133652.jpg


如果设置成功,会返回OK的提示:


QQ截图20170719133725.png


设置完成后重新通电,板子即按照新配置开始工作,并且可被手机等设备搜索及匹配:

微信图片_20170719133730.jpg


3.0 建立与手机的通讯


想要实现蓝牙控制,首先要能与设备对话。这里我们需要一款手机软件:Bluetooth Terminal。下载安装后,打开软件查看周围的蓝牙设备,选择“LEGOINO”后,即可完成连接。

微信图片_20170719133735.jpg

于是我们拿起手机,与近在咫尺的arduino对话:

微信图片_20170719133740.gif


 

当然这些交互都是我们设定好:


QQ截图20170719133801.png


整个过程中由arduino实现信息转发及判定:将串口监视器内的信息转发给蓝牙模块或将蓝牙模块收到的信息显示在串口监视器中;若收到程序预设的指令,执行对应操作。


微信图片_20170719133805.jpg

指令传播流程图

 



4.0 控制


通信链路打通了,与控制就一步之遥了,只需修改类似于“hi”这样的关键词以及对应的程序执行代码即可:


微信图片_20170719133810.jpg

代码截图


 测试一下:

 微信图片_20170719133815.gif


继电器控制太简单了,我们换一个颜色识别模块:


微信图片_20170719133820.jpg

色彩识别模块,返回颜色的RGB值


识别过程:

微信图片_20170719133826.jpg


我们看一下识别出来的颜色:


微信图片_20170719133831.jpg

 


5. 出其不意的送礼物



能远程控制开关、返回识别颜色,就能进行更复杂的功能。

圣诞快来了,如果你想给他/她送祝福,还想出彩,那可以试下乐高~

于是又双叒叕顺手做了一个乐高装置:

微信图片_20170719133835.jpg

微信图片_20170719133840.jpg

乐高云梯

 

这个设备可以方便的隐藏在盒子里或者显示器后方:

微信图片_20170719133846.gif



快去给她/他一个小惊喜(吓)吧~


提前祝大家圣诞快乐~

 

微信图片_20170719133851.gif