Пусть центральный модуль установит соединение с периферийным устройством.
"Проблема", с которой я столкнулся
Код центрального напрямую возвращает ошибку BleHost(Timeout), даже с измененными настройками
Я скомпилировал примеры ble_bas_peripheral и ble_bas_central в папке example/linux и запустил их
код периферийного устройства
Код: Выделить всё
sudo systemd-run --pty --uid=$(id -u) --gid=$(id -g) --same-dir --setenv RUST_LOG=info --setenv PATH --property "AmbientCapabilities=CAP_NET_ADMIN" ~/ble_bas_peripheral 0
Running as unit: run-u171.service
Press ^] three times within 1s to disconnect TTY.
[2025-12-23T12:38:01Z INFO trouble_example_apps::ble_bas_peripheral] Our address = Address { kind: AddrKind(1), addr: BdAddr([255, 143, 26, 5, 228, 255]) }
[2025-12-23T12:38:01Z INFO trouble_example_apps::ble_bas_peripheral] Starting advertising and GATT service
[2025-12-23T12:38:01Z INFO trouble_host::host] [host] using packet pool with MTU 251 capacity 16
[2025-12-23T12:38:01Z INFO trouble_host::host] [host] filter accept list size: 16
[2025-12-23T12:38:01Z INFO trouble_host::host] [host] setting txq to 1, fragmenting at 192
[2025-12-23T12:38:01Z INFO trouble_host::host] [host] configuring host buffers (1 packets of size 255)
[2025-12-23T12:38:01Z INFO trouble_host::host] [host] initialized
[2025-12-23T12:38:01Z INFO trouble_host::host] [host] Device Address 00:AA:01:00:00:00
[2025-12-23T12:38:01Z INFO trouble_example_apps::ble_bas_peripheral] [adv] advertising
Код: Выделить всё
sudo systemd-run --pty --uid=$(id -u) --gid=$(id -g) --same-dir --setenv RUST_LOG=info --setenv PATH --property "AmbientCapabilities=CAP_NET_ADMIN" ~/ble_bas_central 1
Running as unit: run-u173.service; invocation ID: fbd88e8204a649c6825b3e6bfdd4568b
Press ^] three times within 1s to disconnect TTY.
[2025-12-23T12:38:14Z INFO trouble_example_apps::ble_bas_central] Our address = Address { kind: AddrKind(1), addr: BdAddr([255, 143, 27, 5, 228, 255]) }
[2025-12-23T12:38:14Z INFO trouble_example_apps::ble_bas_central] Scanning for peripheral...
[2025-12-23T12:38:14Z INFO trouble_example_apps::ble_bas_central] Connecting
[2025-12-23T12:38:14Z INFO trouble_host::host] [host] using packet pool with MTU 251 capacity 16
[2025-12-23T12:38:14Z INFO trouble_host::host] [host] filter accept list size: 16
[2025-12-23T12:38:14Z INFO trouble_host::host] [host] setting txq to 1, fragmenting at 192
[2025-12-23T12:38:14Z INFO trouble_host::host] [host] configuring host buffers (1 packets of size 255)
[2025-12-23T12:38:14Z INFO trouble_host::host] [host] initialized
[2025-12-23T12:38:14Z INFO trouble_host::host] [host] Device Address 00:AA:01:01:00:01
[2025-12-23T12:38:14Z WARN trouble_host::host] Error connection complete event: Connection Failed to be Established / Synchronization Timeout
thread 'main' panicked at /Users/markdejong/Projects/trouble/examples/apps/src/ble_bas_central.rs:44:51:
called `Result::unwrap()` on an `Err` value: BleHost(Timeout)
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
- Подключитесь через sudo hcitool -i hci0 lecc 00:AA:01:01:00:01 .. это работает
- Измените с AddrKind::RANDOM на AddrKind::PUBLIC .. без эффекта
- Настройка параметров подключения и сканирования в центральном коде:
Код: Выделить всё
let config = ConnectConfig {
connect_params: ConnectParams {
min_connection_interval: Duration::from_millis(80),
max_connection_interval: Duration::from_millis(100),
max_latency: 0,
min_event_length: Duration::from_secs(0),
max_event_length: Duration::from_secs(0),
supervision_timeout: Duration::from_secs(8),
},
scan_config: ScanConfig {
active: true,
timeout: Duration::from_secs(10),
filter_accept_list: &[(target.kind, &target.addr)],
phys: PhySet::M1,
interval: Duration::from_millis(100),
window: Duration::from_millis(100),
},
};
Setup
В последнее время я использую TroubLE, работающий на HCI. Я новичок в этой области, но я обнаружил, что btvirt включен в bluez-test-tools. Это позволяет вам запускать виртуализированную среду BLE. Это может быть полезно для CI, тестирования и локальной разработки.
Я пробовал настроить это на своем MacOS сначала через QEMU (без опыта), а затем через Vagrant + Virtualbox. Я настроил виртуальную машину Ubuntu 24.x, на которую установил bluez и bluez-test-tools
Я написал себе README после вышеупомянутых шагов.
- После этого вы можете перейти --provider=virtualbox .. это загрузит машину с Ubuntu 24.x
- Вы можете войти в систему через vagrant ssh
- После того, как вы вошли в систему, запустите sudo apt-get update и sudo apt-get install bluez bluez-test-tools
- При этом должны быть установлены инструменты тестирования, такие как btvirt
- Чтобы это работало, вам также понадобится sudo modprobe hci_vhci
- Чтобы иметь правильные права доступа к файлам, вам потребуется sudo chmod 666 /dev/vhci. Используйте ls -l /dev/vhci, чтобы убедиться, что у него правильные разрешения.
- Далее вы можете создать виртуальное устройство с помощью btvirt -l2 &
- Проверить его активность hciconfig -a
- Чтобы оно работало с нашими программами Rust (центральными и периферийными), вам необходимо отключить sudo hciconfig hci{X} вниз
Подробнее здесь: https://stackoverflow.com/questions/798 ... th-trouble
Мобильная версия