как отправить данные в Adafruit Bluefruit Feather (32u4) через Bluetooth?
Привет.
У меня подключено мое Adafruit Bluefruit Feather. Это прекрасно. У меня он реагирует на команды по последовательному порту USB, активируя массив октопар. Это потрясающе. Но вот в чем дело. Мне нужно поговорить с ним по беспроводной сети.
Я могу подключить его (MacOS) только к приложению Adafruit Bluefruit LE Connect. Он не отображается на панели настроек Bluetooth.
$ ls /dev/tty.*
показывает /dev/tty.Bluetooth-Incoming-Port
, и Arduino IDE может его увидеть. К сожалению, слово Входящий находится прямо посередине имени порта. Отправка команд через последовательный монитор Arduino, похоже, ничего не дает.
Похоже, что приложение Bluefruit Connect может отправлять команды через что-то под названием UART, но моя плата не реагирует на то, что работает через последовательный USB-порт.
Как мне связаться с этой платой через Bluetooth?
@Walrus the Cat, 👍0
2 ответа
Лучший ответ:
Под «UART» подразумевается Скандинавская служба UART GATT . Это не последовательный порт или USB-соединение. Это протокол BLE высокого уровня, который имитирует последовательный порт через соединение Bluetooth.
Чтобы подключиться к устройству с вашего Mac, вам нужно написать немного C или Obj-C. Я сделал это для Windows, но не для Mac, поэтому боюсь, что не смогу дать вам подробные инструкции. Однако исходный код приложения Adafruit Bluefruit LE Connect для iOS, которое вы используете, имеет открытый исходный код и может стать хорошей отправной точкой.
Однако имейте в виду несколько вещей.
- Вам придется немного узнать о протоколах и стандартах BLE. Это не совсем для слабонервных.
Apple ограничивает скорость/пропускную способность BLE на своих устройствах iOS (как и Android), чтобы продлить срок службы батареи. Я не знаю, применяют ли они такое же регулирование к своим ноутбукам. Возможно, вам не удастся достичь удовлетворительной скорости передачи данных, если вы хотите создать «канал данных» с высокой пропускной способностью. С Win10 и Bluefruit LE мне удалось получить 40 байт каждые 30 мс. Скорее всего, вы будете ограничены 20 сообщениями каждые ~30 мс.
Если вы хотите просто время от времени отправлять текстовые команды (возможно, в стиле AT) на устройство через BLE, вы не сможете приблизиться к этим ограничениям.
Сначала вам следует провести небольшое исследование того, что такое Bluetooth LE. Прежде всего, то, чем он не является, — это последовательный порт.
На самом деле спецификация BLE не имеет понятия последовательных портов, в отличие от старой спецификации Bluetooth 2.x SPP.
Да, вы можете использовать его как последовательный порт, но я хочу сказать, что нет профиля GATT для последовательной передачи данных. У каждого производителя модулей есть свой способ сделать это, так что это дело вашего приложения, чтобы реализовать этот метод (обычно с использованием библиотек, предоставляемых производителем). Вы не можете представить BLE как последовательный порт (COM3, /dev/rfcomm0 и т. д.).
Конечно, вы можете написать демон, который подключает пользовательский метод MFG к PTY и делает его больше похожим на последовательный порт (и такая вещь может уже существовать в сообществе для некоторых устройств), но он будет работать только с этим устройством и никогда с любым другим устройством. Последовательного порта нет — есть только последовательная эмуляция, и она специфична для устройства. Если бы это было стандартом, без сомнения, кто-то написал бы для него драйвер — как SPP для Bluetooth 2.x. Но с GATT вы просто не получаете эту стандартную возможность.
BLE предназначен для отправки коротких пакетов данных туда и обратно с использованием минимальной мощности. Многие производители решили создать профиль, который можно использовать аналогично последовательному порту (в том смысле, что вы отправляете данные через виртуальный «канал»), однако для взаимодействия с ним вам потребуется специальное программное обеспечение. И поскольку стандарта нет, а производители просто не общаются друг с другом, программное обеспечение специфично для устройства, с которым вы общаетесь.
Если вы напрямую программируете сам чип BLE с помощью собственной прошивки, то ничто не мешает вам реализовать свой собственный протокол для последовательной передачи данных и написать приложение, драйвер, демон, что угодно, для связи с этой пользовательской прошивкой. Но то же самое остается в силе: тот, кто захочет его использовать, потребует ваше конкретное приложение для связи с ним.
Единственные люди, которые хотят использовать BLE для последовательной передачи данных, это такие люди, как мы. Все остальные (а это 99,999% рынка) используют его по назначению — для подключения датчиков и HID-устройств к мобильным телефонам и т. д. Вот почему все профили GATT предназначены для таких вещей, как частота сердечных сокращений, уровень сахара в крови, скорость цикла и т. д.
Так что нет. Вы не можете использовать его как последовательный порт. Это не последовательный порт. Единственный надежный способ (и способ, к которому я прибегал в прошлом) — создать USB-ключ, который открывает интерфейс CDC/ACM для компьютера и содержит модуль BLE, который способен напрямую взаимодействовать с аналогичным модулем BLE через свой собственный профиль (тот, который я использую, имеет режим «прозрачного UART», когда два модуля соединены вместе). Затем микроконтроллер в ключе пересылает данные между компьютером и модулем BLE.
@RubberDuck Я думаю, вы не поняли, что я имел в виду. Да, вы можете использовать его *как* последовательный порт, но я хочу сказать, что нет профиля GATT для последовательной передачи данных. У каждого производителя модулей есть свой способ сделать это, так что это дело вашего приложения, чтобы реализовать этот метод (обычно с использованием библиотек, предоставляемых производителем). Вы не можете представить BLE как последовательный *порт* (COM3, /dev/rfcomm0 и т. д.). Конечно, вы можете написать демон, который подключает пользовательский метод MFG к PTY и сделать его более похожим на последовательный порт, но он будет работать только с этим устройством и никогда..., @Majenko
... любое другое устройство. Серийного порта нет - есть только *эмуляция последовательного порта*, и она *специфична для устройства*. Если бы это было стандартом, без сомнения, кто-то написал бы для него драйвер - как SPP для Bluetooth 2.x. Но с GATT вы просто не получаете эту стандартную возможность., @Majenko
Но работает только с Nordic. Как я уже сказал, это зависит от производителя, так как стандарта нет., @Majenko
лол, спасибо за развернутый ответ. похоже, эта доска просто не подходит., @Walrus the Cat
- Код CRC8 не работает должным образом
- Проблема с использованием модуля Bluetooth с платой ESP32s2
- Float печатается только 2 десятичных знака после запятой
- Почему запуск последовательного монитора перезапускает скетч?
- Arduino Pro Micro, получить данные с контакта Tx?
- В чем разница между библиотеками Software Serial? Какая из них совместима с Arduino Nano?
- Связь последовательного порта Digispark
- Чтение из Serial
Господи, спасибо, чувак. это звучит как гораздо больше проблем, чем оно того стоит. Я просто собираюсь выполнить аварийный запуск другого проекта, который действительно может выполнять последовательный Bluetooth., @Walrus the Cat
Это зависит от того, что вам нужно. Если вам просто нужно отправить и получить текст с низкой скоростью, это не составит большого труда. Если вам нужна большая пропускная способность, то да... это немного головная боль. Вы должны помнить, что BLE означает Bluetooth *Low Energy*. Он создан для экономии заряда батареи., @RubberDuck