HC-05初探

catalogue

1. 蓝牙嗅探抓包
2. HC05蓝牙模块AT模式设置
3. USB转串口芯片CH340
4. 蓝牙小车

 

1. 蓝牙嗅探抓包

针对蓝牙通信包的嗅探抓包不能直接使用wincap+wireshark抓包,因为我们知道wincap是针对有线网络或者wlan的,本质上是镜像了一份从网卡出去和进入的数据包,但是蓝牙协议并不通过网卡进行数据包收发的,而是通过另一个外设(蓝牙收发器)进行数据收发,所以,我们需要针对这个蓝牙外设安装特定的驱动,才能镜像出对应的数据包

Relevant Link:

http://drops.wooyun.org/tips/9651
http://www.security-sleuth.com/sleuth-blog/2015/9/6/now-i-wanna-sniff-some-bluetooth-sniffing-and-cracking-bluetooth-with-the-ubertoothone
http://www.2cto.com/Article/201602/489449.html
http://www.shaoqun.com/a/164196.aspx

 

2. HC05蓝牙模块的使用

蓝牙HC05是主从一体的蓝牙串口模块,简单的说,当蓝牙设备与蓝牙设备配对连接成功后,我们可以忽视蓝牙内部的通信协议,直接将将蓝牙当做串口用。当建立连接,两设备共同使用一通道也就是同一个串口,一个设备发送数据到通道中,另外一个设备便可以接收通道中的数据。当然,对于建立这种通道连接是有一定条件,那就是对蓝牙设置好能进行配对连接的AT模式

0x0: SoftwareSerial Library

现有的Arduino硬件支持引脚0和1(通过USB连接到到电脑)进行串行通信。串行通过一个称为 UART 的硬件(芯片内置)进行。这个硬件允许ATMEGA芯片接收串行通信,即使芯片在进行其他工作,只要有64个字节的串行缓冲器的储存空间即可
使用软件的复制功能(因此称为"SoftwareSerial"),现有的SoftwareSerial 库,以允许其他的Arduino数字引脚的串行通信,这可能有多个软件串口速度高达115200bps。一个参数使反转信号要求该协议的设备
库具有以下已知的限制

如果使用多个串口软件,一次只有一个软件可以接收数据 
在 Mega 和 Mega 2560 上,不是所有的引脚都支持中断,允许用于RX的引脚包括:10, 11, 12, 13, 50, 51, 52, 53, 62, 63, 64, 65, 66, 67, 68, 69

0x1: 一般的蓝牙串口模块引脚

1. RXD: 接收端
2. TXD: 发送端
3. AT: 设置工作模式
    1) 工作模式: 自动连接(automatic connection),又称为透传模式() 又稱為透通模式(transparent communication)
    2) AT指令设置模式: 命令回应(order-response),又称为AT模式(AT mode) 
4. VCC: 模块供电正极(5V)
5. GND: 模块供电负极

0x2: 一般的蓝牙模块使用有三种

1. 蓝牙从设备与电脑配对连接
    1) 电脑自带蓝牙
    2) 电脑不带蓝牙,需要蓝牙适配器
2. 蓝牙从设备与手机配对连接
3. 蓝牙从设备与蓝牙主设备配对连接

0x3: HC05蓝牙模块的AT模式设置的方法

平时使用的"自动连接"模式只是把RxD脚传入的资料,转成蓝牙无线信号传输出去,或者将接收到的无线信号,从TxD叫传给arduino,模组本身不会解读资料,也不受控制
操控蓝牙模组的指令统称AT命令(AT Command),AT命令并非通过蓝牙无线传输,而是通过模组的TxD和RxD引脚和arduino的Rx和Tx连接通信,蓝牙模组只有在AT模式,才能接收AT命令

1. 默认设置
2. 用USB转UART模块设置
3. 用带有蓝牙设置的主控器串口程序进行设置

1. 主要默认设置

1. 模块工作角色: 从模式
2. 串口参数: 38400bits/s 停止位1位无校验位
3. 配对码: 1234
4. 设备名称: BC05
5. 连接模式: 任意蓝牙设备连接模式

在这种模式下蓝牙模块不需要任何USB、串口接线,直接通过蓝牙信道和其他蓝牙设备配对通信

2. 用USB to UART模块设置蓝牙(USB转TTL序列)

蓝牙模块上自带USB转接口,直接和上位机进行串并转换通信,其实arduino就是充当中间人的角色,arduino在中间进行了PC USB-串口-并口-串口-HC-05,本身是多此一举的,唯一的优势是可以在arduino编程中加入控制逻辑,详细的内容我们放在第三节深入研究

通过usb to ttl转换芯片转换后,我们直接以38400波特率向HC-05发送AT指令

3. 用Arduino配置蓝牙AT指令(蓝牙模块和arduino连接,arduino充当上位机)

在市场上hc-05模块有两种一种是有EN脚,另一种是KEY脚, 他们之间的差别在于进入AT模式的方法.
EN脚:

KEY脚:

让HC-05模组进入AT模式,需要在通电之前,先把KEY引脚(蓝牙模组本身的34脚)接在高电位(通常3.3v,但是接5v也行),如果,只要一通电蓝牙模组就进入AT模式

在尚未与其他蓝牙装置配对之前,HC-05板子上的LED将每秒闪烁1次。若进入AT模式,LED将每两秒闪烁一次,HC-05的AT命令,采用38400bps的速率传送
笔者购买的HC-05板子上面有一个按键,根据厂商提供的电路,这个按键接在蓝牙模组的34脚,所以先按着板子上的key开关,再通电,即可让此蓝牙模组进入AT模式(通电之后即可放开开关)。如果按着KEY不要放,上电,可以使用软件"获取模块信息",读出所有信息

我们实验使用hc-05 EN 脚的hc-05,给arduino下载程序,程序的代码逻辑为设置该蓝牙模块为从模式,并设置发现服务名,在实验之前,先理清楚几个概念

1. 我们需要使用两组串口传输
    1) Serial(9600bps): PC和arduino的USB模拟串口传输,用于传输输入的AT指令以及蓝牙模组的回显
    2) SoftwareSerial(HC-05: 38400bps): arduino和蓝牙模组的串口传输,arduino作为中间人将PC发送的AT指令转换为串行序列发送到蓝牙模组
2. HC-05蓝牙模组规定性要求蓝牙模组的波特率为38400,所以SoftwareSerial模拟串口通信必须为38400,而PC和arduino的串口通信波特率只要两边协商一致即可,并没有硬性规定

#include <SoftwareSerial.h>
/*
 * RX是数字引脚8(连接到蓝牙模组的TX)
 * TX是数字引脚9(连接到蓝牙模组的RX)
 */
SoftwareSerial BTSerial(8, 9); // RX | TX
#define AT 2
#define LED 7
 
void setup()
{  
    //设置AT为高电平,使蓝牙模块进入AT模式
    pinMode(AT,OUTPUT);
    pinMode(LED,OUTPUT);
  //这一步等效于按住蓝牙模组地板上的key按键不放,但是我们使用的USB无法产生对应频率的置位电平,所以建议实验的时候使用手按住key按键不放然后再加电,使加电的一瞬间key引脚处于高电平位 digitalWrite(AT,HIGH); digitalWrite(LED,HIGH);
//设置和PC的串口通信波特率,两边协商一致即可 Serial.begin(9600); while (!Serial) { ; // 等待串口连接。Needed for Leonardo only } Serial.println("Enter AT commands:"); // HC-05 default speed in AT command more BTSerial.begin(38400); while (!BTSerial) { ; // 等待串口连接。Needed for Leonardo only } delay(1000); digitalWrite(LED,LOW); } void loop() {
  // Keep reading from Arduino Serial Monitor and send to HC-05
  if (Serial.available()){
    //digitalWrite(LED,HIGH);
    BTSerial.write(Serial.read());
  }
// Keep reading from HC-05 and send to Arduino Serial Monitor if (BTSerial.available()){ digitalWrite(LED,HIGH); Serial.write(BTSerial.read()); } digitalWrite(LED,LOW); /* Serial.println("AT"); delay(100); Serial.println("AT+NAME=OPENJUMPER-Bluetooth");//命名模块名 delay(100); Serial.println("AT+ROLE=0");//设置主从模式:0从机,1主机 delay(100); Serial.println("AT+PSWD=1234");//设置配对密码,如1234 delay(100); Serial.println("AT+UART=9600,0,0");//设置波特率9600,停止位1,校验位无 delay(100); Serial.println("AT+RMAAD");//清空配对列表 */ }

以上是代码部分,实验的时候要注意,HC-05需要通过地板上的key使能按键接通电路,并且同时置高电位才能进入AT模式,操作过程如下

1. arduino和pc连接完毕后,用HC-05的rx、tx和arduino对用的tx、rx对接,gnd接好
2. 在不接通5v电源之前,先按下蓝牙模组的key按钮,接通电路
3. 然后再接通5v电源,这个时候,key使能会被置为高电位,随即蓝牙模组进入AT模式

电路连接如下

STATE: led灯(闲置)
RXD: Recibir Datos:接收端(arduino TX pin9)
TXD: Transmitir Dato: 发送端(arduino RX  pin8)
GND: GND
VCC: 5v
EN: enable/disable模块(pin2) 

灯状态

不停闪烁: 正常模式
每隔2秒闪烁: AT模式
不闪烁: 已经连接

按下Arduino的复位按键,让程序开始运行一次,当发现板载L灯500ms闪烁时则表明已设置成功

设置完成后,按下arduino复位键,重新启动蓝牙模组,即可被其他设备识别到重命名后的蓝牙

0x4: HC05的规格

 
若要采购HC-05,尽量选择有引出"命令回应模式"接脚的模组,方便执行AT命令
不同蓝牙模组的引脚和固件可能不太一样,购买时,务必跟厂商索取data sheet(规格说明书、AT命令手册、底板的电路图)
0x5: HC-05电路图

Relevant Link:

http://www.tmirun.com/arduino-hc-05-%E6%A8%A1%E5%9D%97%E6%95%99%E7%A8%8B1%E8%BF%9B%E5%85%A5at%E6%A8%A1%E5%BC%8F/
http://www.tmirun.com/arduino-hc-05-%E6%A8%A1%E5%9D%97%E6%95%99%E7%A8%8B2%E8%BF%9E%E6%8E%A5/
http://www.arduino.cn/thread-1183-1-1.html
http://www.arduino.cn/thread-2961-1-1.html
http://wiki.geek-workshop.com/doku.php?id=arduino:libraries:softwareserial
http://swf.com.tw/?p=712 
https://detail.tmall.com/item.htm?id=524860055508
https://www.youtube.com/watch?v=fkS1elBSzgs
http://www.instructables.com/id/Modify-The-HC-05-Bluetooth-Module-Defaults-Using-A/
http://www.instructables.com/id/Modify-The-HC-05-Bluetooth-Module-Defaults-Using-A/step2/The-Arduino-Code-for-HC-05-Command-Mode/
http://cdn.instructables.com/FM8/W4A2/HKZAVRT9/FM8W4A2HKZAVRT9.MEDIUM.jpg
http://www.instructables.com/id/Cheap-2-Way-Bluetooth-Connection-Between-Arduino-a/
http://www.instructables.com/id/Andruino-A-Simple-2-Way-Bluetooth-based-Android-C/
http://swf.com.tw/?p=693&cpage=1#comment-954236
http://swf.com.tw/?p=705
http://swf.com.tw/?p=335
http://wenku.baidu.com/link?url=EyLMw27b2M6vQzfWgjRG_5Cp4nOC15gKluxB4SdGIBEuuvFlG_B19WVqMikDHa03ftTpy-haMi_vu2YwCjVRM_LGWpPfnVVwgygIc5ZI7tK
http://www.icourses.cn/jpk/changeforVideo.action?resId=401015&courseId=4265&firstShowFlag=32

 

3. USB转串口芯片CH340

0x1: 概述

H340是一个USB总线的转接芯片,实现USB转串口、USB转IrDA红外或者USB转打印口。 在串口方式下,CH340提供常用的MODEM联络信号,用于为计算机扩展异步串口,或者将普通的串口设备直接升级到USB总线

0x2: 特点

1. 全速USB设备接口,兼容USB V2.0,外围元器件只需要晶体和电容
2. 仿真标准串口,用于升级原串口外围设备,或者通过USB增加额外串口
3. 计算机端Windows操作系统下的串口应用程序完全兼容,无需修改
4. 硬件全双工串口,内置收发缓冲区,支持通讯波特率50bps~2Mbps
5. 支持常用的MODEM联络信号RTS、DTR、DCD、RI、DSR、CTS
6. 通过外加电平转换器件,提供RS232、RS485、RS422等接口 
7. 支持IrDA规范SIR红外线通讯,支持波特率2400bps到115200bps
8. 软件兼容CH341,可以直接使用CH341的驱动程序
9. 支持5V电源电压和3.3V电源电压 
10. 提供SSOP-20和SOP-16无铅封装,兼容RoHS

0x3: 封装

0x4: 引脚

Relevant Link:

http://wenku.baidu.com/link?url=dKcWlxPTPfybm5Kpg7eFKtMAdPFuHL2a79OZ6Me0mU_sh1gXqgm5Qzl9JlhVJ-6i7hYMYrBpAxIz_WRAxb_YAlEN2JdM_HqwYVxklTuay37

 

4. 蓝牙小车

Relevant Link:

http://www.arduino.cn/thread-2247-1-1.html

 

Copyright (c) 2016 LittleHann All rights reserved

 

posted @ 2016-07-04 23:15  郑瀚Andrew  阅读(13708)  评论(0编辑  收藏  举报