Btleplug est une bibliothèque asynchrone Rust Ble, prenant en charge Windows 10, MacOS, Linux, iOS et Android (y compris Flutter, voir ci-dessous pour plus d'informations).
Il est né de plusieurs bibliothèques abandonnées antérieures pour diverses plates-formes (Rumble, Blurmac, etc ...), dans le but de construire une bibliothèque entièrement transformatrice. Si vous êtes curieux de savoir comment la bibliothèque a grandi, vous pouvez en savoir plus à ce sujet dans cet article de blog.
BtlePlug est censé être uniquement en mode hôte / central . Si vous êtes intéressé par le btle périphérique (c'est-à-dire agir comme un appareil Bluetooth LE au lieu de vous connecter à un), consultez Bluster ou Ble-Péripheral-Rust.
Cette bibliothèque ne prend pas en charge Bluetooth 2 / Classic . Il n'est pas prévu d'ajouter le support BT2 / classique.
| Fonctionnalité | Fenêtre | MacOS / iOS | Linux | Androïde |
|---|---|---|---|---|
| Adapter | X | X | X | X |
| Gérer plusieurs adaptateurs | X | |||
| Découvrez les appareils | X | X | X | X |
| └ Découvrez les services | X | X | X | X |
| └ Découvrez les caractéristiques | X | X | X | X |
| └ Découvrez des descripteurs | X | X | X | X |
| └ Découvrez le nom | X | X | X | X |
| └ Découvrez les données du fabricant | X | X | X | X |
| └ Découvrez les données de service | X | X | X | X |
| └ Découvrez l'adresse MAC | X | X | X | |
| Gatt Server Connect | X | X | X | X |
| Événement Gatt Server Connect | X | X | X | X |
| Déconnexion du serveur GATT | X | X | X | X |
| Événement de déconnexion du serveur GATT | X | X | X | X |
| Écrire à caractéristique | X | X | X | X |
| Lire de caractéristique | X | X | X | X |
| Abonnez-vous à la caractéristique | X | X | X | X |
| Se désabonner de la caractéristique | X | X | X | X |
| Obtenez l'événement de notification caractéristique | X | X | X | X |
| Lire le descripteur | X | X | X | X |
| Écrivez le descripteur | X | X | X | X |
| Récupérer MTU | ||||
| Récupérer l'intervalle de connexion |
Pour permettre la mise en œuvre de SERDE Serialize et Deserialize sur certains types courants dans le module api , utilisez la fonction serde .
[ dependencies ]
btleplug = { version = " 0.11 " , features = [ " serde " ] } Pour utiliser Bluetooth sur MacOS Big Sur (11) ou ultérieurement, vous devez soit emballer votre binaire dans un bundle d'applications avec une Info.plist , notamment NSBluetoothAlwaysUsageDescription , ou (pour une application de ligne de commande telle que les exemples inclus avec btleplug ), activez l'autorisation Bluetooth pour votre terminal. Vous pouvez faire ce dernier en allant aux préférences système → Sécurité et confidentialité → Confidentialité → Bluetooth , en cliquant sur le bouton '+' et en sélectionnant le terminal '(ou iTerm ou quelle que soit l'application du terminal que vous utilisez).
En raison de la nécessité d'une construction hybride de rouille / java, Btleplug pour Android nécessite une configuration quelque peu compliquée.
Certaines informations sur la réalisation de la construction sont disponibles dans le numéro d'origine pour la prise en charge d'Android dans BTLPlug.
Un aperçu rapide du processus de construction:
src/droidplug/java , en utilisant les fichiers Gradle inclus, et eux dans un référentiel Maven, soit avoir la partie Java de votre application Android Point à cela comme implémentation locale.cargo-ndk pour construire. Sortez les Jnilibs et assurez-vous qu'ils se retrouvent au bon endroit dans votre application.L'optimisation progressive peut être un problème lors de l'utilisation de BtlePlug, car le fichier .aar généré par le code Java dans BtlePlug est uniquement accessible par le code natif, et peut être optimisé dans le cadre de la suppression du code mort et de la rétrécissement des ressources. Pour résoudre ce problème, des modifications devront être apportées à votre fichier build.gradle, et les règles de progrès devront être définies.
Pour build.gradle:
buildTypes {
release {
// TODO: Add your own signing config for the release build.
// Signing with the debug keys for now, so `flutter run --release` works.
signingConfig signingConfigs . debug
shrinkResources true
minifyEnabled true
proguardFiles getDefaultProguardFile( ' proguard-android-optimize.txt ' ), ' proguard-rules.pro '
}
}Proguard-Rules.pro:
#Flutter Wrapper - Only needed if using flutter
-keep class io.flutter.app.** { *; }
-keep class io.flutter.plugin.** { *; }
-keep class io.flutter.util.** { *; }
-keep class io.flutter.view.** { *; }
-keep class io.flutter.** { *; }
-keep class io.flutter.plugins.** { *; }
#btleplug resources
-keep class com.nonpolynomial.** { *; }
-keep class io.github.gedgygedgy.** { *; }
Comme l'implémentation CoreBluetooth est partagée entre macOS et iOS, BtlePlug sur iOS devrait "simplement fonctionner" et semble stable. La façon dont cela est construit peut varier en fonction de la configuration de votre application et de la langue à laquelle vous vous liez, mais les exemples d'instructions sont les suivants (pris à partir d'ici):
Il existe également quelques exemples dans la cale Flutter répertoriée ci-dessous.
Bien que nous ne prenions pas spécifiquement la prise en charge de Flutter, il y a un modèle de rénovation disponible sur https://github.com/trobanga/flutter_btleplug. Ce modèle a des versions pour Android et iOS à l'aide de BtlePlug.
Comme la compilation Flutter a tendance à être complexe sur toutes les plates-formes, nous ne pouvons pas nous aider aux problèmes de construction de flutter.
Bien que nous ne soutenions pas spécifiquement Tauri, un plugin est disponible sur https://github.com/mnlphlp/tauri-plugin blec. Veuillez noter que toutes les questions de Tauri devraient aller au Plugin Repo avant de venir ici, nous ne pouvons pas aider les problèmes de Tauri car aucun de ces développeurs de ce projet n'utilise Tauri.
Tout le monde a des besoins Bluetooth différents, donc si Btleplug ne correspond pas aux vôtres, essayez ces autres bibliothèques par la communauté Rust!
BtlePlug est couvert par une licence BSD à 3 clause, avec certaines pièces de Rumble / Blurmac couvertes par la double licence MIT / APACHE et les licences BSD 3 clause, respectivement. Voir Licence.md pour plus d'informations et d'informations sur le droit d'auteur.