蓝牙模块和arduino连接

2017-07-06 08:56:08 csdnvr 阅读数 14233

原文:How to Control Arduino Board Using an Android Phone and a Bluetooth Module
作者:kerimil
翻译:安翔
审校:屠敏,关注物联网、移动开发领域,寻求报道或投稿请发邮件tumin@csdn.net

本教程将教你借助一个蓝牙模块和 MIT’s app inventor(App Inventor 官方服务器) 在 Android 手机和 Arduino 开发板之间创建一个无线连接,通过两个示例(手机控制 LED、手机显示环境温度)展示手机和 Arduino 之间的通信。

发送示例

下图展示了Android App发送指令的示例。它通过蓝牙模块控制 LED 开关,可以看到,指令的发送不仅可以通过 App 界面的button,还可以通过语音。具体内容将在1、2、3步中介绍。


图1. Android App 控制 LED


图2. Android App 界面

接收示例

下图是 Android 手机接收数据的示例。Arduino 开发板通过温度传感器 DS18B20 获取温度值,Android App 每15秒刷新一次温度值,并且为了更好的展示效果,我实现了手机的语音播报。在后续的步骤4、5、6中将详细描述 Arduino 代码和应用程序。

图3. Android 手机显示环境温度

接下来,我将一步步介绍布线方法,编写一个能够收发命令的 Arduino sketch , 并且编写应用程序。本教程需要你对 Arduino 有基本的了解,熟悉它的 IDE,最好做过一些小项目。这样的话,本教程中的内容将是非常好理解的,你将非常容易实现对 Arduino 的串行通信。

步骤1:接线和零件清单


图4. 发送示例硬件连线图

连线方法如上图所示,非常简单。

零件清单:

  • Arduino开发板
  • 蓝牙串口模块
  • LED
  • 电阻(100欧)
  • 电线
  • 面包板

市面上的蓝牙模块多种多样,你需要查看具体蓝牙模块的数据手册,根据其 Pin 脚图进行正确的连线。

此外,蓝牙模块还根据距离的不同而分为如下两个级别:

  • 1级,其范围约100米(300英尺)
  • 2级,其范围约10米(30英尺)

如你所想,这两种级别的蓝牙模块是相互兼容的。只有手机和蓝牙模块两者都是1级,才能实现100米的传输。如果只有一个是1级蓝牙,那么最大传输距离将相对减小,无法达到100米。

我的串口蓝牙模块从左至于的 Pin 脚为:地、RX、TX、空、VCC。地和 VCC 分别连接 Arduino 开发板上的地和+5V引脚。我们主要是通过蓝牙模块接收手机发送的数据,然后将数据转发给 Arduino,因此只需将蓝牙模块的 TX 和 Arduino 开发板的 RX 引脚相连。另外将 Arduino 的 PIN2 和 LED相连,实现对LED的驱动。

步骤2:Arduino 代码

以下是我编写的 Arduino 代码,你可以在此基础上随意修改。
需要注意的是波特率,请确保它和你的蓝牙模块匹配,建议你仔细查看数据手册或者 AT 指令表。

const int ledPin = 2;  // the pin that the LED is attached to
byte serialA;
void setup()
{
  // initialize the serial communication:
  Serial.begin(19200); //baud rate - make sure it matches that of the module you got:
  // initialize the ledPin as an output:
  pinMode(ledPin, OUTPUT);
}

void loop() {
  if (Serial.available() > 0) {serialA = Serial.read();Serial.println(serialA);}
    switch (serialA) {
    case 1:
      digitalWrite(ledPin, HIGH);
      break;
    case 2:
      digitalWrite(ledPin, LOW);
      break;
    case 3:
      digitalWrite(ledPin, HIGH);
      delay(100);
      digitalWrite(ledPin, LOW);
      delay(100);
     default:
     break;
  }
}

步骤3: App 和 App Inventor


图5. App Inventor 界面

如果想获取 App 并运行,那么在该地址下载后安装即可。

你需要检查你的手机设置,设置其允许 Android Market、Google Play以外的 App,这样你才能下载。
如果你想修改 App 请点击此处,以了解如何准备计算机并安装 App Inventor 软件。运行成功之后,我建议你学习基本教程做一两个 App 练练手。
点击此处获取我的 App 源码,你可以将之上传到 App Inventor 然后下载到你的手机,随便怎么修改都可以。

步骤4:从 Arduino 接收数据

本步骤将介绍一个从 Arduino 开发板接收数据的示例。
我决定做一些实用的东西,因此选择了一个 DS18B20 温度传感器。Arduino 开发板使用一根线就可以实现和传感器的通信,它调用Arduino 版的 OneWrite 库来计算温度值,然后每隔 500ms 通过蓝牙模块将温度值发送出去。

手机 App 每 500ms 轮询一次串口,如果有数据则读取并显示在手机屏幕上。此外,手机 App 还可以通过一个选项打开文本到语音的转换功能,这样手机将每隔15秒语音播报一次温度值。

步骤5:传感器的 Arduino 代码

你需要使用 OneWrite 库来计算温度值,点击此处获取 OneWrite 库的代码。

传感器相关的 Arduino 代码如下:

#include <OneWire.h>
int DS18S20_Pin = 2; //DS18S20 Signal pin on digital 2
//Temperature chip i/o
OneWire ds(DS18S20_Pin); // on digital pin 2
void setup()
{
  // initialize the serial communication:
  Serial.begin(19200);
  // initialize the ledPin as an output:
}
void loop() {
  float temperature = getTemp();
  Serial.println(temperature); delay (500);
}
float getTemp(){
  //returns the temperature from one DS18S20 in DEG Celsius
  byte data[12];
  byte addr[8];
  if ( !ds.search(addr)) {
    //no more sensors on chain, reset search
    ds.reset_search();
    return -100;
  }
  if ( OneWire::crc8( addr, 7) != addr[7]) {
    Serial.println("CRC is not valid!");
    return -1000;
  }
  if ( addr[0] != 0x10 && addr[0] != 0x28) {
    Serial.print("Device is not recognized");
    return -1000;
  }
  ds.reset();
  ds.select(addr);
  ds.write(0x44,1); //start conversion, with parasite power on at the end
  byte present = ds.reset();
  ds.select(addr);
  ds.write(0xBE); // Read Scratchpad
  for (int i = 0; i < 9; i++) {
    data[i] = ds.read();
  }
  ds.reset_search();
  byte MSB = data[1];
  byte LSB = data[0];

  float tempRead = ((MSB << 8) | LSB);
  float TemperatureSum = tempRead / 16;

  return TemperatureSum;
}

步骤6:接收数据 - 手机端

此处将提供用于温度读取的 App 链接,包括 apk 文件和源码。你可以随意修改源码并将其上传到 MIT’s app inventor(当你在 ‘My Project’ 中点击 ‘More Action’按钮即可看到 ‘Upload Source’ 选项)。

后续我将添加更加详细的描述,如果你想要创建自己的应用,那么有些须知你是需要了解的:确保你理解术语“分隔符 byte”;了解从 MIT’s app inventor 设置它的方法;因为 byte 所以要小心使用你的数据类型 。另外,在 App Inventor 中似乎没有实现串口的超时功能,因此发送数据比接收数据更频繁可能导致应用程序崩溃(可能是因为没有刷新缓冲区)。

2017-09-18 14:27:40 weixin_37272286 阅读数 7827

通过这篇文章,你可以了解到以下内容:

  • 什么是蓝牙BLE 4.0
  • 如何设置蓝牙BLE 的 AT 指令
  • Arduino 连接蓝牙 BLE 与 iOS 设备互联实践

了解 BLE 4.0

BLE 全称是 Bluetooth Low Energy 低功耗蓝牙的缩写,是蓝牙 4.0 的一个分支。

BLE 支持 iPhone4s 以上的 iOS 设备,并且无需做 MFI 认证,因此对于个人开发者及一些中小型开发团队快速开发硬件原型以及智能家居等产品设备有着极大的便利。

作为 Arduino 开发者,我们常见的蓝牙 BLE 模块主要是采用美国TI公司CC2541芯片的模块,这种模块比较容易购买,现在能买到的蓝牙BLE模块主要有两种,一种是已经焊接好,带有针脚的模块,另外一种是没有焊接针脚的,用户可以根据自己项目及需求的实际情况进行选择。

设置 AT指令

我们可以通过USB-TTL 模块蓝牙BLE与电脑连接,使用蓝牙串口助手软件对蓝牙BLE模块进行调试。

USB-TTLBLE4.0 的连接方法如下:

BLE4.0 USB-TTL
VCC 3.3V
GND GND
TXD RXD
RXD TXD

注意,在通电之前,请确保连接正确,以防因连接错误而损坏模块设备!
接线完成后,把 USB-TTL 连接电脑,打开串口调试软件(可以根据自己的使用习惯选择串口调试软件),选择好正确的端口号,打开串口即可通讯。

ble_com.jpg

BLE4.0的AT指令大致与HC05蓝牙模块类似,详细AT指令请参考购买时商家提供的手册。

这里有一点需要注意,BLE4.0模块进入AT指令设置模式,不需要向HC05一样需要按着模块电路板上的按钮,但是需要确保该模块没有被连接。

Arduino 连接蓝牙 BLE 与 iOS 设备互联实践

接下来,我们将尝试使用Arduino和BLE4.0模块与 iOS 设备进行互联通信。进行这个实验,我们需要预先准备好以下内容:

名称 数量
iOS 设备 1
Arduino 1
BLE 4.0模块 1
FM连接线 若干
LightBlue App 1

准备好后,下面开始连接 Arduino 和 BLE4.0 模块:

Arduino BLE4.0
5V VCC
GND GND
TX RXD
RX TXD

连接完成后,我们接着为 Arduino 编写程序。程序非常简单,程序的主要功能为接收蓝牙数据,如果截获数据为A,那么久返回 BLE get char A.。程序代码如下:

void setup()
{
    Serial.begin(9600);
}

void loop()
{
    while(Serial.available()){
        char c = Serial.read();
        if (c == 'A') {
            Serial.println("BLE get char A.");
        }
    }
}

编译上传程序到 Arduino 上之后,我们打开 LightBlue,测试是否能正常使用。

lightblue_1step.PNG

打开 LightBlue App,打开蓝牙,我们可以看到周围的蓝牙设备,我们这里的 BLE4.0 设备名称是 BT05,接下来,我们点击 BT05 ,可以看到左上方显示 Connected 字样,代表连接成功。接下来,我们下拉到最下面,点击 TX&RX 进入 TX&RX 子页,可以看到以下的内容:

light_blue_2step.PNG

注意页面的最右上方,这里现在是显示 Hex,我们需要的是使用 UTF-8 编码方式进行通讯,因此,我们点击 Hex,进入设置页面,选择 UTF-8 String 设置编码方式为 UTF-8 编码。

lightblue_step3.PNG

设置完成后,我们就可以通过 WRITTEN VALUES 来输入发送数据,然后可以在 READ/NOTIFIED VALUES 里面看到 Arduino 返回的数据。

lightblue_final.PNG

我们可以看到,LightBlue 已经收到 Arduino 返回的 BLE get char A. 字符串,到这里为止,实验成功。

小结

这篇文章简单介绍了BLE的特点,以及如何视同 USB-TTL 设置蓝牙模块的AT指令,最后通过一个Arduino蓝牙与iOS设备连接的小实验来了解手机和Arduino蓝牙是如何通信的。如果你需要了解蓝牙HC05模块的使用方法,可以参考另外一篇文章Arduino使用HC05蓝牙模块与手机连接

参考资料

蓝牙4.0BLE模块兼容Arduino

2017-11-12 20:02:01 gc_2299 阅读数 16364
在淘宝店中买的HC-05主从机一体蓝牙模块,该模块的正面和反面截图如下:
Arduino使用蓝牙通信模块 - gc_2299 - gc_2299的博客
 
Arduino使用蓝牙通信模块 - gc_2299 - gc_2299的博客
测试的时候只使用了RX、TX、GND、5V这四个引脚,测试的连接示意图如下,需要注意的是蓝牙模块的RX要接Arduino的TX,蓝牙模块的TX要接Arduino的RX:
Arduino使用蓝牙通信模块 - gc_2299 - gc_2299的博客
  测试代码使用的是参考文献1中的代码,代码如下:

char data = 0;
void setup()
{
Serial.begin(9600);
pinMode(13, OUTPUT);
}
void loop()
{
if(Serial.available() > 0)
{
data = Serial.read();
Serial.print(data);
Serial.print("\n");
if(data == '1')
digitalWrite(13, HIGH);
else if(data == '0')
digitalWrite(13, LOW);
}
}

实物连线图如下:
Arduino使用蓝牙通信模块 - gc_2299 - gc_2299的博客
 
演示视频:

注意:一开始测试的时候使用的是iPhone5,结果在蓝牙界面中死活收不到hc-05的设备(原因可以参考文献2-3),后来换了一个三星的手机,很快就搜索出来了,但是开始的时候下了几个蓝牙串口调试助手,要么检测不到蓝牙连接,要么检测到了连接不上,最后下了一个名称为蓝牙串口的软件,版本为5.4.3,图标为蓝底带大写字母SPP,使用这个软件可以正常地进行蓝牙串口通信。

参考文献:
[1]https://create.arduino.cc/projecthub/user206876468/arduino-bluetooth-basic-tutorial-d8b737
[2]http://www.eevblog.com/forum/beginners/hc05-bluetooth-and-iphone/
[3]http://apple.stackexchange.com/questions/141112/connecting-iphone-to-hc-05-bluetooth-module
 
2017-02-20 13:37:08 xieyan0811 阅读数 20673

1)       说明:

蓝牙模块用于和手机或其它带蓝牙的设备通讯。蓝牙设备分为主从两种模式,作为主设备时,它查找和连接其它设备;作为从设备时只能被只它设备连接;通讯模式分透明传输和AT命令模式。最好购买主从一体的蓝牙模块。
下面介绍的是最常用的是作为从设备与手机相接,之后进入透明传输。这也是最简单的一种。
注意: Arduino与电脑和蓝牙模块通讯都使用串口TX/RX,同时操作时产生冲突,程序写入Arduino时要断开与蓝牙相连的RX, 执行时要注意,Serial.println()会将内容输出到蓝牙的另一端,而不是在电脑端显示信息。
另外,蓝牙的默认密码是0000或1234。

2)       硬件:

蓝牙模块HC-06,Arduino uno,Android手机,杜邦线

3)       连接

VCC:接Arduino的5V或者3.3V
GND:接Arduino的GND
TXD:发送端,接Arduino的RX
RXD:接收端,接Arduino的TX

(千万注意,不能接错,若接收发端与电源连接,会烧掉)

4)       代码

void setup()
{
  Serial.begin(9600);
}

void loop()
{
  while(Serial.available())
  {
    char c=Serial.read();
    Serial.println(c);
  }
} 

以上程序运行时,我拔掉了Android上的TX线(也就是Arduino向蓝牙模块发数据的线),此时串口的输出可显示在电脑上。

Android端程序,可以从CSDN下载car137源码,我试过,可正常运行。

(请注意:因各厂商硬件不同,引脚位置可能有差异,具体请见硬件说明书)


2017-09-18 10:32:16 weixin_37272286 阅读数 51823

通过本文,可以了解到以下内容:

  • 进入 AT 模式进行蓝牙基本参数设置
  • Arduino 蓝牙控制 LED 电路设计以及代码编写
  • 利用 Andorid 蓝牙串口调试软件测试功能

进入 At 模式进行蓝牙基本参数设置

想要使用 Arduino 的蓝牙模块,首先要对蓝牙模块进行基本参数设置。基本参数设置主要包含:蓝牙名称、模式以及匹配密码等。设置蓝牙模块可以使用 USB-TTL 连接电脑使用串口调试软件进入 AT 模式进行设置,也可以使用 Arduino 连接蓝牙模块进行设置,本文主要介绍后一种方法。

注意事项

在连接蓝牙的时候,要注意线的连接是否正确,检查清楚再进行通电,除此之外,还要主要不要让针脚短路,我在首次使用蓝牙模块的时候,因为没注意接线,导致一个蓝牙模块损坏了,只能发信息不能收信息,所以为了避免不必要的损失,这里要注意。

Arduino HC05 AT模式接线

进入 AT 模式设置蓝牙的接线如下:
Arduino 5V - VCC
Arduino GND - GND
Arduino Pin10 - TXD
Arduino Pin11 - RXD
在通电前检查接线是否正确连接
hc05_at_mode.jpg

Arduino 进入 AT 模式代码

接下来,我们需要为使用 Arduino 设置蓝牙模块 AT 模式编写程序,这个程序是让我们可以通过 Arduino IDE 提供的串口监视器来设置蓝牙模块。详细的 Arduino 代码如下:

#include <SoftwareSerial.h> 

// Pin10为RX,接HC05的TXD
// Pin11为TX,接HC05的RXD
SoftwareSerial BT(10, 11); 
char val;

void setup() {
  Serial.begin(38400); 
  Serial.println("BT is ready!");
  // HC-05默认,38400
  BT.begin(38400);
}

void loop() {
  if (Serial.available()) {
    val = Serial.read();
    BT.print(val);
  }

  if (BT.available()) {
    val = BT.read();
    Serial.print(val);
  }
}

利用 Arduino IDE 串口监视器进行调试

首先,将 Arduino 断电,然后按着蓝牙模块上的黑色按钮,再让 Arduino 通电,如果蓝牙模块指示灯按2秒的频率闪烁,表明蓝牙模块已经正确进入 AT 模式。
打开 Arduino IDE 的串口监视器,选择正确的端口,将输出格式设置为 Both: NL & CR ,波特率设置为 38400 ,可以看到串口监视器中显示 BT is ready! 的信息。
然后,输入 AT ,如果一切正常,串口显示器会显示 OK
接下来,我们即可对蓝牙模块进行设置,常用 AT 命令如下:

AT+ORGL    # 恢复出厂模式
AT+NAME=<Name>    # 设置蓝牙名称
AT+ROLE=0    # 设置蓝牙为从模式
AT+CMODE=1    # 设置蓝牙为任意设备连接模式
AT+PSWD=<Pwd>    # 设置蓝牙匹配密码

正常情况下,命令发送后,会返回 OK ,如果没有返回任何信息,请检查接线是否正确,蓝牙模块是否已经进入 AT 模式,如果上述两点都没有问题,可能是蓝牙模块的问题,可以找蓝牙模块供应商咨询。
设置完毕后,断开电源,再次通电,这是,蓝牙模块指示灯会快速闪烁,这表明蓝牙已经进入正常工作模式。

利用 Andorid 手机连接 Arduino 并控制 LED灯开关

我们完成了对蓝牙模块的设置后,我们将做一个可以通过手机蓝牙连接,控制 Arduino 开关 LED 灯的小实验。

Arduino 电路设计

这里的电路设计比较简单,主要是两部分:
- Arduino 与 HC05 模块连接
- Arduino 与 LED 连接

这里有两点需要注意,Arduino 上的 TXD 应与 HC05 模块上的 RXD 端连接,Arduino 上的 RXD 应与 HC05 模块上的 TXD 连接。
在下面的图例中,我的 LED 是直接连接在 Arduino Pin13 上,而实际电路连接中,因根据连接的 Led 灯的设计考虑是否需要串联电阻。
Hc05_Led.jpg

Arduino 蓝牙控制 LED 灯 程序设计

Arduino 程序代码如下:

void setup()
{
  // 设置波特率为 38400
  Serial.begin(38400);
  pinMode(13, OUTPUT);
}


void loop()
{
  while(Serial.available())
  {
    char c=Serial.read();
      if(c=='1')
      {
        Serial.println("BT is ready!");
        // 返回到手机调试程序上
        Serial.write("Serial--13--high");
        digitalWrite(13, HIGH);
      }
     if(c=='2')
     {
       Serial.write("Serial--13--low");
       digitalWrite(13, LOW);
     }
  }
}

Android 手机端调试

在 Android 端上进行调试,需要下载蓝牙串口调试 APP,可以根据喜好在各大应用商场搜索下载。
下载安装完成 APP 后,我们先打开手机的蓝牙设置,搜索并匹配好我们的蓝牙模块。然后打开 蓝牙串口调试APP ,让 APP 连接上蓝牙模块,然后我们可以在 APP 中输入 1,接下来可以看到 LED 等亮了,并且能在 APP 中看到 Serial--13--high 的返回(有些 APP 返回值可能不是返回在同一行)。我们再在 APP 中输入 2,可以看到 LED 熄灭, APP 中返回 Serial--13--low

小结

在这篇文章中,我们了解了在 Arduino 中使用 HC05 蓝牙模块的两个主要步骤,首先是进入 AT模式 对蓝牙模块进行设置,这里要注意接线的正确性,设置完成后,就可以将蓝牙模块的 TXArduino RX 连接,RXArduino TX 连接,再通过 Arduino 程序中的 Serial 来实现数据的传输与读取。最后,在通过 Android 上的蓝牙串口调试APP,来测试我们的试验是否成功。

参考资料

蓝牙模块HC05
Arduino Bluetooth Basic Tutorial


本文为原创内容,由同一作者于早前发表于简书,Arduino使用HC05蓝牙模块与手机连接

arduino与蓝牙模块

阅读数 2371