Btleplug는 Windows 10, MacOS, Linux, iOS 및 Android를 지원하는 비동기 Rust Ble 라이브러리입니다 (자세한 내용은 아래 참조).
완전 크로스 플랫폼 라이브러리를 구축하기 위해 다양한 플랫폼 (Rumble, Blurmac 등)을 위해 몇 가지 이전의 버려진 도서관에서 자랐습니다. 도서관이 어떻게 성장했는지 궁금하다면이 블로그 게시물에서 더 많은 정보를 읽을 수 있습니다.
Btleplug는 호스트/중앙 모드 전용입니다. Peripheral BTLE (즉, 하나에 연결하는 대신 Bluetooth LE 장치처럼 작용)에 관심이 있으시면 Bluster 또는 Ble-Peripheral-rust를 확인하십시오.
이 라이브러리는 Bluetooth 2/Classic을 지원하지 않습니다 . BT2/Classic 지원을 추가 할 계획은 없습니다.
| 특징 | 창 | 마코오 / iOS | 리눅스 | 기계적 인조 인간 |
|---|---|---|---|---|
| 어댑터를 가져 오십시오 | 엑스 | 엑스 | 엑스 | 엑스 |
| 여러 어댑터를 처리합니다 | 엑스 | |||
| 장치를 발견하십시오 | 엑스 | 엑스 | 엑스 | 엑스 |
| └ 서비스를 발견하십시오 | 엑스 | 엑스 | 엑스 | 엑스 |
| └ 특성을 발견하십시오 | 엑스 | 엑스 | 엑스 | 엑스 |
| discriptors 디스크립터를 발견하십시오 | 엑스 | 엑스 | 엑스 | 엑스 |
| └ 이름을 발견하십시오 | 엑스 | 엑스 | 엑스 | 엑스 |
| └ 제조업체 데이터를 발견하십시오 | 엑스 | 엑스 | 엑스 | 엑스 |
| └ 서비스 데이터를 발견하십시오 | 엑스 | 엑스 | 엑스 | 엑스 |
| mac 주소를 발견하십시오 | 엑스 | 엑스 | 엑스 | |
| GATT 서버 연결 | 엑스 | 엑스 | 엑스 | 엑스 |
| Gatt Server Connect 이벤트 | 엑스 | 엑스 | 엑스 | 엑스 |
| GATT 서버 연결이 끊어집니다 | 엑스 | 엑스 | 엑스 | 엑스 |
| GATT 서버 연결 이벤트 | 엑스 | 엑스 | 엑스 | 엑스 |
| 특성에 쓰십시오 | 엑스 | 엑스 | 엑스 | 엑스 |
| 특성에서 읽으십시오 | 엑스 | 엑스 | 엑스 | 엑스 |
| 특성을 구독하십시오 | 엑스 | 엑스 | 엑스 | 엑스 |
| 특성에서 구독을 취소하십시오 | 엑스 | 엑스 | 엑스 | 엑스 |
| 특성 알림 이벤트를 얻습니다 | 엑스 | 엑스 | 엑스 | 엑스 |
| 설명자를 읽으십시오 | 엑스 | 엑스 | 엑스 | 엑스 |
| 설명자를 쓰십시오 | 엑스 | 엑스 | 엑스 | 엑스 |
| MTU를 검색하십시오 | ||||
| 연결 간격을 검색합니다 |
api 모듈의 일부 공통 유형에 걸쳐 Serde의 Serialize 및 Deserialize 를 구현하려면 serde 기능을 사용하십시오.
[ dependencies ]
btleplug = { version = " 0.11 " , features = [ " serde " ] } MacOS Big Sur (11) 이상에서 Bluetooth를 사용하려면 NSBluetoothAlwaysUsageDescription 포함한 Info.plist 또는 ( btleplug 에 포함 된 예와 같은 명령 줄 애플리케이션의 경우) 이진을 Application Bundle에 패키지해야합니다. 시스템 환경 설정 → 보안 및 개인 정보 보호 → 개인 정보 보호 → 블루투스 , '+'버튼을 클릭하고 '터미널'(또는 ITERM 또는 사용하는 터미널 응용 프로그램)을 선택하여 후자를 수행 할 수 있습니다.
하이브리드 녹/Java 빌드가 필요하기 때문에 Android 용 Btleplug에는 다소 복잡한 설정이 필요합니다.
빌드 수행에 대한 일부 정보는 BTLPlug의 Android 지원을위한 원래 문제에서 사용할 수 있습니다.
빌드 프로세스의 빠른 개요 :
src/droidplug/java 디렉토리에 btleplug의 Java 부분을 구축하고 Maven Repo에 사용하거나 Android 앱의 Java 부분이 로컬 구현으로 가리 킵니다.cargo-ndk 사용하여 구축하는 것이 좋습니다. Jnilibs를 출력하고 앱에서 올바른 위치에 있는지 확인하십시오.Btleplug의 Java Code에서 생성 된 .AAR 파일은 기본 코드에 의해서만 액세스되며 Dead Code 제거 및 리소스 축소의 일부로 최적화 될 수 있으므로 Btleplug를 사용할 때 Proguard 최적화는 문제가 될 수 있습니다. 이 문제를 해결하려면 Build.Gradle 파일에 대한 변경 사항을 작성해야하며 Proguard 규칙을 정의해야합니다.
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.** { *; }
CoreBluetooth 구현이 MacOS와 iOS간에 공유되므로 iOS의 BTLEPLUG는 "그냥 작동"해야하며 안정적 인 것 같습니다. 이것이 구축되는 방법은 앱 설정과 구속력이있는 언어에 따라 다를 수 있지만 샘플 지침은 다음과 같습니다 (여기에서 가져온).
아래에 나열된 Flutter Shim에는 몇 가지 예가 있습니다.
우리는 구체적으로 Flut 이 템플릿에는 Btleplug를 사용하여 Android 및 iOS를위한 빌드가 있습니다.
플러터 컴파일은 플랫폼 전체에 걸쳐 복잡한 경향이 있으므로 플러터 빌드 문제를 도울 수 없습니다.
우리는 구체적으로 Tauri를 지원하지 않지만 https://github.com/mnlphlp/tauri-plugin-blec에는 플러그인이 있습니다. 모든 Tauri 질문은 여기에 오기 전에 플러그인 repo로 이동해야합니다.이 프로젝트의 개발자 중 Tauri를 사용하지 않기 때문에 Tauri 문제를 도울 수 없습니다.
모든 사람이 다른 블루투스 요구 사항이 있으므로 Btleplug에 적합하지 않으면 Rust 커뮤니티에서 다른 라이브러리를 사용해보십시오!
BTLEPLUG는 BSD 3-Clause 라이센스에 따라 다루어지며 Rumble/Blurmac의 일부 부품은 각각 MIT/Apache Dual 라이센스와 BSD 3-Clause 라이센스에 따라 다릅니다. 자세한 정보 및 저작권 정보는 License.md를 참조하십시오.