3

У меня был этот вопрос о переполнении стека, но было предложено перенести сюда. Это было помечено для модераторского внимания, но я не уверен, как этот процесс работает, и я не получил никаких отзывов, поэтому решил, что задам вопрос здесь:

Я пытаюсь установить соединение Bluetooth Smart между двумя Raspberry PI, где я могу использовать IPSP (профиль поддержки интернет-протокола), чтобы я мог обмениваться данными по протоколу IPv6 с помощью 6LoWPAN.

Мне удалось успешно установить эту связь между Raspberry Pis и комплектом разработки Nordic nRF51, однако в качестве доказательства концепции я сейчас пытаюсь установить это соединение между двумя коробками Raspberry Pi без комплекта разработки Nordic nRF51.

Итак, мой первый шаг - настроить Raspberry Pis. Я сделал это с помощью шагов в nRF5 IoT SDK компании Nordic (https://developer.nordicsemi.com). Я знаю, что Raspberry Pis настроены правильно, потому что они оба работают с платой nRF51. Я могу установить соединение между платами Raspberry Pi и nRF51 и ping6 платой nRF51 от Raspberry Pi.

Теперь, чтобы установить соединение Bluetooth между Raspberry Pis, я выполняю следующие шаги: На главном устройстве я запускаю следующие команды:

#need root access
sudo su

#enable 6lowpan over Bluetooth le
echo 1 > /sys/kernel/debug/bluetooth/6lowpan_enable

#start advertising Bluetooth LE service
hciconfig hci0 leadv

На ведомом устройстве я запускаю следующие команды:

#need root access
sudo su

#enable 6lowpan over Bluetooth le
echo 1 > /sys/kernel/debug/bluetooth/6lowpan_enable

#establish le connection to master
hcitool lecc 5C:F3:70:XX:XX:XX

Команда hcitool lecc всегда возвращает «Connection Handle 64». На данный момент у меня есть стабильное соединение между двумя устройствами, которое я могу проверить с помощью команды hcitool con .

Теперь я могу выполнить следующую команду на главном или подчиненном устройстве, где mac-адрес - это адрес устройства Bluetooth, к которому я подключаюсь:

echo “connect 5C:F3:70:XX:XX:XX 1” > /sys/kernel/debug/bluetooth/6lowpan_control

Какой бы Raspberry Pi я не запускал, команда устанавливает соединение 6lowpan, и если я запускаю команду ifconfig, я вижу новое устройство bt0. Другой Raspberry Pi, однако, не получает устройство bt0. Я попытался выполнить команду ifconfig bt0 up, а также выполнить ту же команду echo (изменение mac-адреса), но ни один из них не дал мне устройство bt0.

Устройство bt0, которое появляется на Raspberry Pi, на котором я запускал команду, всегда исчезает через 39 секунд. В файле журнала /var /log /syslog кажется, что демон ntpd начинает прослушивать интерфейс bt0, когда он появляется, а затем ровно через 39 секунд он обнаруживает, что интерфейс пропал, и освобождает его. Я попытался назначить IPv6-адрес устройству, когда оно подключено, с помощью следующей команды:

ifconfig bt0 inet6 add 2001:db8::5cf3:70ff:feXX:XXXX/64 

Затем я запустил ping6, чтобы постоянно пинговать его в надежде на некоторое время поддерживать интерфейс, но через 39 секунд интерфейс все еще не работал.

Я использую два Raspberry Pi 2 Model B, и оба адаптера Bluetooth являются устройствами Broadcom Corp BCM20702A0 Bluetooth 4.0 (для получения информации об адаптере использовался lsusb ). Несмотря на то, что адаптеры указаны как Bluetooth 4.0, я смог успешно использовать их с комплектом разработки Nordic nRF51 для установления соединения 6LoWPAN.

После всех моих экспериментов, вот вопросы, которые у меня есть:

  • Можно ли сделать то, что я пытаюсь сделать?
  • Кто-нибудь смог успешно установить соединение 6LoWPAN между двумя устройствами Linux, которое могло бы сказать мне, что мне не хватает в моих шагах?
  • Нужно ли, чтобы одно из устройств Bluetooth было совместимо с Bluetooth Smart 4.2, чтобы правильно установить это соединение?
  • Кто-нибудь знаком с bluez, который может порекомендовать дополнительные шаги, чтобы попробовать?

Любая помощь будет принята с благодарностью.

Джон

РЕДАКТИРОВАТЬ 1:

Мне удалось установить соединение между Ubuntu 14.04 и Raspberry Pi, установив предварительно собранное ядро 3.19, загруженное отсюда: http://kernel.ubuntu.com/~kernel-ppa/mainline/linux-3.19. уг-очереди /2016-01-07-яркий /

Я до сих пор не понимаю, почему между двумя Raspberry Pis не работает, но если я найду решение, я опубликую его здесь.

РЕДАКТИРОВАТЬ 2:

Ubuntu 14.04 запускает Bluez 4, в то время как Raspberry Pis запускает Bluez 5. Так как я не смог соединить два Raspberry Pis (работает с Bluez 5), я решил, что попытаюсь соединить два экземпляра Fedora 23 с запущенным Bluez 5, чтобы увидеть, что-то не так с Блюз или Малиновый Пис. В моих экспериментах я испытывал то же поведение с двумя экземплярами Fedora 23, что и с двумя Raspberry pis (где соединение 6lowpan обрывается менее чем через 30 секунд после подключения).

Версия bluez для экземпляров Fedora 23 - 5.35, а версия bluez для Raspberry Pis - 5.23.

У кого-нибудь есть идеи, почему это происходит с Bluez 5.x?

Спасибо,

2 ответа2

2

Решение

Я только что решил проблему. проблема была с ядром. Я установил Ubuntu 15, но у меня была та же проблема, что и у Raspberry Pis, поэтому я скачал исходный код для ядра 4.4, настроил его и собрал новое ядро. Когда появилось новое ядро, все работало отлично. Не уверен, что это был уровень исправления ядра или конфигурации, но теперь он работает.

1

Спасибо за ваше сообщение. В прошлом году я работал над IPv6 через BTLE и столкнулся с той же проблемой, что и вы. Примерно через 39 секунд соединение IPv6 через BLE между моим ведущим и подчиненным устройствами отключается. Это случилось со мной в ядре Linux v4.1.x (как для ведущего, так и для ведомого). И master, и slave используют одни и те же платформы (извините, я не могу раскрыть какие-либо детали платформ из-за конфиденциальности). Все, что я могу сказать, это то, что это платформа x86_64 под управлением ОС Linux, созданная с использованием платформы Yocto.

Затем, что интересно, мне удалось получить более многообещающие результаты на ядре 3.19. На самом деле я использовал uBuntu 14.04 LTS на обеих моих платформах. Мне удалось обновить версию BlueZ вручную с BlueZ v4.101 до BlueZ v5.x. Я не могу точно вспомнить, какую версию BlueZ 5 я использовал. Затем я выполнил шаги, аналогичные вашим, и смог успешно удерживать его в течение длительного периода времени. Я помню, как собирался на ужин после этого, и он все еще держится через 30 минут. Затем я продолжил тестирование всю ночь, и связь осталась!

Спасибо, что предоставили мне эту информацию о том, какую версию ядра Linux использовать. Что касается примененного исправления, возможно, оно может быть связано с одним из следующих примененных исправлений:https://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/log/?id= ссылки / метки / v4.4.27 & кварта = Grep & д = 6LoWPAN

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .