سؤال

كيف يمكن توصيل وحدة DF Robot Bluetooth بـ Arduino حتى يتمكن Arduino من التواصل معها.

انا إستعملت هذا البرنامج التعليمي.

تمكنت من الحصول على وميض الضوء على الوحدة النمطية ويبدو أنه قادر على الاقتران بشكل جيد ، ولكن عندما أقوم بتشغيل الشاشة التسلسلية وأرسل خطابًا (على سبيل المثال ") والذي يجب أن يدير ضوءًا ، أحصل على خطأ جافا:

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 (PIN 0) على اللوحة و TXD إلى TX (PIN 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. قم بتشغيل تطبيقك المفضل على الكمبيوتر الشخصي (Tera Term لطيف) واتصل بمنفذ COM BT MODULE واكتب "H".

اسمحوا لي أن أعرف ما تحصل عليه!

لقد واجهت مشاكل مماثلة في إنشاء اتصال من جهاز الكمبيوتر إلى مودم GSM عبر المنفذ التسلسلي. كنت أعمل أولاً مع Java.comm على Vista وكان من المستحيل. في وقت لاحق ، انتقلت إلى RXTXCOMM وكان أكثر موثوقية. استخدمه بدلاً من ذلك.

أنا أستخدم Silver Mate Mate Bluetooth مع 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