Взаимодействие Bluetooth-модуля DF Robot с Arduino
Вопрос
Как подключить Bluetooth-модуль DF Robot к Arduino, чтобы Arduino могла с ним взаимодействовать.
я использовал этот урок.
Мне удалось заставить мигать индикатор на модуле, и он, кажется, может нормально выполнить сопряжение, но когда я запускаю последовательный монитор и отправляю букву (скажем, «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
}
Решение
Вполне возможно, что причиной этой ошибки может быть неправильное питание модуля Arduino/Bluetooth (т.это может быть связано с ошибкой, описанной в эта тема на форуме Arduino).
Другие советы
Попробуйте обновить библиотеку RXTX до последней версии.IIRC Arduino IDE поставляется в комплекте с его версией.
Это далекая перспектива, но...
В примере в связанном руководстве используется скорость передачи данных 115200 (а не 9600, используемая в вашем примере) и говорится:
Проверьте настройку серийного номера!Убедитесь, что скорость передачи передачи обозначена 115200 как для Мастера, так и для рабов.
Это может быть и так:
- Это работает только со скоростью передачи данных 115200 (что кажется маловероятным) или, возможно,
- Скорость передачи данных на ведущем и ведомом устройствах не равна 9600.
Вам следует подключить Rx модуля Bluetooth к Tx на плате Arduino и наоборот.Или ты уже это сделал?Подвесьте его к адаптеру питания 12 В, чтобы убедиться, что проблема не в питании.(Один с током 500 мА подойдет.)
Я вижу две возможные проблемы.
Первая возможная проблема:
У вас неправильно подключено или вы неправильно описали проводку.Обычно вы подключаете RX от модуля BT к TX на Arduino, а TX на BT к RX на Arduino.
Вторая возможная проблема:
Вы не можете подключиться к модулю Bluetooth, а затем использовать встроенное приложение последовательного монитора для мониторинга последовательного порта на Arduino.Я не уверен в вашем оборудовании, но обычно вы не можете соединить их оба, поскольку они имеют один и тот же последовательный порт.
Отключите Arduino от ПК.Включите Arduino от другого источника.Подключите ПК к модулю BT.Запустите свое любимое приложение TTY на ПК (термин tera удобен), подключитесь к COM-порту модуля BT и введите «H».
Дайте мне знать, что вы получите!
У меня были аналогичные проблемы при установлении связи между ПК и GSM-модемом через последовательный порт.Я впервые работал с java.comm в Vista, и это было невозможно.Позже я перешел на RxTxComm, и он оказался намного надежнее.Используйте его вместо этого.
Я использую Bluetooth Mate Silver с моим Arduino, и следующая ссылка — это то, что я использовал для управления связью Bluetooth.
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 и подключите
Линия Bluetooth-RX -> линия Arduino-TX и
Линия Bluetooth-TX -> Линия Arduino-RX
Первая ссылка стала для меня большим прорывом.Надеюсь, это вам поможет.