Da wir Java / Raspberry Pi 3B als Plattform ausgewählt haben, werden wir nach einer Java-Bibliothek suchen, die mit verschiedenen Sensoren in dieser Umgebung kommuniziert.
Zunächst zu Bluetooth LE. In den letzten Jahren sind Geräte aufgetaucht, die Sensordaten über BLE-Kommunikation erfassen können. Dieses Mal habe ich den wichtigsten [Texas Instruments SensorTag CC2650] ausgewählt (http://processors.wiki.ti.com/index.php/CC2650_SensorTag_User's_Guide). Das CC2650 ist ein batteriebetriebenes BLE-Gerät mit einer Größe von ca. 5 cm x 4 cm, mit dem Temperatur, Luftfeuchtigkeit, Beleuchtungsstärke, Druck, Winkelgeschwindigkeit, Beschleunigung und Magnetismus gemessen werden können.
Die Verwendung von CC2650 ist wie folgt.
Darüber hinaus schaltet der CC2650 die Stromversorgung automatisch aus, wenn er nicht innerhalb von 3 Minuten nach Beginn der Übertragung des Werbesignals von irgendwoher angeschlossen wird. Sie müssen es also erneut einschalten, um die Verbindung vorzubereiten. Dieses Mal haben wir bluez-dbus als Java-Bibliothek übernommen, die die BLE-Kommunikation beim Abfangen von Werbesignalen mit Java unterstützt.
Ich habe früher Code in Java geschrieben, um probeweise Sensordaten von CC2650 zu erhalten. Zu diesem Zeitpunkt war bluez-dbus noch nicht verfügbar, und es war ungefähr zu der Zeit, als Intel TinyB als eine weitere Bibliothek für die BLE-Kommunikation mit Java veröffentlicht wurde. tat. TinyB, das gerade veröffentlicht worden war, war jedoch instabil, und zu diesem Zeitpunkt konnte die Benachrichtigungsfunktion von BLE nicht verwendet werden. Vor allem die von bluez veröffentlichte dbus I / F-Definitionsdatei wird automatisch in C / C ++ - Code konvertiert (mehr als 10.000 Codezeilen werden automatisch generiert), und TinyB wird durch weitere Änderung erstellt. Ich hatte das Gefühl, dass die Wartbarkeit sehr gering war.
Bei Verwendung von BLE mit dbus I / F wird dbus selbst auf dem UNIX-Domänensocket definiert, sodass im Wesentlichen nur dieser UNIX-Domänensocket-Teil in JNI geschrieben und darauf definiert wird. Ich dachte, dass das dbus-Protokoll für bluez durch den Aufruf dieses JNI einfach zu implementieren ist.
Zu dieser Zeit hatte ich keine andere Wahl, als Java-Code zu schreiben, der verschiedene bluez-Befehle als residenten Prozess verknüpft, und ich habe ihn übertroffen. Es ist eine komplizierte Architektur, und ich fand sie umständlich. Ich habe den Code damals vergessen, aber dieser beschissene Eindruck bleibt immer noch.
Die Tage sind seitdem vergangen und jetzt wurde eine Bibliothek namens bluez-dbus veröffentlicht, die BLE unterstützt. Wenn ich die auf Github geschriebenen Entwicklermotive lese, ist es genau so, wie ich dachte. (Nun, ich denke schon ...)
Also schrieb ich diesmal den Code privat mit einer einfachen Architektur, die bluez-dbus übernahm. Die Einführung ist länger, aber der Text ist kürzer. Grundsätzlich ist es genau das, was Sie in Github geschrieben haben. Einzelheiten finden Sie im Code.
Raspbian Buster Lite OS (2019-07-10) wird als Betriebssystem von Raspberry Pi 3B verwendet. Dieses Betriebssystem enthält BlueZ 5.50, das von Anfang an von bluez-dbus unterstützt wird, sodass BlueZ nicht erneut erstellt werden muss.
Ich denke, es gibt Java für die ARM-Version Linux, aber ich habe jdk11 von BELLSOFT in [apt-get](https: //apt.bell-sw) geändert. Ich habe es in .com /) gestellt.
# wget -q -O - https://download.bell-sw.com/pki/GPG-KEY-bellsoft | apt-key add -
# echo "deb [arch=armhf] https://apt.bell-sw.com/ stable main" | tee /etc/apt/sources.list.d/bellsoft.list
# apt-get update
# apt-get install bellsoft-java11
Dieses Modul dient zum Abfangen von BLE-Werbesignalen. Der Zweck besteht darin, dynamisch zu erkennen, dass ein BLE-Gerät in den Bereich der zentralen BLE-Kommunikation eingetreten ist. Insbesondere nähert sich der CC2650 und Central erkennt seine Existenz und löst die Verbindung aus.
Außerdem verlässt der angeschlossene CC2650 den Kommunikationsbereich von Central, die BLE-Kommunikation wird getrennt (das Ankündigungssignal wird neu gestartet), und dann nähert er sich erneut, Central fängt das Werbesignal ab und wird automatisch zu CC2650. Es soll auch als Auslöser für die Wiederverbindung dienen.
** Bluetooth-Scanner ** Der Schlüssel zur Verarbeitung ist dbus-java Es soll eine Klasse vorbereitet werden, die die AbstractPropertiesChangedHandler.java, die von "public void handle (PropertiesChanged properties)" bereitgestellt wird, erweitert und implementiert. Weitere Informationen finden Sie im Code unter Github. Unten finden Sie ein Beispiel für die Verwendung von ** Bluetooth-Scanner **. Implementieren Sie die IScanHandler-Schnittstelle, um eine Instanz von ScanProcess.java zu erstellen, und rufen Sie start () auf.
import com.github.hypfvieh.bluetooth.DiscoveryFilter;
import com.github.hypfvieh.bluetooth.DiscoveryTransport;
import com.github.hypfvieh.bluetooth.wrapper.BluetoothDevice;
import io.github.s5uishida.iot.bluetooth.scanner.IScanHandler;
import io.github.s5uishida.iot.bluetooth.scanner.ScanData;
import io.github.s5uishida.iot.bluetooth.scanner.ScanProcess;
public class MyScan {
public static void main(String[] args) throws IOException, InterruptedException {
Map<DiscoveryFilter, Object> filter = new HashMap<DiscoveryFilter, Object>();
filter.put(DiscoveryFilter.Transport, DiscoveryTransport.LE);
ScanProcess scanProcess = new ScanProcess("hci0", new MyScanHandler(), filter);
scanProcess.start();
}
}
class MyScanHandler implements IScanHandler {
private static final Logger LOG = LoggerFactory.getLogger(MyScanHandler.class);
@Override
public void handle(BluetoothDevice device, ScanData data) {
LOG.info(device.toString());
LOG.info(data.toString());
}
}
Ein Beispiel für das Ausführungsprotokoll lautet wie folgt. Der Zeilenanfang wird weggelassen.
MyScanHandler handle - BluetoothDevice [device=org.bluez:/org/bluez/hci0/dev_24_71_89_06_9D_82:interface org.bluez.Device1, adapter=/org/bluez/hci0, getBluetoothType()=DEVICE, getDbusPath()=/org/bluez/hci0/dev_24_71_89_06_9D_82]
MyScanHandler handle - [hci0] 24:71:89:06:9D:82 name:CC2650 SensorTag rssi:-63 txPower:0 date:2019-09-03 22:40:25.483
Diese Reihe besteht aus folgenden Artikeln:
[2019.11.16] Die neuesten Informationen zu einfachen Tools finden Sie unter hier.
Recommended Posts