我正在使用 Android 和 Arduino 开展一个项目,并试图弄清楚 Arduino 端如何判断蓝牙是否已连接。
我正在使用这些蓝牙模块之一进行连接。我知道我可以通过 Android 发送命令,但我试图在他们连接时自动执行操作,如果可能的话,不必在 Android 上运行后台应用程序。
使用提供的模块,您不能:请注意该模块有四个连接器:
鉴于此接口,确定蓝牙模块是否配对的唯一方法是将某些内容发送到配对的设备并让它以您的 Arduino 知道它已连接的方式进行响应。例如,如果您的 Android 程序"Hi there!"
在收到 string 时总是响应"Hello?"
,那么通过 seingin"Hello?"
您的 Arduino 将知道它与您的 Android 手机/平板电脑配对。您的 Arduino 可以每分钟(或每五秒)轮询(发送询问字符串)以查看它是否与您的设备配对。
有一种更好的方法,但它需要您进行一些焊接。如果您的模块基于 HC-03/HC-05,则 PIO9 引脚是“配对指示灯 LED”(请参阅此处的数据表)。您可以将该引脚连接到 Arduino 输入引脚并读取电平:读取数字1
表示设备已配对,而读取数字0
表示未配对。有可能(尽管不确定)模块上的引脚标记为STATE
正是这种引脚,即表示配对状态。很遗憾。此引脚未连接到接头,因此您必须将电线焊接到正确的焊盘上才能将其连接到您的 Arduino。您应该首先通过在电压模式下将万用表连接到该焊盘来测试它,并在配对和非配对状态下测量该焊盘和地之间的电位。如果这是响应配对状态的引脚,那么您就是黄金。可能是它指示电源(就像 HC-03/05PIO8
在打开时会闪烁)。如果事实证明STATE
pin 不是配对状态,那么您应该向供应商索取数据表,并使用它来查找状态 LED 连接:可能存在一个。找到正确的焊盘后,再次使用电压表验证其功能。然后将电线焊接到该连接并从您的 Arduino 读取它。
重要提示:确保您的 Arduino永远不会在连接到蓝牙模块状态引脚的 Arduino 引脚上输出数字1
:这些蓝牙模块在 3.3V 上运行,将任何未受保护的引脚连接到 5V 都会损坏。Vcc 和 Txd 引脚在您购买的模块中发生了电压偏移,但 LED/状态线可能不是。因此,如果连接到蓝牙模块上“状态”的 Arduino 引脚被配置为输出并且您digitalWrite(HIGH)
使用它,您可能会损坏蓝牙模块。
从 HC-05 数据表中,我们看到连接状态取决于 PI09 的输出。显然发送“AT+BIND?” 到模块将以“+ POLAR=PI08,PI09”的形式返回 PI08 和 PI09 的状态,但这对我来说毫无意义,因为要获得此信息,您必须进入 AT 模式,进入 AT 模式会中断配对连接,因此它将始终发送标记为“未连接”的 PI09。
因此,为了从 arduinos POV 查看连接是否仍然有效,我只能看到 2 种可行的方法:
不幸的是,HC-05
配对时会切换状态,但在实际连接到某物之前不会输出 1。
例如,我可以取消手机与 的HC-05
配对,再次配对,然后 LED 会改变状态,但 STATE 引脚的输出仍然为 0。如果我打开一个应用程序,并手动连接到设备,然后 LED,和状态引脚将改变状态。LED 将定期闪烁两次,并且 STATE 引脚向 Arduino 输出 1。
如果您想读取状态引脚的值,请将电线连接到 arduino 的任何输入,并将代码连接到 ArduinoSerial.println(digitalRead(inputPin));
inputPin
的输入。
我已经和这个东西斗争了几个月,还没有找到一种方法让这个东西自动连接到我的手机。它甚至不允许我从我的手机连接到它,HC-05
除非我将应用程序下载到我的 Android 上。可以将 绑定HC-05
到某个地址,但即使这对我也不起作用。我想弄乱"AT+CLASS"
命令,但指令背后的文档到目前为止阻碍了我。
AT+STATE?
将返回连接的当前状态。是的,您需要进入模式,这是通过将 HC05 模块上的引脚 11 拉高来完成的。它确实需要焊接,但它有点值得。然后它允许对设备进行完全 AT 控制,然后将其设置为低电平以使其返回正常工作模式。
另一个我不完全理解的选项是AT+MPIO?
命令,它以我还不理解的一些奇怪的屏蔽格式返回所有引脚的状态。
我使用上面的第一个选项,这样我就可以从我的手机终端(蓝牙)到 HC05 并打开 HC05 上的 LED/继电器等(即,将引脚 2 调至高电平)。这需要进入 AT 模式(引脚 11 高电平),发送命令AT+PIO=2,1
,然后将引脚 11 设置为低电平以返回正常工作模式。
注意:我注意到我必须在 high 和 AT 和 LOW 命令之间放置 200 毫秒的延迟。安吉拉的解决方案很好——我使用了一个便宜的 XBEE 蓝牙模块(HC-05 蓝牙蜂主从模块和蓝牙 XBee 用于 Arduino uk2015) 2 个单元(HC05/6)用于 5Stg,它们以 XBEE 格式布局——方便 3.3五。