Настройка bluetooth в Ubuntu
У меня почему-то не получилось настроить подключение к bluetooth через графический интерфейс ubuntu - сначала долго не указывался правильный пин, а потом не удавалось воспользоваться этим устройством. Поэтому решил попробовать через коммандную строку - оказало довольно просто:
# Поиск доступных bluetooth устройств $ hcitool scan Scanning ... 00:13:02:01:70:17 Bluetooth_Bee_V2 # Подключаемся к нему (после этого у нас спросят PIN код, для моего Bluetooth Bee 2.0 это 1234): $ sudo rfcomm connect 0 00:13:02:01:70:17 1 Connected /dev/rfcomm0 to 00:13:02:01:70:17 on channel 1 Press CTRL-C for hangup # Оставляем это в консоли, теперь можем подключаться к нему в тепрминале как com-порту по адресу: /dev/rfcomm0
Важно! В Ubuntu доступ к rfcomm0 имеет только root, поэтому не из под рута подключение происходить не будет – будем получать ошибку:
stty: /dev/rfcomm0: Device or resource busy
Чтобы дать доступ к rfcomm0 нашему пользователю рекомендуют, создать файл:
/etc/udev/rules.d/rfcomm.rules
И записать в него:
KERNEL=="rfcomm*", GROUP="dialout"
Перезагружаем компьютер для применения изменений.
Но у меня это не сработало!
Также как и совет:
sudo chmod u+s /usr/bin/rfcomm
Поэтому саму работу с портом приходится делать из-под root. Хотя подключение устанавливается и из обычного пользователя. Почему это происходит я так и не разобрался. Кто сможет помочь буду рад.
Если что - мой пользователь a состоит в группе dialout
$ cat /etc/group | grep dialout
dialout:x:20:a
Полезные комманды:
$ ps ax | grep rfcomm - список процессов
$ lsof | grep rfcomm – проверить разрешения
$ sudo rfcomm -a состояние подключения
$ hciconfig подробная информация по принятым-переданным данным
Проверяем соединение с Arduino
Делаем простой тест – заливаем скетч в Ардуино и проверяем, приходят ли приветы:
void setup() { Serial1.begin(9600); } void loop() { Serial1.println("Hello, Stepa!"); delay(1000); }
Если у вас не Leonardo, то Serial1 поменяйте просто на Serial. На Leonardo при прошивке bluetooth убирать не надо. На остальных Arduino надо отключать bluetooth каждый раз перед перепрошивкой.
Программирование Bluetooth Xbee
Мне не понятно как на Arduino Leonardo (Romeo V2) связаться с Xbee в коммадном режиме режиме для изменения рабочей скорости передачи данных. Хочу увеличить с 9600 до 57600 бод – для увеличения скорости, а самое главное, чтобы не менять код библиотек ROS (от которой я всё же отказался и решил написать свою прослойку), где везде используется скорость 57600 бод.
Для изменеия скорости подключил Arduino Uno + Xbee Shield for Arduino + Xbee.
На Xbee Shield for Arduino надо выставить рычажки: XBEE/USB в положение USB (правое) и RUN/PROG в положение RUN (верх).
На самом Xbее рычажок в положение AT Mode.
После этого открывает Arduino IDE, выбираем определившейся порт, открываем Serial Monitor (Ctrl+Shift+M), в нем выставляем скорость 38400 бод (скорость работы в коммандном режиме) и выставляем настройку “both NL & CR”. После этого посылаем комманду:
AT
должны получить в ответ
OK
Если получили ERROR:(0) - тоже очень хороший знак – связь есть! Скорее всего до этой комманды в буфере порта были ещё какие-то символы. Повторная посылка несколько раз команды AT до состояния ответа ОК – решает проблему.
если не получили, то проверяем что сделали не так – возможно ещё на плате Arduino Uno залит скетч, который пишет что-то в порт. Залейте на всякий случай пустой скетч в Arduino.
Когда получим в ответ ОК, изменяем частоту:
AT+UART=57600,0,0
Должны получить ответ
OK
Проверяем все ли применилось:
AT+UART?
Должны получить:
+UART:57600,0,0 OK
Отключаем питание от Arduino Uno, отсоединяем Xbee, переключаем рычажок на Xbee в рабочий режим и присоединяем к Arduino Leonardo.
Документация по Xbee:
У меня та же проблема, так и запускаем из под рута:
http://forum.ubuntu.ru/index.php?topic=193623.0