jBLE4Bricks
Une bibliothèque Java pour piloter en Bluetooth LE les hubs LEGO Powered Up, SBrick et Circuit Cubes.
Bibliothèque Java qui découvre, connecte et commande les hubs de briques motorisées en Bluetooth Low Energy, avec une seule API pour macOS, Windows et Linux. Le code applicatif s’écrit une fois ; les différences entre piles Bluetooth des systèmes et entre protocoles des fabricants restent dans la bibliothèque.
Développement en cours : l’API n’est pas encore stable et peut changer d’une version à l’autre, sans période de dépréciation.
Fonctionnalités
- Matériel — hubs LEGO Powered Up (Hub 2, Technic Hub, Move Hub, City Hub, Mario Hub, WeDo 2.0), SBrick et Circuit Cubes. BuWizz 2.0 et 3.0 sont implémentés d’après leur documentation, sans avoir encore été vérifiés sur le matériel.
- Deux niveaux d’API — une API brute (scan, connexion, lecture, écriture et notifications GATT) et un DSL fluide qui traduit les commandes de chaque protocole en méthodes nommées et se charge de l’encodage des octets.
- Multiplateforme — CoreBluetooth sur macOS 13+, WinRT sur Windows 11, BlueZ (D-Bus) sur Linux, en amd64 comme en aarch64.
- Filtres de scan — par type de hub LEGO, par service GATT ou par identifiant d’appareil, pour retrouver toujours la même locomotive sur un réseau de trains.
- Diagnostic — journalisation détaillée côté Java et côté natif pour comprendre un échec de connexion.
- Qualité — chaque build exige 99 % de couverture des instructions, 100 % des branches, Checkstyle et un Quality Gate SonarQube au vert.
Les protocoles sont tirés des spécifications publiées (LEGO Wireless Protocol 3.0 en tête) et recoupés avec node-poweredup.
Installation
Aucune version n’est encore publiée : la bibliothèque se compile depuis les sources (Java 25 et Maven 3.9) puis s’installe dans le dépôt Maven local.
mvn install
<dependency>
<groupId>ch.varani.bricks</groupId>
<artifactId>ble-api</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>
Utilisation
Tout part de BrickDsl.open() : on scanne, on se connecte au premier hub trouvé, puis
on enchaîne les commandes propres à l’appareil.
try (BrickDsl dsl = BrickDsl.open()) {
dsl.scan()
.forLegoHubs()
.timeoutSeconds(10)
.first()
.thenConnect()
.asLego()
// commandes du hub…
.done();
}
Le README détaille les commandes de chaque appareil, l’API brute et le diagnostic des connexions. Les essais sur le vrai matériel vivent dans un projet à part, jBLE4Bricks — tests sur le matériel.