告诉蓝牙模块何时连接到 Arduino
Posted
技术标签:
【中文标题】告诉蓝牙模块何时连接到 Arduino【英文标题】:Tell when Bluetooth module connects on Arduino 【发布时间】:2013-04-06 23:50:23 【问题描述】:我正在使用 android 和 Arduino 开展一个项目,并试图弄清楚 Arduino 端如何判断蓝牙是否已连接。
我正在使用其中一个Bluetooth Modules 进行连接。我知道我可以通过 Android 发送命令,但我试图在他们连接时自动执行操作,并且尽可能不必在 Android 上运行后台应用程序。
【问题讨论】:
【参考方案1】:使用提供的模块,没有别的你不能:注意模块有四个连接器:
电源 (Vcc) 地面 Tx(发送) Rx(接收)鉴于此接口,确定蓝牙模块是否已配对的唯一方法是向配对设备发送一些内容并让它以您的 Arduino 知道它已连接的方式进行响应。例如,如果您的 Android 程序在收到字符串 "Hello?"
时总是以 "Hi there!"
响应,那么通过 seingin "Hello?"
您的 Arduino 将知道它与您的 Android 手机/平板电脑配对。您的 Arduino 可以每分钟(或每五秒)轮询(发送询问字符串)以查看它是否与您的设备配对。
有一种更好的方法,但需要您进行一些焊接。如果您的模块基于 HC-03/HC-05,则 PIO9 引脚是“配对指示灯 LED”(参见数据表 here)。您可以将该引脚连接到 Arduino 输入引脚并读取电平:读取数字 1
表示设备已配对,而读取数字 0
表示未配对。尽管不确定,但您模块上标有STATE
的引脚可能正是这种引脚,即它表示配对状态。很遗憾。此引脚未连接到接头,因此您必须将电线焊接到正确的焊盘上才能将其连接到您的 Arduino。您应该首先通过在电压模式下将万用表连接到该焊盘来测试它,并在配对和非配对状态下测量该焊盘和地之间的电位。如果这是响应配对状态的引脚,那么您就是黄金。可能是它指示电源(如 HC-03/05 PIO8
开启时会闪烁)。如果事实证明STATE
引脚不是配对状态,那么您应该向供应商索取数据表,并使用它来查找状态 LED 连接:可能存在一个。找到正确的焊盘后,再次使用电压表验证其功能。然后将电线焊接到该连接并从您的 Arduino 读取它。
重要提示:确保您的 Arduino从不在连接到蓝牙模块状态引脚的 Arduino 引脚上输出数字 1
:这些蓝牙模块在 3.3 上运行V,并将任何未受保护的引脚连接到 5V 都会损坏。 Vcc 和 Txd 引脚在您购买的模块中是电压偏移的,但 LED/状态线可能不是。因此,如果连接到蓝牙模块上“状态”的 Arduino 引脚被配置为输出并且你 digitalWrite(HIGH)
到它,你可能会损坏蓝牙模块。
【讨论】:
感谢您的回复,这就是我之前尝试的方法,即使在数据表中所有引脚都匹配,但 PIO9 引脚没有任何输出。我认为我拥有的模块是 HC-04/HC-06。你不会知道在哪里可以买到 HC-05 吧? 我认为在 Ebay 上出售的大多数最便宜的是那些,还有来自 DX 的 this one,但是它们出售时没有 5->3.3 电压转换器,所以你必须提供。也可以搜索 HC-04/HC-06 数据表,看看你能找到什么?【参考方案2】:不幸的是,HC-05
在配对时会切换状态,但在实际连接到某物之前不会输出 1。
例如,我可以取消手机与HC-05
的配对,再次配对,然后LED会改变状态,但STATE引脚的输出仍然是0。如果我打开一个应用程序,并连接到设备手动然后 LED 和状态引脚将改变状态。 LED 将周期性闪烁两次,并且 STATE 引脚向 Arduino 输出 1。
如果您想读取 STATE 引脚的值,请将电线连接到 arduino 的任何输入,并将代码 Serial.println(digitalRead(inputPin));
inputPin
编码为 Arduino 输入的电线。
我已经和这个东西斗争了几个月,但还没有找到一种方法让这个东西自动连接到我的手机。它甚至不允许我从手机连接到HC-05
,除非我将应用程序下载到我的 Android 上。可以将HC-05
绑定到某个地址,但即使这样对我也不起作用。我想弄乱"AT+CLASS"
命令,但是该指令背后的文档到目前为止一直阻碍着我。
【讨论】:
【参考方案3】:从 HC-05 数据表中,我们看到连接状态取决于 PI09 的输出。显然发送“AT+BIND?”到模块会以表格形式返回 PI08 & PI09 的状态, "+ POLAR=PI08,PI09" 但这对我来说毫无意义,因为要获得这个,您必须进入 AT 模式,进入 AT 模式会中断配对连接,因此它总是会发送标记为“未连接”的 PI09。
因此,为了从 arduinos POV 查看连接是否仍然有效,我只能看到 2 种可行的方法:
对 arduino 进行编程,每隔一段时间发送一个“你好?”如果它没有收到预期的“Hi back”响应,则假定它没有连接。 将 PI09 连接到 arduino 输入引脚,并在您想要检查连接是否处于活动状态时读取它的值【讨论】:
【参考方案4】:AT+STATE?
将返回连接的当前状态。是的,您需要进入模式,这是通过将 HC05 模块上的引脚 11 拉高来完成的。它确实需要焊接,但它有点值得。然后它允许对设备进行完全 AT 控制,然后将其设置为 LOW 以使其返回正常工作模式。
另一个我不完全理解的选项是AT+MPIO?
命令,它以我还不理解的某种奇怪的屏蔽格式返回所有引脚的状态。
我使用上面的第一个选项,这样我就可以从我的手机终端(蓝牙)到 HC05 并打开 HC05 上的 LED/继电器等(即,将引脚 2 拉到高电平)。这需要进入 AT 模式(pin 11 HIGH),发送命令AT+PIO=2,1
,然后将 pin 11 设置为 LOW 以返回正常工作模式。
注意:我注意到我必须在高、AT 和 LOW 命令之间设置 200 毫秒的延迟。 Angela 的解决方案很好 - 我使用便宜的 XBEE 蓝牙模块 (HC-05 Bluetooth Bee Master & Slave Module with Bluetooth XBee for Arduino uk2015) 2 个单元 (HC05/6) 用于 5Stg,它们以 XBEE 格式布局 - 对于 3.3v 来说很方便。
【讨论】:
以上是关于告诉蓝牙模块何时连接到 Arduino的主要内容,如果未能解决你的问题,请参考以下文章
如何将 Android 应用程序正确连接到支持蓝牙的 Arduino 微控制器上的 RFCOMM 插座?