Friday, February 12, 2010

Python + Bluetooth, неужели просто?

Известно что Python один из самых просты и понятных языков программирования, его код прост и понятен не подготовленному пользователю. Вот решил проверить на себе.




1. Задача
Попробуем обнаружить, включенные по близости bluetooth устройства, определим их имя и адрес. Если повезет то может и удастся переслать файл.
2. Необходимо установить
Использовать будем библиотеку pybluez и lightblue.
[code lang=python]sudo apt-get install python-bluez, lightblue[/code]
3. Оброз наявной информации
1) Что такое bluetooth почитаем здесь:
http://en.wikipedia.org/wiki/Bluetooth
2)Очень неплохая книга, правда на ангилйском языке: Bluetooth Essentials for Programmers
http://www.btessentials.com/examples/examples.html
http://www.ebook3000.com/Bluetooth-Essentials-for-Programmers_4851.html
3)Описание библиотеки lightblue:
http://lightblue.sourceforge.net/
4. Реализация
Вот есть простой пример:

#!/usr/bin/env python
from bluetooth import *
target_name = "k750i";
target_address = None

nearby_devices = discover_devices()
for address in nearby_devices:
    if target_name == lookup_name( address ):
        target_address = address
        break
if target_address is not None:
    print "found target bluetooth device with address", target_address
else:
    print "could not find target bluetooth device nearby"
пере запуском необходимо отредактировать следующую строку:
target_name = "My Phone" 
My Phone — название Вашего телефона или bluetooth устройства. Перед запуском нужно конечно же что бы bluetooth на телефоне был включен и выставлена опция «видимый для всех»
Программа должна по идеи ответить:
found target bluetooth device with address 00:12:34:56:78:AB
00:12:34:56:78:AB - собственно адрес Вашего усройства.
Немного модифицируем скрипт:
#!/usr/bin/env python
from bluetooth import *
print 'start of search'
nearby_devices = discover_devices()
for address in nearby_devices:
    print 'name of device = ', lookup_name( address ),'address = ',address
print 'end'
Очевидно, что discover_devices() ищет все включенные по близости устройства и сохраняет их в словарь, а последующий цикл выводит имена и 48 битные адреса устройств.
Результат выполнения:
start of search
name of device = k750i address = 00:12:34:56:78:AB
name of device = nokia 6300 address = 00:12:34:56:78:AB
end
Так искать bluetooth устройства получилось. Правда практичной задачу особо не назовешь. В следующей заметке попробую написать о передачи файла с ноутбука на телефон с помощью библиотеки lightblue, так же надо бы разобраться с функцией иследования сервисов bluetooth устройства.

No comments:

Post a Comment