मैं लिनक्स पर ब्लूटूथ सीरियल पोर्ट से डेटा कैसे कनेक्ट और भेज सकता हूं?


30

मैं एक वर्चुअल सीरियल पोर्ट सेटअप करने की कोशिश कर रहा हूं, हालांकि लिनक्स पर एक यूएसबी-ब्लूटूथ एडॉप्टर और एंड्रॉइड डिवाइस के माध्यम से एक संदेश भेजना है। मैं कर्नेल 3.6 पर हूं। मैं ग्नोम-ब्लूटूथ का सफलतापूर्वक उपयोग करके डिवाइस में जोड़ी बना सकता हूं और इसके लिए फाइल भेजने में भी सक्षम हूं।

सीरियल पोर्ट सेट करने के लिए मैं पहली बार अपने एडेप्टर में SP प्रोफाइल वाला चैनल जोड़ता हूं:

sdptool add --channel=22 SP

तब मैं rfcomm के साथ 'सुनो' कहता हूं:

rfcomm listen /dev/rfcomm0 22

जो ब्लॉक करता है

Waiting for connection on channel 22

जाहिरा तौर पर rfcomm एक सफल कनेक्शन पर / dev / rfcomm0 बनाएगा। एक बार ऐसा होने के बाद, मैं कनेक्ट डिवाइस पर आगे और पीछे संदेश भेजने के लिए कटक जैसी चीज़ का उपयोग करना चाहूंगा।

अपने एंड्रॉइड डिवाइस पर मैं एक ब्लूटूथ एसपीपी टर्मिनल खोलता हूं (वहां कई हैं, मैंने कुछ अलग तरीके से कोशिश की) और कनेक्ट करने का प्रयास किया। वे सभी असफल हो जाते हैं।

यह देखते हुए कि मैं सफलतापूर्वक जोड़ी बना सकता हूं और बिना किसी समस्या के फाइलें भेज सकता हूं, मुझे पता है कि ब्लूटूथ जोड़ी और संचार काम करता है।

मुझे यकीन नहीं है कि मैं और क्या कोशिश कर सकता हूं। मैंने अपने स्थानीय डिवाइस और एंड्रॉइड डिवाइस पर 'sdptool Browse' का इस्तेमाल यह सुनिश्चित करने के लिए किया कि कोई RFCOMM चैनल टकराव न हो।

जवाबों:


21

मुझे लगता है कि यह काम अब मिल गया है। ब्लूटूथ थोड़ा नकचढ़ा लगता है। यदि कोई व्यक्ति इसे उपयोगी पाता है, तो मैं अपने कदम पूरी तरह से हटा रहा हूं (हालाँकि इसकी शुरुआत में मैंने बहुत कोशिश की थी)। यह नेक्सस 4 और आर्क लिनक्स 3.6.7-1 पर एंड्रॉइड जेबी (4.2.2) के लिए है, जिसमें गनोम 3.6 (डब्ल्यू / सूक्ति-ब्लूटूथ) पर ब्लूज़ 4.101 है।

(यह कदम उपयोगी कुछ भी नहीं कर सकता है) एंड्रॉइड पर ब्लूटूथ चालू करें और अपने लिनक्स मशीन से अपने यूएसबी / ब्लूटूथ एडाप्टर को डिस्कनेक्ट करें (या यदि आपके पास एक निर्मित है, तो इसे hcitool devname रीसेट का उपयोग करके रीसेट करें)

कनेक्ट करें / लिनक्स पर अपने ब्लूटूथ एडाप्टर को चालू करें। सुनिश्चित करें कि आपका एडेप्टर दिखाई दे रहा है (ग्नोम-ब्लूटूथ में सेट किया जा सकता है - आपको एक ब्लूटूथ सिस्टम ट्रे आइकन देखना चाहिए)।

अपने Android डिवाइस पर ब्लूटूथ चालू करें। एडॉप्टर में जोड़ी के लिए एंड्रॉइड का उपयोग करें (मैं लिनक्स से दूसरे तरीके से जोड़ी करने में असमर्थ था)। एक डायलॉग आएगा जो आपसे एक चाबी मांगेगा। आप जो भी पिन चाहते हैं, उसमें डालें। सूक्ति आपको एक कुंजी के लिए पूछ रही एक अधिसूचना को पॉप अप करना चाहिए; पहले दर्ज किए गए उसी पिन में डालें। आपके एंड्रॉइड डिवाइस और कुंजी को इस बिंदु पर जोड़ा जाना चाहिए।

लिनक्स में, एक टर्मिनल खोलें और चेक करें कि ब्लूटूथ सेवाएं किस टाइप में उपलब्ध हैं

sdptool browse local

यदि आपके पास पहले से ही एक सीरियल पोर्ट सेवा है, तो ध्यान दें कि यह किस चैनल का है। यदि आप नहीं करते हैं, तो आप सेवा को जोड़ सकते हैं:

sdptool add --channel=22 SP

अब इस चैनल पर rfcomm का उपयोग करके सुनें:

sudo rfcomm listen /dev/rfcomm0 22

rfcomm ब्लॉक करेगा, जैसे संदेश के साथ कनेक्शन के लिए सुनना

Waiting for connection on channel 22

Android पर वापस, मैंने BlueTerm एप्लिकेशन ( http://pymasde.es/blueterm/ , Google play store पर भी स्वतंत्र रूप से उपलब्ध है) का उपयोग किया, हालांकि किसी भी समान एप्लिकेशन को काम करना चाहिए। BlueTerm खोलें, विकल्प> कनेक्ट डिवाइस पर जाएं: युग्मित एडाप्टर का चयन करें।

उम्मीद है, आवेदन कनेक्ट करने में सक्षम था। आप टर्मिनल में अतिरिक्त सत्यापन देखेंगे जहाँ आपने एक संदेश के साथ सुनना अवरुद्ध किया है:

Waiting for connection on channel 22
Connection from 22:22:22:22:22:22 to /dev/rfcomm0
Press CTRL-C for hangup

BlueTerm ऐप में आप जो कुछ भी लिखते हैं, वह / dev / rfcomm0 पर जाना चाहिए। आप एक नया टर्मिनल खोलकर और कुछ ऐसा करते हुए सामान दिखा सकते हैं:

cat /dev/rfcomm0

1
अच्छा उत्तर। मुझे यह Ubuntu 16 / Bluez 5 और इस जानकारी के साथ काम करने में मिला: bbs.archlinux.org/viewtopic.php?id=201672
wojciii

10

मेरे लिए काम करने वाले कदम

सबसे पहले आपको डिवाइसेस को पेयर करना होगा। जोड़ी बनाना अपेक्षाकृत आसान है। मैं क्लाइंट (जो बात करना शुरू करता है) और सर्वर (जो जवाब देता है) को कॉल करूंगा

आपको सर्वर को पहले सेट करना होगा: सर्वर साइड (रूट के रूप में):

sdptool add --channel=3 SP
mknod -m 666 /dev/rfcomm0 c 216 0
rfcomm watch /dev/rfcomm0 3 /sbin/agetty rfcomm0 115200 linux

ग्राहक पक्ष (रूट के रूप में):

sdptool add --channel=3 SP
rfcomm connect /dev/rfcomm0 [SERVER_ADDR] 3

अब क्लाइंट पर एक सीरियल टर्मिनल खोलने के लिए:

screen /dev/rfcomm0 115200

टिप्पणियाँ:

जब आप अंतिम कमांड rfcomm कनेक्ट ... क्लाइंट में कॉल करते हैं, तो एक डिवाइस /dev/rfcomm0बनाया जाएगा और सर्वर से जुड़ा होगा /dev/recomm0। यह दोनों के बीच सीरियल लिंक का प्रतिनिधित्व करता है

अंतिम सर्वर कमांड: rfcomm watch.... आने वाले कनेक्शन के लिए 'सुनेगा'। खोए हुए संबंध में, कमांड एक नया 'सुनो' राज्य पुनः आरंभ करेगा।


1
इस्माईया द्वारा प्रदान किया गया उत्तर आपको लगभग वहीं मिलता है। आपको याद रखना होगा कि नए ब्लूज़ स्टैक को विशेष --compatविकल्प की आवश्यकता है , अन्यथा एसपी जोड़ने में विफल हो सकता है। देखें यहाँ । तो अपने systemd / initd स्टार्टअप स्टार्टअप स्क्रिप्ट को समायोजित / संशोधित करें ताकि --compatवहां हो।
ब्लैकटॉफू

5

मैंने प्रिस की आज्ञाओं में थोड़े बदलाव के साथ इसे हल किया। अगर किसी को अभी भी rfcomm कनेक्शन स्थापित करने में समस्या आ रही है, तो उन्हें एक शॉट दें।

sudo service bluetooth restart

यह ^ सुनिश्चित करता है कि आप हर बार क्लीन स्लेट के साथ शुरुआत कर रहे हैं जो आप एक कनेक्शन सेटअप करने का प्रयास करते हैं।

rfcomm add --channel=<a_channel_#> SP

यह चैनल नंबर वर्तमान में असाइन किए गए किसी भी चैनल से अलग होना चाहिए।

(वैकल्पिक) चैनलों की जांच करने के लिए:

sdptool browse local | grep Channel

मुझे यकीन नहीं है कि इस अगले आदेश की आवश्यकता क्यों है, लेकिन इसने मेरे लिए काम किया।

rfcomm release 0

तब incomming कनेक्शन के लिए सुनने के लिए:

rfcomm watch 0 <a_channel_#>

ध्यान दें: /etc/blu ब्लूटूथ/rfcomm.conf में bt MAC एड्रेस लेकिन आपके फोन का bt MAC हो। इस फाइल में चैनल भी वैसा ही होना चाहिए जैसा कि a_channel_ # के लिए चुना गया हो।

एक बार जब मैंने यह सब किया, तो मैंने यह सब जांचने के लिए अपने फोन पर एक बीटी टर्मिनल एमुलेटर का इस्तेमाल किया।


0

मैंने अलग-अलग ब्लूटूथ टूल्स की कोशिश की है और ब्लूटूथ मॉड्यूल के साथ डेटा को कनेक्ट करने और एक्सचेंज करने के लिए कमांड का सही क्रम खोजना कठिन है। Rfcomm और minicom का उपयोग करने का प्रयास करें:

यह मेरा /etc/bluaxy/rfcomm.conf है

rfcomm0 {
  # Automatically bind the device at startup
  bind no;
  # Bluetooth address of the device
  device 11:22:33:44:55:66;
  # RFCOMM channel for the connection
  channel 3;
  # Description of the connection
  comment "This is Device 1's serial port.";
}

ब्लूटूथ उपकरणों के लिए स्कैन करें:

hcitool scan
Scanning ...
    20:15:12:08:62:95   HC-06

Rfcomm का उपयोग करके बाइंड करें

sudo rfcomm bind 0 20:15:12:08:62:95 1

NB: बाइंड 0 डिवाइस संख्या 0 (rfcomm0) को संदर्भित करता है और 1 चैनल है।

फिर सूडो के साथ मिनिकॉम का उपयोग करें और एक कॉन्फ़िगरेशन सहेजें जिसमें आप बॉड्रेट और पोर्ट निर्दिष्ट करते हैं। आप यहाँ अधिक informations पा सकते हैं ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.