Как обнаружить Mindstorm EV3 с помощью flutter_blue

Я пытаюсь настроить сервер Bluetooth на Mindstorm EV3, используя ev3dev с python.

Сервер работает нормально, поскольку это очень простая реализация сокета сервера Bluetooth.

#!/usr/bin/env python3
import bluetooth
from ev3dev2.sound import Sound

sound = Sound()

server_sock = bluetooth.BluetoothSocket(bluetooth.RFCOMM)

port = 1
server_sock.bind(("", port))
server_sock.listen(1)

sound.speak("Accepting connections on port " + str(port))

client_sock, address = server_sock.accept()
sound.speak("Accepted connection from " + str(address))

data = client_sock.recv(1024)
sound.speak("received " + str(data))

client_sock.close()
server_sock.close()

Проблема, с которой я столкнулся прямо сейчас, заключается в том, что я не могу обнаружить сигнал Bluetooth от EV3 в моем приложении flutter. Я могу найти другие устройства, и я могу найти EV3 в настройках bluetooth на телефоне, это просто приложение, которое его не обнаруживает.

Это код, который я использую для обнаружения устройств Bluetooth.

_btSubscription = _flutterBlue.scan().listen((scanResult) {
    if (scanResult.device.name.isEmpty || _detectedDevices.contains(scanResult.device))
        return;

        print('Found Bluetooth device: (${scanResult.device.name})');

        _detectedDevices.add(scanResult.device);

У EV3 есть имя, поэтому оно не игнорируется из-за проверки имени.

Любой совет приветствуется.

заранее спасибо


person Hisha    schedule 16.10.2019    source источник
comment
Я бы предложил добавить print() перед вашим return;, чтобы проверить, действительно ли ваш результат пуст или уже указано устройство.   -  person Peter    schedule 23.10.2019
comment
Спасибо за ваше предложение, я думаю, что уже пробовал это, но я сделаю еще одну попытку и сообщу, если я получу новые результаты :)   -  person Hisha    schedule 24.10.2019
comment
Я попытался добавить пару отпечатков, просто выгрузив информацию о любом найденном устройстве. Я также пробовал фильтровать Bluetooth-адрес EV3. Но результатов это не дало. Кроме того, я тестировал его на другом компьютере с bluetooth, и Flutter Blue тоже не смог его обнаружить. Похоже, он не может обнаружить именно другие компьютеры.   -  person Hisha    schedule 24.10.2019


Ответы (1)


Это старый вопрос, но для будущих читателей.

Обратите внимание, что существует множество версий / вариантов Bluetooth, и не все они совместимы. Пакет flutter_blue предназначен для BLE (Low Energy), недавней технологии, представленной в Bluetooth 4.0 и распространенной в телефонах с 2015 года, см. https://en.wikipedia.org/wiki/Bluetooth#Specifications_and_features

Lego EV3 использует Bluetooth V2.1 EDR (классический Bluetooth), как и старые ноутбуки, поэтому flutterBlue.scan() не видит эти устройства. см. также https://superuser.com/questions/502825/how-can-i-find-out-what-version-of-bluetooth-my-laptop-supports.

Если вы хотите работать во Flutter с Bluetooth Classic, посмотрите другие пакеты, такие как https://pub.dev/packages/flutter_bluetooth_serial. (Я не говорю, что это будет работать с EV3, но, по крайней мере, это правильный Bluetooth!)

person Andy F    schedule 13.11.2020
comment
Спасибо за Ваш ответ. Мы также пробовали использовать последовательный порт Bluetooth, но безуспешно, так как мы верили, что это так. В конце концов, мы создали API на EV3 и запустили систему через Wi-Fi вместо Bluetooth, поскольку решили, что технологии недостаточно развиты. Но кажется, что зрелость - не подходящее слово для этого, а скорее несовместимое :) - person Hisha; 14.11.2020