2017-09-27 1 views
0

Für ein Schülerprojekt arbeiten wir daran, ein Bluetooth LE-Gerät (das sendet und empfängt) mit einem iPhone oder iPad zu verbinden, um Daten daraus für den Benutzer zu lesen in Echtzeit. Wir haben den Beweis, dass dies von der Firma machbar ist, die das Gerät hergestellt hat, und wir haben tatsächlich eine Verbindung erhalten und einige Daten erhalten. Allerdings pingt es alle 5-10 Sekunden und scheint eine zufällige Teilmenge von Zahlen mit minimalen Änderungen zu sein nachdem etwas auf dem Gerät geändert wurde, was uns keinen klüger macht.'Aktivieren' Bluetooth LE Energy Datenstrom

Jetzt gingen wir natürlich zu der Firma, die das Gerät und die App zuerst gemacht hat, und wir haben die Genehmigung, ihre Hardware zu verwenden, konnten aber kein SDK/API von ihnen verwenden die Anwendung. Unser Plan ist also, unseren eigenen Weg zu gehen und zu finden, was wir brauchen.

Dies ist, wo wir stecken bleiben. Wir haben die folgenden:

  • Verbindung basierend auf Namen oder Bluetooth-Geräteadresse
  • Scan-Dienste (und kaskadierende Scan, falls die Dienste Dienste in ihnen haben, wie in der CoreBluetooth Dokumentation angegeben)
  • Lesen Sie Merkmale aus dem Dienstleistungen.
  • Wert in 8bit UInt entschlüsseln, damit wir einige wirklich lesbare Daten erhalten.

Dies ist ein Beispiel dessen, was wir mit dem Wert noch haben, wie es kommt.

Service: 0x1c0476440, is Primary = yes. UUID: 058d0001-ca72-4c8b-8084-25e049936b31 
value <53636da1 7a616c74 73616c74 73616c74 73616c27> 

nun an diesem alle suchen, nehme ich an der Service hier eine Art ‚ist zu bleiben alive 'ping und gibt zusätzliche Informationen über den aktuellen Zustand des Geräts.

Die Frage, die wir dann läuft darauf hinaus, diese nach unten:

Wie können wir das Gerät ‚erforschen‘ weiter? Wir scheinen keine zusätzliche Ausgabe von dieser Seite bekommen werden jedoch im Gerätemanager sucht aus Fenstern bekommen wir ein paar Hits, wie dieses (Beispiel) aussehen:

{058d0001-ca72-4c8b-8084-25e049936b31}[6] 

Welche Werte entweder in einem hexadezimalen haben value, boolean oder datetime ohne eindeutige Bezeichner. Gibt es eine Möglichkeit, eine Nachricht an das Gerät zu senden, um den Wert in dieser Uuid mit Swift zu ändern, oder ist das nicht möglich?

+0

Können Sie das Merkmal ausdrucken, an dem Sie interessiert sind? Der Dienst sollte kein "am Leben erhalten" haben, eine Eigenschaft könnte es haben, wie eine Subskribierungsmöglichkeit ('setNotify :()') zu seinen Änderungen. Und vielleicht ein Char, wo zu schreiben, um den Modus zu ändern. – Larme

+0

Sie können die LightBlue App aus dem App Store verwenden, um periphere Dienste und Merkmale zu untersuchen – Paulw11

+0

@Larme Entschuldigung für die Antwort.Weiter im Laufe des letzten Monats zu tauchen hat uns gezeigt, dass es nur ein Signal ist, das sagt, dass es lebt. Es ist auch intern mit einem Salz verschlüsselt. Nachdem auf es für ein bisschen gearbeitet, haben wir folgendes: Drucken jeder Service Drucken jedes Merkmal Log Bluetooth Verkehr und analysieren es Bisher sind wir immer noch nicht ‚in‘, aber wir sind immer auf der weisen darauf hin, dass es für uns nutzbar ist. – Veraduxxz

Antwort

0

Während jetzt gelöst, akzeptiere ich das nicht als die Antwort. Meine Lösung? Versuche Dinge. Dumme "Nadel in einem Heuballen" Sachen.

änderte ich die UUID aus 058d0001-ca72-4c8b-8084-25e049936b31 zu 058d000 -ca72-4c8b-8084-25e049936b31

und voila. Ich könnte mehr tun. Ich versuchte 3, und wieder, ein neues Ergebnis und ein funktionierender Datenstrom ...

@ Paulw11 Kommentar ist auch ein guter Weg, um dieses Problem zu lösen, die wir herausgefunden haben.