利用蓝牙的力量与您的Arduino通信!
这是第二部分一个系列它将专注于使用蓝牙与Arduino通信。蓝牙是一种流行的无线通信技术,因为它具有低功耗、低成本和轻堆栈,但补偿范围。
需求
- 一个Arduino
Arduino的任何模型都可以使用,但本文中的所有代码和示意图都将用于Uno。 带有蓝牙的安卓智能手机
在设置中选择“无线和网络”,检查你的手机是否有蓝牙。HC-05蓝牙模块
这个模块是目前最流行的蓝牙模块。基本版相当便宜。在模块和Arduino之间连接电线的麻烦可以通过使用a蓝牙屏蔽或者是蜜蜂形状的BTBee和一个蜜蜂的盾牌。
设置硬件
要使用HC05模块,只需将VCC连接到Arduino上的5V输出,GND到地,RX到Arduino的TX引脚,反之亦然。[编者注:RX引脚没有官方的5v容忍度;它是为3.3 V信号设计的。Arduino产生一个5v信号,所以应该使用分压器或逻辑级转换器来确保Arduino信号不会损坏HC05。]如果使用带屏蔽的BTBee模块,需要设置板上跳线,使DOUT引脚和D0引脚短路,DIN引脚和D1引脚短路。这样做是因为Arduino上的RX引脚是引脚0,TX引脚是引脚1。您可以自由使用任何其他引脚作为RX和TX引脚,但您必须使用Arduino的SoftwareSerial库来实现这一点。记得在上传代码时删除跳线吗如果您选择了引脚0和1作为串行引脚,则可以将其连接到Arduino。
连接HC05模块
跳线连接到BTBee屏蔽上的引脚0和1
如果是第一次使用模块,您将需要更改名称、密码等。为此,应该将模块设置为命令模式。将键脚连接到Arduino上的任何脚,并将其设置为高,以允许对模块进行编程。如果你用的是BTBee,那就有点棘手了。虽然官方维基说,必须按住Mode按钮才能将其更改为命令模式,而释放它又会将其更改为数据模式,但事实并非如此:相反,按住Mode按钮,然后快速按下并释放Reset按钮。你会注意到指示灯的闪烁速度比平时慢。
为模块编程,使用一组称为AT命令的命令。以下是其中一些:
在 | 检查连接状态。 |
在+名字=“ModuleName” | 设置设备名称 |
在+ ADDR | 检查MAC地址 |
在+ UART | 检查波特率 |
在+ UART = " 9600 " | “波特率”设置为“9600” |
在+ PSWD | 检查默认密码 |
在+ PSWD = " 1234 " | 设置密码为1234 |
所有set命令在成功执行时返回“OK”。
下面是一些更改名称的代码。跳线连接到4和5,因为模块的响应将在串行监视器上打印出来。在本文末尾的“下载代码”按钮中可以找到完整的代码。
//如果你不使用BTBee连接设置引脚连接到关键引脚高#include <SoftwareSerial。h > SoftwareSerial BTSerial(4、5);void setup() {String setName = String("AT+NAME=MyBTBee\r\n");//设置名称为MyBTBee serialbegin (9600);BTSerial.begin (38400);BTSerial.print(“\ r \ n”);/ /检查状态延迟(500);while (BTSerial.available()) {Serial.write(BTSerial.read());} BTSerial.print (setName);//Send命令更改名称delay(500);while (BTSerial.available()) {Serial.write(BTSerial.read()); }} void loop() {}
编程Arduino
没有额外的库用于连接蓝牙模块,因为Arduino的RX和TX引脚与模块的引脚短路了。所有的数据——传出的和传入的——都必须通过这个模块。接口模块就这么简单。
为了了解它是如何工作的,让我们将DHT-11温度传感器连接到Arduino上。当收到字母“t”时,温度、湿度和热指数就会传回来。要使用DHT-11,请使用DHT图书馆使用Adafruit。
屏蔽和连接的DHT传感器
下面是用于从DHT传感器读取数据、处理数据并通过蓝牙发送数据的代码。
#包括双氢睾酮”。h" #define DHTPIN 2 #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. read湿度();float t = dht.readTemperature();if (isnan(h) || isnan(t)) {Serial。println("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 "); }
安卓应用程序
看一下previous文章来快速介绍一下Android应用程序以及这个应用程序的布局。
程序流程将如上所示。
编辑AndroidManifest.xml
由于该应用程序将使用的额外硬件是板载蓝牙适配器,它将不得不在清单中提到。
uses-permission android: name = " android.permission。蓝牙" / >
连接设备
首先检查是否存在蓝牙适配器。
BluetoothAdapter BluetoothAdapter = BluetoothAdapter.getDefaultAdapter ();if (bluetoothAdapter == null) {Toast.makeText(getApplicationContext(),“设备不支持蓝牙”,Toast.LENGTH_SHORT).show();}
如果它存在,检查它是否被启用。如果未启用,请请求用户权限启用。
if(!bluetoothAdapter.isEnabled()) {Intent enableAdapter =新的Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);startActivityForResult (enableAdapter 0);}
设备必须配对后,应用才能使用它。请参见下面的章节了解如何将BT模块与话机配对。既然适配器已经启用,那么就检查配对/绑定的设备。使用上一节中的AT命令,给设备一个合适的名称。同时找出它的MAC地址。这里比较MAC地址是否匹配,因为名称可能经常更改。
Set bondedDevices = bluetoothAdapter.getBondedDevices();if(bondedDevices.isEmpty()) {Toast.makeText(getApplicationContext(),"请配对设备首先",Toast.LENGTH_SHORT).show();} else {for (BluetoothDevice iterator: bondedDevices) {if(iterator. getaddress ().equals(DEVICE_ADDRESS)) //如果比较设备名,使用iterator. getname()替换。{设备=迭代器;//device是BluetoothDevice found类型的对象=true;打破;}}}
在获得蓝牙设备之后,必须创建一个套接字来处理传出连接。这里使用了RFCOMM套接字。RFCOMM——也称为串行端口配置文件——本质上是一种模拟RS232电缆的蓝牙协议。
套接字= 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");处理程序。post(new Runnable() { public void run() {
textView.append(string); } }); }
传输数据
要发送数据,请将字符串传递给OutputStream。
outputStream.write (string.getBytes ());
下载该应用程序的源代码
测试应用程序
首先,通过在系统设置的蓝牙选项卡中扫描新设备,将手机和模块配对。应该出现前面设置的名称。输入设置密码(默认是0000或1234)。
打开Arduino后,您可能会注意到BTBee的状态LED定期闪烁。现在打开应用程序,点击开始。状态LED必须关闭,控制面板LED将发光。这表明已经建立了连接。
当“t”被发送到Arduino时,它会回应温度、湿度和热指数。
这是一个使用蓝牙进行数据传输的简单展示。注意,如果你不想使用这里提供的应用,你也可以使用Arduino蓝牙串行终端应用。蓝牙可以用来控制很多日常事情的自动化,比如打开一个灯泡,这可以通过使用一个继电器Arduino。本文结束了关于Arduino与Android手机接口的两部分系列文章。可以找到关于使用串行电缆的第一部分在这里。
自己尝试一下这个项目吧!BOM。
当我尝试编译应用程序时,它的gradle说:
Error:(1,0) Plugin with id ' com.android. .应用程序没有找到。
打开的文件