通过蓝牙/Android/Arduino 连接东西
组件和用品
| × | 1 | ||||
| × | 1 |
应用和在线服务
| ||||
|
关于这个项目
一个非常好的无线局域网(和个人)网络无疑是蓝牙(BT)。今天在我们的日常生活中,经常会发现我们使用手机、音响、相机等,借助著名的“蓝色小灯”相互连接。
在物联网和自动化的世界中,使用 BT 技术通过手机进行远程控制是很常见的。这是由于两个基本组成部分,但非常重要:
- 适用于 ANDROID 应用的简单开发平台(如 MIT AppInventor2)和
- 经济实惠的 BT 模块(如 HC-06)
在本教程中,我将开发一些关于通过移动设备控制 Arduino 输出的想法,以便移动机器人、打开房子的灯等。
第 1 步:蓝牙模块和 Arduino 图>
在市场上很常见“主从”BT 3.0 模块为 HC-05,“从”模块为 HC-06。最近,出现了采用 BT 4.0 或 BLE(“蓝牙低功耗”)技术的 HC-08 和 HC-10。 BLE 模块是唯一可以连接到 iPhone 的模块,因为遗憾的是 Apple 不提供对 BT 3.0 的支持。
对于这里讨论的项目,我将使用非常流行且便宜的 HC-06(再见,再见,iPhone!Android 是这里的王者!)。例如,BT 模块由 5V 供电,这使其可以轻松连接到 Arduino UNO。他的发送 (Tx) 和接收 (Rx) 引脚可以直接连接到 UNO,无需我们在 ESP8266 的情况下看到的分压器。通常 HC-06 应直接连接到引脚 0 和 1 Arduino(“串行 0”):
- HC06-Tx 至 Arduino 引脚 0 (Rx)
- HC06-Rx 至 Arduino 引脚 1 (Tx)
当使用“串行 0”输入(UNO 唯一的硬件串行端口)时,记住 HC-06 在程序加载期间可能没有物理连接到引脚 0 和 1 非常重要,因为 USB 端口也使用同系列。解决这个小问题的一个简单方法(如果您的项目不使用很多 GPIO UNO)是通过库 SoftwareSerial 使用“SW 串行端口”。在我们这里的例子中,我们将使用 UNO 的引脚 10 和 11(分别为 Tx、Rx)。
第 2 步:测试和配置 HC-06
下一步将编写一个简单的代码来测试、编程和初始化 HC-O6:首先,包括库软件序列,将“BT”变量设置为新的串行端口。
#include SoftwareSerial BT (10, 11); // RX, TXString 命令 =""; // 存储蓝牙设备的响应void setup (){ Serial.begin (9600); Serial.println("键入 AT 命令"); BT.开始(9600); // HC-06 通常默认波特率}
然后是代码主体,它只是等待来自 BT 的数据。到达时,数据被写入串行监视器。同样,AT命令可以从串口监视器发送到HC-06模块。
void loop (){ if (BT.available ()) // 如果可用则接收数据。 { while (BT.available ()) // “保持接收”。 { 延迟 (10); // 添加延迟以使事情稳定 char c =BT.read(); // 进行串行读命令 + =c; // 构建字符串。 Serial.println(命令);命令 =""; // 不重复 } if (Serial.available ()) { delay (10); BT.write(Serial.read()); }}
加载程序后,使用串行监视器进行一些基本测试,例如:
- 发送“AT”,模块应响应“OK”。
- 询问固件版本:“T+VERSION”,模块必须响应,例如:“linvorV1.8”。
- 使用 HC-06,您可以为模块定义一个名称,例如:“The T + NAMEMJRoBot_BT_HC06”。但与其他模块不同的是,您无法知道为模块设置的名称是什么。当发送前一个命令时,HC-06 简单地回答:“OKsetname”。
一般来说,HC-O6标配密码(或PIN):1234。您可以用AT命令设置一个新的:
- AT + PIN xxxx,其中“xxxx”将是 4 个数字。
下面是用于 HC-06 测试的 Arduino 代码:
F08H931IL8LGG7U.ino
第 3 步:Android 设备 图> 图> 图>
行!模块连接到 UNO 并运行。是时候介绍Android设备了。
谷歌商店里有很多应用程序可以使用。我将使用我使用 MIT Application2 工具开发并在 Google 商店免费提供的应用程序:MJRoBot BT 数字模拟语音控制
该应用程序发送数字命令(通过按钮或语音)和模拟命令来控制 PWM 设备,如舵机(发送范围为 0 到 255 的数据)。
- 下载应用程序
- 转到 Android 设备设置并查找 BT 模块并建立连接(输入 PIN 1234 或您定义的任何其他密码)。这应该完成一次,因为设备将保留连接数据。
- 设备和 HC-06 通话后,启动应用程序。第二次启动应用程序时,BT模块应自动连接。
- 选择模块名称(在我的例子中是末尾带有 HC-06 的模块名称)。
然后应用程序将显示“已连接”,通知它已与 HC-06“配对”。此时,测试应用程序按钮并在您的 PC 串行监视器上观察应用程序发送的数据。例如,对 4 个设备依次按下“ON”和“OFF”按钮,结果将是:
dev1ondev1offdev2ondev2offdev3ondev3offdev4ondev4off
现在我们有一个 Android 应用程序与 BT 模块对话,让我们创建一些有用的东西!
第 4 步:控制 Arduino 输出。
让我们构建如上图所示的电路。这个想法是使用应用程序来打开和关闭 LED 并控制它们的强度。
连接:
- 设备 1:“dev1on / dev1off” ==> LED 红色 ==> 引脚 3 UNO
- 设备 2:“dev2on / dev2off” ==> LED 黄色 ==> 引脚 5 UNO
- 设备 3:“dev3on / dev3off” ==> LED 绿色 ==> 引脚 6 UNO
- 设备 4:“dev4on / dev4off” ==> LED 蓝色 ==> 引脚 9 UNO
也就是说,要触发与“Device 1”按钮相关的“ON”,文本消息“dev1on”将被发送到Arduino。收到此消息后,红色 LED 应亮起,依此类推。
请注意,这 4 个引脚是能够产生 PWM 的引脚(并非所有 UNO 数字引脚都可以做到。寻找带有“~”的那些市场 ”。这对于在应用程序中使用“滑块”很重要,发送数字数据以通过 PWM 控制 LED 的强度:
- Dev A0:“r / 0-255” ==> LED 红色 ==> 引脚 3 UNO
- Dev A1:“y / 0-255” ==> LED 黄色 ==> 引脚 5 UNO
- Dev A2:“g / 0-255” ==> LED 绿色 ==> 引脚 6 UNO
- Dev A3:“b / 0-255” ==> LED 蓝色 ==> 引脚 9 UNO
对于滑块,在 PWM 数据值(0 到 255)之前,会向 Arduino 发送一个字符,通知它“滑块”命令即将到来。
在下面的视频中,演示了上面程序(按钮和滑块)的部分:
在完整的 Arduino 代码下方:
FA44NBUIL8LGGAY.ino
第 5 步:通过语音命令控制 IoT 设备
对于物联网设备控制,语音是当今的趋势。使用 Arduino / HC-06 / Android 获得这种类型的控制非常简单。 Android 设备已经由“工厂”提供了此功能。在我开发的应用程序中,添加了一个按钮,使 Android“听”命令并以文本格式发送 到 Arduino。该代码负责“读取”出现的字符串。
我在代码中添加了一些示例。例如,当 Arduino 收到“连接电视”命令时,绿色 LED(对应于设备 3)亮起(而不是 LED,您可以有一个连接电视的继电器)。
您应该使用您的语言中的命令更改代码循环部分中的字符串。我使用葡萄牙语,因为它是我的母语,由于我的英语口音不同,因此在 Google 更容易管理。您应该在那里使用短句或仅使用单词。重要的是您编写的内容与 Google 语音识别应用返回的内容完美匹配。
在这里您可以找到可直接在 MIT AppInventor2 上运行的 .aia 文件的链接。在下面的视频中,语音控制的一个小演示:
第 6 步:结论
好吧,我相信通过本教程,您可以实现使用 BT / Android / Arduino 控制“事物”的巨大潜力。一如既往,我希望这个项目可以帮助其他人在激动人心的电子世界中找到自己的道路、机器人和物联网!更多项目请访问我的博客:MJRoBot.org
来自世界南方的问候!
我们下个教程见!
谢谢
马塞洛
代码
- 代码片段 #1
- 代码片段#2
- 代码片段 #3
代码片段 #1纯文本
#includeSoftwareSerial BT (10, 11); // RX, TXString 命令 =""; // 存储蓝牙设备的响应void setup (){ Serial.begin (9600); Serial.println("键入 AT 命令"); BT.开始(9600); // HC-06 通常默认波特率}
代码片段#2纯文本
void loop (){ if (BT.available ()) // 如果可用则接收数据。 { while (BT.available ()) // “保持接收”。 { 延迟 (10); // 添加延迟以使事情稳定 char c =BT.read(); // 进行串行读命令 + =c; // 构建字符串。 Serial.println(命令);命令 =""; // 不重复 } if (Serial.available ()) { delay (10); BT.write(Serial.read()); }}
代码片段 #3纯文本
dev1ondev1offdev2ondev2offdev3ondev3offdev4ondev4off
制造工艺
- 通过蓝牙控制的树莓派机器人
- 通过 Arduino 对 Atmel AT89 系列进行编程
- 使用 Arduino、1Sheeld 和 Android 的通用远程控制
- 使用 Raspberry Motor Shield 的 Android 控制玩具
- Arduino 带蓝牙控制 LED!
- 带有 OK Google 的蓝牙语音控制设备
- Arduino - 通过串口向 Web 发送温度
- 通过英特尔居里的运动敏感电路控制
- 从 iOS 和 Android 在 Arduino 上闪烁 LED
- Arduino Uno + 电子设备(灯泡)+ Android 手机
- 使用 Android 应用程序控制 Arduino 机械臂
- 带有滚动文本的 Arduino 蓝牙控制矩阵