HC-05初探

catalogue

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

1. 蓝牙嗅探抓包

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

Relevant Link:

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

Copyright (c) 2016 LittleHann All rights reserved

时间: 2024-08-09 01:42:58

HC-05初探的相关文章

HC - 05 bluetooth module settings in Linux using CuteCom

By default the bluetooth module HC-05 sets baud rate at 38400, data bits 8, Stop bits 1 All schematics of this bluetooth module can be found at : http://pan.baidu.com/s/1o6BiNDS I used a USB-> TTL usb module connecting to the bluetooth module. Rx ->

Web前端开发推荐阅读书籍、学习课程下载

转自http://www.xuanfengge.com/fe-books.html 前言 学校里没有前端的课程,那如何学习JavaScript,又如何使自己成为一个合格的前端工程师呢? 除了在项目中学习和跟着有经验的同事学习,读书也是必不可少的.书中有着相对完整的知识体系,每读一本好书都会带来一次全面的提高. 而如果深一脚浅一脚的学习,写出代码的质量会参差不齐.初学者的首要任务是成为靠谱的熟练开发者,能够稳定的输出有一定质量的代码. 前端技术发展速度特别快,总是涌现出很多新的东西,需要不断的学习

mongoDB的读书笔记(04)_【Replica】(05)_初探Replica set副本集的搭建 By Test模式

Replica set Deployment On Test Mode 为啥是测试模式 实战 先絮叨絮叨操作系统 在一台机器上创建模拟5个节点 进入非db连接模式 建立5个节点的test script 启动所有的节点 配置节点 进入一个节点 配置Replica的config 进行初始化 check心跳和log 查看Replia的详细 查看Secondary Replia的详细 写数据实验 Primary写入 Secondary查看 Replica set Deployment On Test M

TensorFlow教程05:MNIST深度学习初探

TensorFlow是一个非常强大的用来做大规模数值计算的库.其所擅长的任务之一就是实现以及训练深度神经网络. 在本教程中,我们将学到构建一个TensorFlow模型的基本步骤,并将通过这些步骤为MNIST构建一个深度卷积神经网络. 这个教程假设你已经熟悉神经网络和MNIST数据集.如果你尚未了解,请查看新手指南. 安装 在创建模型之前,我们会先加载MNIST数据集,然后启动一个TensorFlow的session. 加载MNIST数据 为了方便起见,我们已经准备了一个脚本来自动下载和导入MNI

[java初探05]__数组的简单认识及Arrays类的常用方法

数组是具有相同数据类型的一组数据的集合.在程序设计中,这样的集合称之为数组.数组的每个元素都具有相同的数据类型,在Java中数组也被看为一个对象. 在里,了解了数组的定义之后, 我们知道了,数组并不是简单的由一组数组成的.而是由一组具有相同数据类型的数据组成的,可以是一组整型的数据,也可以是一组字符型的数组,这里的数可以来理解为代表的是数据,而不是数字的意思. 关于一维数组与二维数组 一维数组实际上就是一组相同数据类型的数据的线性集合. 如果一维数组中的每一个元素任然是一个数组的话,那么它就构成

[转载]HDFS初探之旅

转载自 http://www.cnblogs.com/xia520pi/archive/2012/05/28/2520813.html , 感谢虾皮工作室这一系列精彩的文章. Hadoop集群(第8期)_HDFS初探之旅 1.HDFS简介 HDFS(Hadoop Distributed File System)是Hadoop项目的核心子项目,是分布式计算中数据存储管理的基础,是基于流数据模式访问和处理超大文件的需求而开发的,可以运行于廉价的商用服务器上.它所具有的高容错.高可靠性.高可扩展性.高

[深入剖析React Native]React 初探

认识React React是一个用于构建用户界面的JavaScript库. React主要用于构建UI,很多人认为React是MVC中的V,即视图. React起源于Facebook的内部项目,用来架设Instagram的网站,并于2013年5月开源. React拥有较高的性能,代码逻辑非常简单,越来越多的人已开始关注和实用它. React特点 声明式设计 - React**采用声明范式**,可以轻松描述应用. 高效 - React通过对DOM的模拟,最大限度地减少与DOM的交互. 灵活 - R

初探Java序列化(Serialization)

Serialization(序列化)是一种将对象以一连串的字节描述的过程:反序列化Deserialization是一种将这些字节重建成一个对象的过程.[字节流的来回转换] Java中,一切都是对象,在分布式环境中经常需要将Object从这一端网络或设备传递到另一端.这就需要有一种可以在两端传输数据的协议.Java序列化机制就是为了解决这个问题而产生. 将对象状态转换成字节流之后,可以用java.io包中各种字节流的类将其保存到文件中,管道到另一线程中或通过网络连接将对象数据发送到另一主机.对象序

初探webService

webService提供了一种规范,可以用于不同语言或者不同平台之间数据传输. 复习socket通信以便更好的理解ws. socket通信图示: 平台a与平台b无法进行直接通信,通过socket进行通信. socket通信举例(回复相同的字符串): 客户端 package com.bxw.client; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.

linux网络管理初探

linux网络管理初探 既然说到linux的网络管理,先来简单了解一下OSI开放系统模型以及TCP/IP模型. OSI(Open System Interconnect),即开放式系统互联. 一般都叫OSI参考模型,是ISO(国际标准化组织)组  织在1985年研究的网络互联模型.该体系结构标准定义了网络互连的七层框架(物理层.数据链路层.网络层  传输层.会话层.表示层和应用层),即ISO开放系统互连参考模型.在这一框架下进一步详细规定了每一层的  功能,以实现开放系统环境中的互连性.互操作性