Вопрос

Как подключить 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

Первая ссылка стала для меня большим прорывом.Надеюсь, это вам поможет.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top