का उपयोग कर 32feet.net का उपयोग कर बीटीएलई डिवाइस से कनेक्ट करें मेरे पास ब्लूटूथ कम ऊर्जा (बीटीएलई) डिवाइस है, जिसे मुझे अपने पीसी से कनेक्ट करने की आवश्यकता है। ऐसा करने के लिए, मैं डेस्कटॉप WPF ऐप में विंडोज एपीआई संदर्भ का उपयोग करता हूं।अद्वितीय सेवा प्रोटोकॉल
ब्लूटूथ डिवाइस अपेक्षाकृत सरल है: 1 सेवा, 2 विशेषताओं (एक पढ़ने/सूचित करने के लिए, एक को लिखने के लिए)।
To make below code work, add the following references to the WPF (for windows 10):
C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETCore\v4.5\System.Runtime.WindowsRuntime.dll
C:\Program Files (x86)\Windows Kits\10\UnionMetadata\Windows.winmd
Windows API कोड के लिए सी #
public GattDeviceService BLEService;
public GattCharacteristic BLEData_ReadNotify;
public GattCharacteristic BLEData_Write;
private static readonly Guid Guid_service = new Guid("25FB9E91-1616-448D-B5A3-F70A64BDA73A");
public static readonly Guid Characteristics_ReadNotify = new Guid("C3FBC9E2-676B-9FB5-3749-2F471DCF07B2");
public static readonly Guid Characteristics_Write = new Guid("D6AF9B3C-FE92-1CB2-F74B-7AFB7DE57E6D");
// Find all BTLE devices that have the service Guid: Guid_service
public void findandconnect() {
var BTLEdeviceList = await DeviceInformation.FindAllAsync(GattDeviceService.GetDeviceSelectorFromUuid(Guid_service));
// lets assume at least one device is found, store it's id.
id = BTLEdeviceList[0].id;
// Connect to the SERVICE of the device
BLEService = await GattDeviceService.FromIdAsync(id);
// Get the first "ReadNotify" characteristics of that service
BLEData_ReadNotify = BLEService.GetCharacteristics(Characteristics_ReadNotify).First();
// If that value changes, update an event
BLEData_ReadNotify.ValueChanged += BLEData_ValueChanged;
// Also get the first "write" characteristics of that service
BLEData_Write = BLEService.GetCharacteristics(Characteristics_Write).First();
// and tell that characteristics to NOTIFY me if the BTLE device has an update.
await BLEData_ReadNotify.WriteClientCharacteristicConfigurationDescriptorAsync(GattClientCharacteristicConfigurationDescriptorValue.Notify);
// Successfully connected
// Send the command "RUN\r" to the write characteristics, to let it start to execute the program
byte[] buffer = Encoding.ASCII.GetBytes("RUN" + "\r");
IBuffer ibuffer = buffer.AsBuffer();
// Sending "RUN"
await BLEData_Write.WriteValueAsync(ibuffer);
}
// And here should be some event function for the ValueChanged
खैर, यह काम करता है, थोड़े ... यह नरक के रूप में अस्थिर है, समय यह त्रुटियाँ पैदा करता है कि हल नहीं किया जा सकता है के सबसे:
रेखा: BLEData_ReadNotify.WriteClientCharacteri ... निर्दिष्ट लॉगऑन सत्र के लिए कोई उपयोगकर्ता सत्र कुंजी नहीं है। (HRESULT से अपवाद: 0x80070572)
और सेमफोर टाइमआउट अवधि समाप्त हो गई है। (HRESULT से अपवाद: 0x80070079)। यह दूसरी त्रुटि कम आम है और तब दिखाई देता है जब स्क्रिप्ट को पहले कुछ भी प्राप्त नहीं होता है, फिर टाइमर के माध्यम से यह फिर से रन कमांड भेजने की कोशिश करता है, फिर सभी क्रैश हो जाते हैं और त्रुटि एपियर होते हैं।
स्टैक ओवरफ्लो और कई साइटों पर खोज, मैंने पाया कि उपर्युक्त त्रुटियों को हल करना असंभव है। इसलिए मेरा प्रश्न:
क्या उपरोक्त कोड 32Feet.net का उपयोग करके पुनः लिखा जा सकता है?
2012 में यह संभवतः link संभवतः रक्त का उपयोग करने के लिए संभव नहीं था, लेकिन शायद यह है? इस उत्तर link में स्कैनिंग विधि का उपयोग करके, जब मैं इसे जोड़ा नहीं जाता तो मैं अपना बीएलई डिवाइस ढूंढ सकता हूं।
हां, तो मैं कुछ कोड
// mac is mac address of local bluetooth device
Guid Guid_service = new Guid("25FB9E91-1616-448D-B5A3-F70A64BDA73A");
localEndpoint = new BluetoothEndPoint(myRadio.LocalAddress, Guid_service);
// client is used to manage connections
localClient = new BluetoothClient(localEndpoint);
BluetoothAddress a = new BluetoothAddress(new byte[] { 180, 99, 76, 86, 31, 21 });
Guid Guid_service = new Guid("25FB9E91-1616-448D-B5A3-F70A64BDA73A");
localClient.Connect(a, Guid_service);
NetworkStream stream = localClient.GetStream();
कोशिश की, लेकिन मैं त्रुटि के साथ लाइन localClient.Connect में फंसे हूँ: प्रकार 'System.Net.Sockets.SocketException' की एक अपवाद हो गई। अतिरिक्त जानकारी: एक कनेक्शन का प्रयास विफल हो गया क्योंकि जुड़े पार्टी ठीक से समय की अवधि के बाद कोई जवाब नहीं दिया, या स्थापित कनेक्शन विफल रहा क्योंकि कनेक्ट किए गए मेजबान
जवाब में नाकाम रही है खिड़कियों एपीआई कोड 32feet.net में फिर से लिखा जा सकता है , ifso, कैसे आगे बढ़ना है?
नोट: मैंने विंडोज मूल नेट कोड का उपयोग कर बीटी 2.1 डिवाइस से कनेक्ट करने का प्रयास किया, लेकिन धारावाहिक बंदरगाह अस्थिर और सिर में दर्द है। 32feet.net के साथ यह अब सीरियलपोर्ट पर शानदार काम करता है, बहुत स्थिर है और यह हर बार कनेक्ट होता है!
इसके लिए आपको कोई समाधान मिला है? मैं भी वही ढूंढ रहा हूं। –
समाधान विंडोज 8+ का उपयोग करना है, और WinRT API का उपयोग करना है। "डेस्कटॉप सी # एप्लिकेशन में winRT को शामिल करने के तरीके" जैसे कुछ खोजें। एक बार जब आप WinRT API को शामिल कर लेते हैं, तो आप इसकी ब्लूटूथ कॉल का उपयोग कर सकते हैं, जो आपको बीटी 2.1 के साथ-साथ बीटी 4 डिवाइस से कनेक्ट करने की अनुमति देता है। मेरे पास कहीं भी कोड बिछा रहा है, लेकिन अभी कोई समय नहीं है। अगर आपको कोड की आवश्यकता है तो टिप्पणी करें और मैं इसे एप पोस्ट करूंगा। – Jeffrey
हाँ आदमी कृपया कोड या लिंक पोस्ट करें जो आपके लिए संभव है। धन्यवाद। –