利用蓝牙的力量与Arduino通信!
这是第二部分一个系列,它将专注于使用蓝牙与Arduino通信。蓝牙是流行的无线通信技术之一,因为它的功耗低,成本低,灯堆,但补偿了范围。
需求
- 一个arduino.
Arduino的任何模型都可以使用,但本文中的所有代码和原理图将用于uno.。 带有蓝牙的安卓智能手机
检查您的手机是否通过在设置下导航到“无线和网络”具有蓝牙。HC-05蓝牙模块
该模块是那里最受欢迎的蓝牙模块。基本版本非常便宜。必须通过使用a避免必须在模块和arduino之间连接电线的麻烦蓝牙盾牌或蜜蜂形状中的版本,BTBeeA.蜜蜂的盾牌。
设置硬件
要使用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模块
跳线连接到销钉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传感器
下面是用于从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应用程序以及这个应用程序的布局。
程序流程将如上所述。
编辑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());
下载应用程序的源代码
测试应用程序
首先,通过在系统设置的蓝牙选项卡中扫描新设备来配对手机和模块。前面设置的名称应该出现。输入设置的密码(默认是0000或1234)。
在Arduino上电后,您可能会注意到BTBee的状态LED会周期性的闪烁。现在打开应用程序,点击“开始”。状态LED必须熄灭,Conn LED将发光。这表明连接已经建立。
当“T”被发送到Arduino时,它会用温度,湿度和热指数回复。
这是一个简单的使用蓝牙传输数据的展示。注意,如果您不希望使用这里提供的应用程序,也可以使用Arduino蓝牙串行终端应用程序。蓝牙可以用来控制许多日常事务的自动化,如打开灯泡,这可以通过使用一个中继Arduino。这是关于Arduino与Android手机接口的两部分系列文章的最后一部分。第一部分使用串行电缆可以找到这里。
为自己提供这个项目!得到bom。
当我尝试编译应用程序时,它的Gradle说:
错误:(1,0)包含id'com.android.application的插件。找不到。
打开的文件