如何将DF机器人蓝牙模块连接到Arduino,以便Arduino可以与之通信。
我使用this tutorial。
我设法让模块上的指示灯闪烁,似乎能够很好地配对,但是当我运行串行监视器并发送一封信(比如说'H')时,我会得到一个Java错误:
java.io.IOException: Bad file descriptor in nativeDrain
at gnu.io.RXTXPort.nativeDrain(Native Method)
at gnu.io.RXTXPort$SerialOutputStream.flush(RXTXPort.java:1201)
at processing.app.Serial.write(Serial.java:470)
at processing.app.Serial.write(Serial.java:492)
at processing.app.SerialMonitor.send(SerialMonitor.java:128)
at processing.app.SerialMonitor.access$100(SerialMonitor.java:29)
at processing.app.SerialMonitor$4.actionPerformed(SerialMonitor.java:82)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
我检查了接线,我有RXD到板上的RX(引脚0)和TXD到TX(引脚1),其余的接线,但仍然没有运气。可能是什么事?
这是我在Arduino上的代码:
int ledpin = 13;
char val;
void setup() {
pinMode(ledpin, OUTPUT); // pin 48 (on-board LED) as OUTPUT
Serial.begin(9600); // start serial communication at 9600bps
}
void loop() {
if( Serial.available() ) { // if data is available to read
val = Serial.read(); // read it and store it in 'val'
}
if( val == 'H' ) { // if 'H' was received
digitalWrite(ledpin, HIGH); // turn ON the LED
} else {
digitalWrite(ledpin, LOW); // otherwise turn it OFF
}
delay(100); // wait 100ms for next reading
}
答案 0 :(得分:1)
尝试将RXTX库升级到最新版本。 IIRC Arduino IDE捆绑了它的一个版本。
答案 1 :(得分:1)
这是一个很长的镜头,但是......
链接教程中的示例使用波特率115200(而不是您的示例中使用的9600)并说:
检查串口设置!确保 两者的波特率均设置为115200 主人和奴隶。
可能是:
答案 2 :(得分:1)
Arduino /蓝牙模块的笨拙电源可能会导致此错误(即它可能与this Arduino Forum Topic中报告的错误有关。)
答案 3 :(得分:1)
您应该将Rx从蓝牙模块连接到Arduino板上的Tx,反之亦然。或者你已经这样做了吗?将其挂在12 V适配器电源上,以确保电源不是问题。 (一个500 mA应该没问题。)
答案 4 :(得分:1)
我看到两个可能的问题。
第一个可能的问题:
您的接线错误或者说您的接线错误。通常,您将来自BT模块的RX连接到Arduino上的TX和BT上的TX连接到Arduino上的RX。
第二个可能的问题:
您无法连接蓝牙模块,然后使用内置串行监视器应用程序来监控Arduino上的串行端口。我不确定你的硬件,但通常你不能连接它们,因为它们是同一个串口。
断开Arduino与PC的连接。从其他来源启动Arduino。将PC连接到BT模块。在PC上运行您的fav TTY应用程序(tera术语很好)并连接到BT模块COM端口并输入“H”。
让我知道你得到了什么!
答案 5 :(得分:0)
我在通过串口建立从PC到GSM Modem的通信方面遇到了类似的麻烦。我第一次在vista上使用java.comm,这是不可能的。后来,我切换到RxTxComm,它更可靠。请改用它。
答案 6 :(得分:0)
我正在使用我的Arduino蓝牙伴侣银,以下链接是我用来管理蓝牙通信的。
http://rxtx.qbang.org/wiki/index.php/Two_way_communcation_with_the_serial_port
我必须从这里导入RXTX库:
http://rxtx.qbang.org/wiki/index.php/Two_way_communcation_with_the_serial_port
与其他用户所说的一样,使用波特率115200,并连接
蓝牙-RX线 - > Arduino-TX线,
蓝牙-TX线 - > Arduino-RX线
第一个环节对我来说是一个重大突破。希望它可以帮到你。