คำตอบสั้น ๆ คือใช่สามารถใช้บลูทู ธ ได้โดยไม่ต้องจับคู่ อย่างไรก็ตามมันจะยังคงเป็นลิงก์แบบจุดต่อจุดเสมอ นอกจากนี้ยังมีปัญหาที่อาจเกิดขึ้นกับการไม่ใช้การจับคู่ (ส่วนใหญ่ขาดความปลอดภัยและขาดการสนับสนุนที่ดีสำหรับโหมดการทำงานนี้) ไม่ว่าจะสามารถทำได้ขึ้นอยู่กับฮาร์ดแวร์บลูทู ธ ของผู้รับ ฉันสมมติว่าคุณกำลังใช้บลูทู ธ 'มาตรฐาน' แทนบลูทู ธ พลังงานต่ำ (ซึ่งแตกต่างอย่างสิ้นเชิงและไม่รองรับโทรศัพท์มือถือเป็นพิเศษ) หากคุณกำลังใช้พลังงานต่ำเครื่องส่งสัญญาณของคุณจะเป็นอุปกรณ์ที่ใช้พลังงานต่ำและเครื่องรับของคุณจะเป็นสิ่งที่รับฟังข้อความ ฉันไม่ได้ใช้สิ่งนี้ดังนั้นฉันไม่สามารถให้ข้อมูลใด ๆ กับคุณได้ดังนั้นฉันจะใช้บลูทู ธ 'ปกติ'
เท่าที่ฉันเห็นมันมีสองประเด็นที่ต้องเอาชนะ:
ปิดการจับคู่พิน
การเริ่มต้นการเชื่อมต่ออัตโนมัติ
ฉันจะครอบคลุมหมายเลข 2 ก่อนเพราะฉันได้รับความประทับใจว่านี่คือสิ่งที่คุณสนใจจริงๆ (ขอโทษถ้าฉันอ่านผิด) ในการทำเช่นนี้จากโทรศัพท์หรืออุปกรณ์ 'ต้นแบบ' อื่น ๆ มันจะต้องค้นหาอุปกรณ์บลูทู ธ ระยะไกลอย่างต่อเนื่อง เมื่อได้รับการยอมรับหนึ่งที่สามารถใช้ได้มันจะเชื่อมต่อกับมันโดยอัตโนมัติและส่งข้อมูลบางอย่างหรืออื่น ๆ ที่จะเริ่มต้นสิ่งที่จำเป็นต้องมีการกระทำ คนอื่น ๆ ได้กล่าวถึงการใช้ชื่อที่เป็นมิตรกับบลูทู ธ สำหรับกระบวนการนี้และนั่นเป็นวิธีหนึ่ง ประสบการณ์ของฉันเกี่ยวกับชื่อที่เป็นมิตรกับบลูทู ธ (โดยเฉพาะ แต่ไม่เฉพาะกับสแต็คบลูทู ธ ของ Microsoft) คือพวกเขาไม่ได้มีวิธีการสแกนที่แข็งแกร่ง คุณน่าจะทำได้ดีกว่าการใช้คลาสอุปกรณ์บลูทู ธซึ่งออกอากาศในเวลาเดียวกันกับที่อยู่อุปกรณ์ที่ไม่ซ้ำกัน คลาสอุปกรณ์นี้มีรายการที่ระบุไว้ล่วงหน้าจำนวนมากสำหรับสิ่งต่าง ๆ เช่นโทรศัพท์มือถือแล็ปท็อปเดสก์ท็อป ฯลฯ ฯลฯ หากคุณใช้คลาสอุปกรณ์ที่ไม่ได้มาตรฐานอย่างใดอย่างหนึ่ง (เช่น 00:00:00) คุณจะสามารถทำได้ทันที เพื่อกรองอุปกรณ์บลูทู ธ ส่วนใหญ่ออกไป จากนั้นคุณสามารถเชื่อมต่อกับอุปกรณ์ที่เหลือและทำการสื่อสารที่รับทราบคำขอเพื่อเริ่มการกระทำของคุณ หากคุณทำสิ่งนี้ให้คลุมเครืออย่างเหมาะสม (หรือตรวจสอบชื่อที่จำง่ายเป็นข้อพิจารณาที่สอง) ก็ควรกรองอุปกรณ์ที่ไม่ถูกต้องใด ๆ ที่เหลืออยู่โดยปริยาย
สำหรับการจับหมายเลข 1 นั้นการจับคู่พินนั้นไม่สมเหตุสมผลหากคุณกำลังสร้างการเชื่อมต่อแบบชั่วคราว แต่ก็อาจเป็นวิธีที่ดีที่สุดในการบรรลุสิ่งที่คุณต้องการ หากคุณต้องการหลีกเลี่ยงการจับคู่พินสามารถปิดได้และสามารถทำการเชื่อมต่อที่ไม่ได้จับคู่กันได้ วิธีที่คุณทำสิ่งนี้ขึ้นอยู่กับการใช้งานตัวรับสัญญาณบลูทู ธ แต่นี่คือตัวอย่างเล็ก ๆ น้อย ๆ :
- Bluegiga WT12: ใช้คำสั่ง SET BT AUTH *
- National Semiconductor LMX9838: ใช้คำสั่ง GAP_SET_SECURITY_MODE พร้อมโหมดความปลอดภัย 1 (ไม่มีการจับคู่)
เป็นต้น
การเชื่อมต่อกับอุปกรณ์นั้นสามารถทำได้โดยไม่ต้องจับคู่ หากอุปกรณ์ที่เริ่มต้นการเชื่อมต่อเหมือนกับผู้รับสัญญาณสิ่งนี้จะตรงไปตรงมามาก หากคุณใช้ Windows PC คุณสามารถสร้างกระบวนการเชื่อมต่อใหม่และเลือก "ไม่ใช้พิน" แม้ว่า Windows อาจยังคงขอ PIN เมื่อคุณเชื่อมต่อ (ปกติจะใช้งาน 0000 แต่ มันเป็นขุยมาก) หากคุณใช้ python กับ pybluez มันง่ายมาก:
import bluetooth
sock = bluetooth.BluetoothSocket(bluetooth.RFCOMM)
sock.connect((<insert MAC address>, <insert port number>))
แต่ถ้าคุณต้องการที่จะเชื่อมต่อจากโทรศัพท์มือถือจะได้รับมากความซับซ้อนมากขึ้น Android SDK ดูเหมือนจะไม่รองรับการเชื่อมต่อที่ไม่ได้ใช้งานจริง:
Android Bluetooth API ปัจจุบันจำเป็นต้องมีการจับคู่อุปกรณ์ก่อนที่จะสามารถทำการเชื่อมต่อ RFCOMM ได้ (การจับคู่จะดำเนินการโดยอัตโนมัติเมื่อคุณเริ่มการเชื่อมต่อที่เข้ารหัสด้วย Bluetooth API)
(จากhttp://developer.android.com/guide/topics/connectivity/bluetooth.html ) มีหลายวิธีในการทำเช่นนี้ แต่มีความซับซ้อนและไม่รองรับ หากคุณกำลังใช้ iPhone การเชื่อมต่อบลูทู ธ เป็นเวิร์มต่าง ๆ (ใบอนุญาตเป็นต้น) ดังนั้นฉันจะทิ้งไว้นานแล้ว
ต้องบอกว่าทั้งหมดนี้ API ทุกตัวที่ฉันเคยดูอนุญาตให้จับคู่และการจับคู่ไม่ได้ดำเนินการ (ยกเว้นข้อเด่นของ python / pybluez แต่เป็นเพียง wrapper รอบ ๆ Microsoft stack บน Windows ดังนั้นคุณสามารถเรียกใช้ฟังก์ชันระดับต่ำได้โดยตรง) ดังนั้นเมื่อคุณเห็นอุปกรณ์ที่มีคลาสอุปกรณ์ที่เหมาะสมทำไมไม่จับคู่โดยอัตโนมัติ (ด้วยหมายเลขพินที่กำหนดไว้ล่วงหน้า) ทำการเชื่อมต่อส่งข้อมูลที่ต้องการยกเลิกการเชื่อมต่อแล้วยกเลิกการจับคู่ สิ่งเหล่านี้ไม่จำเป็นต้องมีการแทรกแซงของผู้ใช้และตราบใดที่คุณไม่ได้ทำหลายพันครั้ง (ซึ่งอาจทำให้เกิดปัญหากับการสึกหรอ EEPROM) ก็ไม่ควรทำให้เกิดปัญหาใด ๆ นอกจากนี้ยังช่วยให้คุณไม่ต้องยุ่งยากกับการพยายามใช้ API ที่แตกต่างกันให้ทำงานได้ดีกับสิ่งที่ถูกมองว่าเป็นวิธีการที่ไม่ได้มาตรฐานในการใช้บลูทู ธ