पी 3 पर स्वचालित रूप से ब्लूटूथ कनेक्शन स्वीकार करना


14

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


क्या आप कृपया बता सकते हैं कि आपके पास कौन से पीआई मॉडल है, जैसे कि केवल पी 3 कैरिब है, बाहरी हार्डवेयर के बिना ब्लूटूथ का ई?
मोहम्मद अली

रास्पबेरी पाई 3 मॉडल बी - ब्लूटूथ में निर्मित
ओलिवर कुचीज

तो आप सभी से अपेक्षा करते हैं कि पाई लगातार प्रसारण के लिए और आपके फोन द्वारा किए जा रहे किसी भी युग्मन कनेक्शन को स्वीकार करने के लिए है? आप सुरक्षा निहितार्थ को समझते हैं? सही? और नौकरी को स्वीकार्य समाधान करने के लिए एक छोटा सा पायथन स्क्रिप्ट भी लिख रहा है?
मोहम्मद अली

हां, लेकिन इसे और अधिक सुरक्षित बनाने के लिए मैं सुझाव देता हूं कि रिडाइस्कवर करने से पहले एक कनेक्शन को कैसे सीमित किया जाए। दूसरों की मदद करने के लिए जवाब देने के लिए सुरक्षा निहितार्थ जोड़ने के लिए स्वतंत्र महसूस करें :)
ओलिवर कुचेस

जवाबों:


12

( ध्यान दें कि यह उत्तर अब रास्पियन जेसी के रूप में काम नहीं कर रहा है, क्योंकि ब्लूज़ ने ब्लूटूथ-एजेंट कमांड को हटा दिया है )

इसलिए वर्तमान में आप कहते हैं कि आप पाई से बस ठीक से जुड़ सकते हैं, लेकिन युग्मन प्रक्रिया के लिए एक मॉनिटर की आवश्यकता होती है।

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

लेकिन वैसे भी, जिन आदेशों को आपको पाई के लिए किए जा रहे सभी कनेक्शनों को स्वीकार करने के लिए चलाने की आवश्यकता होगी, उन्हें खोजने योग्य बनाने और एक पूर्वानुमानित पिन सेट करने के लिए नीचे सूचीबद्ध किया गया है:

नोट: आपको hci0 अपने डिवाइस ब्लूटूथ नंबर में शून्य को बदलने की आवश्यकता हो सकती है ।

hciconfig hci0 up
hciconfig hci0 sspmode 1
hciconfig hci0 piscan
sudo bluetooth-agent 1234

अब इन कमांडों को चलाने के बाद और अगर वे उम्मीद के मुताबिक काम करते हैं, तो हम उन्हें आपके पाई के बूट पर शुरू करने के लिए आगे बढ़ा सकते हैं।

  1. हम कमांड चलाकर एक बैश फाइल बनाकर शुरू करते हैं sudo nano mohammadIsAmazing.sh
  2. अब हम उस फ़ाइल में निम्नलिखित दर्ज करते हैं:

    #!/bin/sh
    sleep 20
    hciconfig hci0 up
    hciconfig hci0 sspmode 1
    hciconfig hci0 piscan
    sudo bluetooth-agent 1234
    
  3. अब हम अपनी फाइल को सेव करके बंद कर देते हैं control key and x

  4. हम /etc/rc.localनिम्नलिखित कमांड का उपयोग करके फाइल को खोलते हैं :

    Sudo nano /etc/rc.local
    
  5. अब हम अपनी बैश स्क्रिप्ट को चलाने के लिए कमांड दर्ज करते हैं /etc/rc.local

    sudo /path/to/script/mohammadIsAmazing.sh &
    

    नोट: आपको /etc/rc.local में अंतिम पंक्ति से पहले कमांड को शामिल करना है: exit 0

  6. अब हम उस फ़ाइल को सहेजते हैं और बंद करते हैं, फिर पाई को रिबूट करते हैं।

साइड नोट पर: सुरक्षा बढ़ाने के लिए एक यादृच्छिक पिन चुनना सुनिश्चित करें

दूसरी तरफ ध्यान दें: यदि आप ब्लूटूथ डिवाइस का नाम बदलना चाहते हैं, तो आपको एक फाइल बनाने की आवश्यकता है, /etc/machine-infoजिसमें निम्नलिखित शामिल होने चाहिए:

PRETTY_HOSTNAME=device-name

फिर उसके service bluetooth restartबाद दौड़ें


2
याद रखें कि &में लाइन के अंत पर rc.localफ़ाइल - इसके बिना आरपीआई अपनी स्क्रिप्ट के लिए खोल प्रतीक्षा करता है के रूप में बूटिंग समाप्त नहीं हो सकता है /path/to/script/mohammadIsAmazing.shइससे पहले कि यह जारी है क्रियान्वित खत्म करने के लिए - और अगर यह बूट खत्म नहीं है कि आप करने के लिए सक्षम नहीं होगा sshमें चीजों को ठीक करने के लिए ...!
स्लीवन

हाय मोहम्मद।
सुडो

@ ओलिवर कूचीज apt-get install bluetooth bluezपहले चलने की कोशिश करता है और मुझे बताता है कि क्या आपके लिए काम करता है।
मोहम्मद अली

मैंने दौड़ने की कोशिश की है bluetooth-agentऔर इसे भी नहीं पा सका हूँ। पैकेजों को स्थापित करने से यह ठीक नहीं हुआ।
गिल्ड नामान

@ GiladNaaman अच्छी तरह से क्या ओएस, आप का उपयोग कर रहे हैं?
मोहम्मद अली

0

इस आधार पर कि मैं समझता हूँ कि आपको क्या चाहिए एक गुलाम ब्लूटूथ मॉड्यूल। आप लोकप्रिय HC-06 मॉड्यूल का उपयोग कर सकते हैं और इसे रास्पबेरी पाई से लेवल शिफ्टर के माध्यम से पाई और आरएक्स पिन पर ले जा सकते हैं और धारावाहिक डेटा को पढ़ने के लिए एक पायथन स्क्रिप्ट का उपयोग कर सकते हैं और आवश्यकतानुसार इसे प्रोसेस कर सकते हैं।


मुझे लगता है कि एक अजगर मॉड्यूल होगा जो हार्डवेयर कनेक्ट करने के बजाय एक ब्लूटूथ डिवाइस कनेक्ट होते ही चलाया जा सकता है? मैं अभी भी एक शुरुआत के साथ पाई के साथ जर्जर नहीं हूँ, लेकिन ऐसा लगता है कि यह एक तार्किक दृष्टिकोण होगा
ओलिवर कुचीज

@OliverKuchies मैंने कभी भी लिनक्स पर कोई ब्लूटूथ प्रोग्रामिंग (या उपयोग!) नहीं की है लेकिन आप किसी तरह की डेमॉन सेवा की तलाश में हैं जो इस तरह की चीजों का जवाब देगी। विस्तृत करने के लिए: एक अजगर मॉड्यूल खुद नहीं चलेगा, इसे पहले से चल रही प्रक्रिया द्वारा उपयोग किया जाना है। वह एक डेमॉन है। खोज "ब्लूटूथ लिनक्स डेमॉन" कुछ सामान को चालू करता है। मुझे लगता है कि मैंने देखा है कि आपके systemdपास एक है, आपको विशिष्ट तरीकों से व्यवहार करने के लिए इसे कॉन्फ़िगर करना होगा।
गोल्डीलॉक्स


0

मैं सुरक्षा निहितार्थ पर चर्चा करने जा रहा हूं या नहीं, लेकिन यह है कि मैं यह कैसे कर सकता हूं:

  1. निम्नलिखित सामग्री के साथ auto_connect.sh नामक एक स्क्रिप्ट बनाएँ:
#!/bin/bash
bt-adapter --set Powered 1
bt-adapter --set DiscoverableTimeout 0
bt-adapter --set Discoverable 1
bt-adapter --set PairableTimeout 0
bt-adapter --set Pairable 1
/path/to/python_script.py >/dev/nul 2>dev/nul &
list=""
bt-device -l | grep -E -o '[[:xdigit:]]{2}(:[[:xdigit:]]{2}){5}' | { while read line
do
       list="$list connect $line
"
done
bluetoothctl << EOF
$list
EOF
}
  1. निम्नलिखित सामग्री के साथ फ़ाइल /path/to/python_script.py बनाएँ:
#!/usr/bin/python3

from __future__ import absolute_import, print_function, unicode_literals

#import gobject
from gi.repository import GObject as gobject

import re
import dbus
import dbus.mainloop.glib
import subprocess

relevant_ifaces = [ "org.bluez.Adapter1", "org.bluez.Device1" ]

def property_changed(interface, changed, invalidated, path):
    iface = interface[interface.rfind(".") + 1:]
    for name, value in changed.iteritems():
        val = str(value)
        print("{%s.PropertyChanged} [%s] %s = %s" % (iface, path, name, val))

def interfaces_added(path, interfaces):
    for iface in interfaces:
        if not(iface in relevant_ifaces):
            continue
        try:
            found = re.search('dev\_(..\_..\_..\_..\_..\_..)', path).group(1)
        except AttributeError:
            found = '' # apply your error handling
            mac=found.replace("_",":")
            cmd='echo -e "trust '+mac+' \\nconnect '+mac+' \\nquit" | bluetoothctl'
            subprocess.call(cmd, shell=True)

def interfaces_removed(path, interfaces):
    for iface in interfaces:
        if not(iface in relevant_ifaces):
            continue
        print("{Removed %s} [%s]" % (iface, path))

if __name__ == '__main__':
    dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)

    bus = dbus.SystemBus()

    bus.add_signal_receiver(interfaces_added, bus_name="org.bluez", dbus_interface="org.freedesktop.DBus.ObjectManager", signal_name="InterfacesAdded")

    bus.add_signal_receiver(interfaces_removed, bus_name="org.bluez", dbus_interface="org.freedesktop.DBus.ObjectManager", signal_name="InterfacesRemoved")

    mainloop = gobject.MainLoop()
    mainloop.run()
  1. आपके द्वारा उपयोग किए जा रहे OS के आधार पर सुनिश्चित करें कि आप अपने बूट पर auto_connect.sh चलाते हैं।

यह सब क्या करता है:

  1. डिवाइस को हमेशा खोजे जाने योग्य बनाता है।

  2. जब कोई डिवाइस इसे जोड़ेगा, तो यह स्वचालित रूप से इसे विश्वसनीय डिवाइस पर चिह्नित करेगा और इसे कनेक्ट करेगा।

  3. प्रत्येक बूट पर यह ज्ञात उपकरणों की सूची के माध्यम से पुनरावृत्ति करेगा और उनसे जुड़ने का प्रयास करेगा।

कृपया ध्यान रखें कि यह दृष्टिकोण किसी भी प्रकार की सुरक्षा के खिलाफ सीधे जाता है, लेकिन उपयोगकर्ता मामले हो सकते हैं जब आप इसे प्राप्त करना चाहते हैं।


-1

रास्पबेरी Pi3 मॉडल बी में ब्लूटूथ और वाईफाई में एक bulit है। OBEX सर्वर का उपयोग करके आप हर बार पेयरिंग अनुरोध के बारे में पूछे बिना अन्य उपकरणों से फाइलें प्राप्त कर सकते हैं। आपको पहली बार उस डिवाइस के साथ पेयरिंग करनी है और एक डायरेक्टरी बनाना है, जिसमें फाइलें हर समय प्राप्त होती हैं।

बस नीचे दिए गए लिंक के चरण का पालन करें।

https://www.raspberrypi.org/forums/viewtopic.php?p=963751#p963751


1
क्या आपने प्रश्न पढ़ा है? ओपी विशेष रूप से पूछता है कि मैनुअल युग्मन से कैसे बचें क्योंकि कोई स्क्रीन नहीं होगी, और आप सुझाव देते हैं कि उसे वैसे भी जोड़ी बनाना चाहिए?
दिमित्री ग्रिगोरीव

आपको इसमें केवल एक बार ही पेयरिंग करनी होगी ताकि पहली बार आप पेयरिंग के लिए डिस्प्ले से जुड़ सकें।
मिहिट गांधी

आपको इसे केवल एक बार प्रति डिवाइस करना होगा । और अगर कोई भी नया इस पर प्राप्त करना चाहता है, तो इसका मतलब है कि इसे जहां कहीं भी है, वहां से खोदना और इसे एक मॉनिटर और कीबोर्ड तक हुक करना है, यही कारण है कि वह इससे बचने का एक रास्ता तलाश रहा है।
अलग
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.