HC-05与HC-06蓝牙串行端口通讯模块

HC-05和HC-06的硬件相同,都采用英国剑桥的CSR (Cambridge Silicon Radio) 公司的BC417143芯片,支持蓝牙2.1+EDR规范,只是芯片内部的韧体不同。CSR是全球市占率最高的蓝牙通讯芯片厂,2014年10月中旬,全球手机芯片龙头高通(Qualcomm)同意以25亿美元现金,购并CSR,以强化该公司在物联网(Internet of Things)的布局。韩国三星也于2012年花费3.1亿美元,取得CSR公司的蓝牙、WiFi和GPS定位等技术专利。 

HC-05模块的外观与主要接脚如下:

附带底板的HC-05和HC-06蓝牙串行端口通讯模块 

基本的蓝牙序列通讯模块没有引出接脚,而是在印刷电路板的四周留下邮票般的齿孔,方便焊接。 

若不想动手焊接,可以选购附带底板的模块。这个底板附带直流电压转换IC,方便连接3.6V~6V的电源。 

附带底板的HC-05蓝牙模块外观与接脚如下:

「命令响应模式」接脚(通常标示成“KEY”或“EN”),用于启动AT命令模式,调整蓝牙模块的设定(例如,调整串行端口的传输速率、修改模块的名称、修改配对密码…等等)。

市面上的藍牙裝置通常都屬於“slave(從端)”設備,像藍牙滑鼠∕鍵盤、藍牙GPS、藍牙遙控玩具…等等。

一般的Arduino蓝牙遥控和通讯实验,也都是用「从端」模式,所以HC-06模块足以应付大多数需求。但如果HC-05和HC-06模块的价格差不多,那就买HC-05。 

HC-05和HC-06的主要差异在于主、从模式的设定,以及设置模块参数的AT命令的支持程度。HC-05通常支持30多道AT命令,HC-06只支持少数AT命令,但实务上会用到的AT命令通常也只有两、三个(请参阅下一篇贴文说明)。 

若要采购HC-05,请选择有引出「命令响应模式」接脚的模块,方便执行AT命令。 

不同蓝牙模块的引脚和韧体可能不太一样,购买时,务必跟厂商索取data sheet(规格说明书,含AT命令手册,有些会附带底板的电路图)。 

Bluetooth 4.0具备藍牙低功耗(Bluetooth Low Energy, BLE)模式,耗电量低,但计算机、手机和平板等装置的支持、普及程度,不及2.1版。如果你确认你的计算机和手机都支持蓝牙4.0,那就可以选购蓝牙4.0的序列通讯模块。 

不管是HC-05, HC-06还是蓝牙4.0,对Arduino都没有影响,控制程序都一样,实际接线也只用到4条线:电源、接地、传送(TxD)和接收(RxD)。电路接线说明,请参阅下一篇贴文。

延续上一篇贴文,本文将补充蓝牙模块的AT命令模式与设定方法。

蓝牙模块的两种操作模式

自动联机(automatic connection),又称为透通模式( transparent communication)。

命令响应(order-response),又称为AT模式(AT mode)。

平时使用的「自动联机」模式只是把RxD脚传入的数据,转成蓝牙无线讯号传递出去;或者将接收到的无线数据,从TxD脚传给Arduino,模块本身不会解读数据,也不接受控制。

操控蓝牙模块的指令统称AT命令(AT-command)。AT命令并非透过蓝牙无线传输,而是模块的TxD和RxD接脚。蓝牙模块只有在AT模式,才能接收AT命令。

HC-05与HC-06蓝牙模块进入AT模式的方法

HC-06模块在与其他装置联机之前,都处于AT模式状态;换句话说,只要一通电,HC-06模块就进入AT模式。HC-06的AT命令,采用9600bps的速率传送。

通電後,在尚未與裝置連線之前,HC-06板子上的LED將不停地閃爍;一旦與其他藍牙裝置联机(如:手机或计算机),LED将维持点亮状态。

让HC-05模块进入AT模式,需要在通电之前,先把KEY脚位(蓝牙模块本身的34脚)接在高电位(通常指3.3V,但是接5V也行)。如此,一通电,它就进入AT模式。

在尚未与装置联机之前,HC-05板子上的LED将快速闪烁;若进入AT模式,LED将慢速闪烁(两秒闪烁一次)。HC-05的AT命令,采用38400bps的速率传送。

笔者购买的HC-05板子上面有一个按键,根据厂商提供的电路,这个按键接在蓝牙模块的34脚:

透过Arduino的串行端口设定蓝牙模块的AT命令

除了使用现成的USB转TTL序列模块来设定AT命令(请参阅「执行AT命令(AT-command)修改蓝牙模块的数据传输速率」),也能使用Arduino板来操作。

本节将撰写一个简易程序,把我们在计算机上敲入的AT命令,转发给接在Arduino上的蓝牙模块。

#include <SoftwareSerial.h>   // 引用链接库

// 定义连接蓝牙模块的串行端口

SoftwareSerial BT(8, 9); // 接收脚, 传送脚

char val;  // 储存接收数据的变量

void setup() {

  Serial.begin(9600);   // 与计算机串行端口联机

  Serial.println("BT is ready!");

  // 设定蓝牙模块的联机速率

  // 如果是HC-05,请改成38400

  BT.begin(9600);

}

void loop() {

  // 若收到「串行端口监控窗口」的数据,则送到蓝牙模块

  if (Serial.available()) {

    val = Serial.read();

    BT.print(val);

  }

  // 若收到蓝牙模块的数据,则送到「串行端口监控窗口」

  if (BT.available()) {

    val = BT.read();

    Serial.print(val);

  }

}

在HC-05與HC-06藍牙模組上執行AT命令

程式上傳完畢後,開啟Arduino的「序列埠監控視窗」,HC-06模組的AT指令不需要加上行結尾字元,下圖是執行“AT+VERSION”命令,查看韌體版本的結果: