雷竞技注册
项目

用蓝牙控制Arduino

2015年11月26日通过Hariharan Mathavan

本文将向您展示如何使用蓝牙设置Arduino和Android智能手机之间的双向通信。

利用蓝牙的力量与Arduino通信!

这是第二部分一个系列,它将专注于使用蓝牙与Arduino通信。蓝牙是流行的无线通信技术之一,因为它的功耗低,成本低,灯堆,但补偿了范围。

需求

  • 一个arduino.
    Arduino的任何模型都可以使用,但本文中的所有代码和原理图将用于uno.
  • 带有蓝牙的安卓智能手机
    检查您的手机是否通过在设置下导航到“无线和网络”具有蓝牙。

  • HC-05蓝牙模块
    该模块是那里最受欢迎的蓝牙模块。基本版本非常便宜。必须通过使用a避免必须在模块和arduino之间连接电线的麻烦蓝牙盾牌或蜜蜂形状中的版本,BTBeeA.蜜蜂的盾牌

  • Android工作室

  • Arduino的USB电缆

设置硬件

要使用HC05模块,只需将VCC连接到Arduino上的5V输出,GND到地,Arduino的RX到TX引脚,反之亦然。[编者注:RX引脚不是正式5 V宽容;它设计用于3.3 V信号。Arduino会产生5 V信号,因此您应该使用分压器或逻辑电平翻译器来确保Arduino信号不会损坏HC05。]如果使用带屏蔽的BTBee模块,请设置单板上的跳线,使DOUT和D0、DIN和D1两个引脚短路。这是因为Arduino上的RX引脚是引脚0和TX引脚是引脚1。你可以自由使用任何其他引脚作为RX和TX引脚,但你必须使用Arduino的SoftwareSerial库来启用它。记得在上传代码时移除跳线吗到Arduino,如果您选择引脚0和1作为串行引脚。

连接HC05模块

连接HC05模块

跳线连接到销钉0和1上的BTBEE屏蔽

跳线连接到销钉0和1上的BTBEE屏蔽

如果该模块是第一次使用,您将希望更改名称、密码等。要做到这一点,模块应该设置为命令模式。将Key引脚连接到Arduino上的任意引脚,并将其设置为高,允许模块编程。如果你用的是BTBee,这有点棘手。官方的维基百科说,必须按住模式键才能切换到命令模式,松开模式键才能切换回数据模式,但事实并非如此:相反,按住模式键,然后快速按下重置键。你会注意到状态LED闪烁的速度比平时慢。

要对该模块进行编程,需要使用一组称为AT的命令。以下是其中一些:

检查连接状态。
在+名字=“ModuleName” 设置设备名称
在+ ADDR 检查MAC地址
在+ UART. 检查波特率
在+ UART = " 9600 " 设置波特率为9600
在+ PSWD 检查默认密码
在+ PSWD = " 1234 " 将密码设置为1234

当成功执行时,所有set命令都返回“OK”。

以下是更改名称的代码。跳线连接到4和5,因为模块的响应将打印在串行监视器上。完整的代码在本文的末尾可用于“下载代码”按钮。

//如果您不使用BTBEE CONNECT设置PIN连接到钥匙引脚高#INCLUDE&LTSOFTWARESERIAL.H>软件系列BTSERIAL(4,5);void setup(){string setname = string(“at + name = mybtbee \ r \ n”);//设置名称为'mybtbee'serial.begin(9600);btserial.begin(38400);btserial.print(“\ r \ n”);//检查状态延迟(500);(btserial.available()){serial.write(btserial.read());btserial.print(setname);//发送命令以更改名称延迟(500);(btserial.available()){serial.write(btserial.read()); }} void loop() {}

编程Arduino

没有额外的库用于连接到蓝牙模块,因为Arduino的RX和TX引脚短路与模块的RX和TX引脚。所有数据 - 传出和传入 - 都必须通过模块。接口模块很容易。
要查看其工作原理,请让我们将DHT-11温度传感器连接到Arduino。当接收到字母“T”时,将透射温度,湿度和热指数。使用DHT-11,DHT图书馆由Adafruit使用。

使用DHT-11

屏蔽和连接的DHT传感器

屏蔽和连接的DHT传感器

下面是用于从DHT传感器读取数据,处理数据,并通过蓝牙发送的代码。

#define DHTPIN #define DHTTYPE DHT11 DHT DHT (DHTPIN, DHTTYPE);void setup() {Serial.begin(9600);} void loop() {char c;if(Serial.available()) {c = Serial.read();如果(c = = t) readSensor ();}} void readSensor() {float h = dht.readHumidity();float t = dht.readTemperature();if (isnan(h) || isnan(t)) {Serial. isnan(h);P.rintln("Failed to read from DHT sensor!"); return; } float hic = dht.computeHeatIndex(t, h, false); Serial.print("Humidity: "); Serial.print(h); Serial.print(" %\t"); Serial.print("Temperature: "); Serial.print(t); Serial.print(" *C "); Serial.print("Heat index: "); Serial.print(hic); Serial.print(" *C "); }

安卓应用程序

看一下P.revious文章来快速介绍Android应用程序以及这个应用程序的布局。

Android应用程序的布局

程序流程将如上所述。

编辑AndroidManifest.xml

由于这个应用程序将使用的额外硬件是机载蓝牙适配器,它将不得不在舱单中提到。

使用-permission android:name =“android.permission.bluetooth”/>

连接设备

首先检查是否存在蓝牙适配器。

BluetoothAdapter BluetoothAdapter = BluetoothAdapter.getDefaultAdapter();if(bluetoothapapter == null){toast.maketext(getApplicationContext(),“设备不支持蓝牙”,toast.length_short).show();}

如果存在,请检查它是否已启用。如果未启用,请询问用户权限启用它。

if(!bluetoothAdapter.isEnabled()) {Intent enableAdapter = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);startActivityForResult (enableAdapter 0);}

设备必须在应用程序使用之前配对。检查下面的部分了解有关如何搭配BT模块和手机的详细信息。既然适配器已启用,请检查配对/绑定设备。使用从上面部分的AT命令,为设备提供适当的名称。还找出了它的MAC地址。这里,将MAC地址进行比较,因为匹配是易于经常改变的名称。

设置bondedDevices = bluetoothAdapter.getBondedDevices();if(bondedDevices.isEmpty()) {Toast.makeText(getApplicationContext(),“请先配对设备”,Toast.LENGTH_SHORT).show();} else {for (BluetoothDevice迭代器:bondedDevices) {if(iterator. getaddress ().equals(DEVICE_ADDRESS)) //如果比较设备名称,则替换为iterator. getname()。{设备=迭代器;//设备是蓝牙设备类型的对象=true;打破;}}}

在获得蓝牙设备后,必须创建一个插座来处理输出连接。这里使用了RFCOMM套接字。RFCOMM——也称为串行端口配置文件——本质上是一种蓝牙协议,用来模拟RS232电缆。

socket = device.createrfcommsockettoservicerecord(port_uuid);socket.connect();

然后获取套接字的输入和输出流。

OutputStream = socket.getOutputStream();InputStream = socket.getInputStream();

阅读传入数据

由于可以在任何时间点接收数据,因此运行一个线程以侦听数据是最好的。首先,针对可用数据查询输入流。然后,字节将转换为人类可读的UTF-8格式,文本将发送给处理程序以将发布到UI。这是因为无法从背景线程更新UI。

int byteCount = inputStream.available();if(byteCount > 0) {byte[] rawBytes = new byte[byteCount];read (rawBytes);final String String =new String(rawBytes,"UTF-8");处理程序。P.ost(new Runnable() { public void run() {  textView.append(string); } }); }

传输数据

要发送数据,将字符串传递给OutputStream。

OutputStream.Write(String.getBytes());

下载应用程序的源代码

ArduinoBluetooth(源). zip

测试应用程序

首先,通过在系统设置的蓝牙选项卡中扫描新设备来配对手机和模块。前面设置的名称应该出现。输入设置的密码(默认是0000或1234)。

蓝牙配对请求

在Arduino上电后,您可能会注意到BTBee的状态LED会周期性的闪烁。现在打开应用程序,点击“开始”。状态LED必须熄灭,Conn LED将发光。这表明连接已经建立。

BTBEE的状态LED定期闪烁

当“T”被发送到Arduino时,它会用温度,湿度和热指数回复。

使用

这是一个简单的使用蓝牙传输数据的展示。注意,如果您不希望使用这里提供的应用程序,也可以使用Arduino蓝牙串行终端应用程序。蓝牙可以用来控制许多日常事务的自动化,如打开灯泡,这可以通过使用一个中继Arduino。这是关于Arduino与Android手机接口的两部分系列文章的最后一部分。第一部分使用串行电缆可以找到这里

为自己提供这个项目!得到bom。

26评论
  • B
    briantee 2016年3月7日

    当我尝试编译应用程序时,它的Gradle说:

    错误:(1,0)包含id'com.android.application的插件。找不到。
    打开的文件

    喜欢的。 回复
    • Đạt Tiến Nguyễn 2016年10月29日
      @briantee:升级到appcombat, gradle到最新版本。它的工作很好buildscript {repositories {jcenter() //或mavenCentral()} dependencies {classpath 'com.android.tools.build:gradle:2.2.1'}}编译fileTree(dir: 'libs', include: ['*.jar']) compile 'com.android.support:appcompat-v7:25.0.0'}
      喜欢的。 回复