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的规格
不同蓝牙模组的引脚和固件可能不太一样,购买时,务必跟厂商索取data sheet(规格说明书、AT命令手册、底板的电路图)
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