Превращаем Raspberry Pi 3 в Eddystone URL beacon

4bcd5930d456b0b84e3ff75774bf13cd.jpg

Мини ПК Raspberry Pi 3 вышел совсем недавно, и через совсем короткое время после появления системы на рынке на ее основе стали создавать интереснейшие проекты. Один из них, весьма специфичный — это превращение «малинки» в Eddystone URL beacon.

Eddystone — это собственный открытый формат маяков от Google (спецификация здесь), причем эта технология совместима и с Android OS, и с iOS. Для того, чтобы это работало, нужно держать Bluetooth LE постоянно включенным на смартфоне — это, пожалуй, единственное условие. Все, что требуется для превращения RPI 3 в Eddystone URL beacon — сам мини-ПК, источник питания для него и SD карта. Остальное — под катом.
Так вот, еще немного об Eddystone. Его плюсом является возможность отправки трех пакетов вместо одного. Это UID, URL, телеметрия.

  • Eddystone-UID. Это тот же идентификатор — аналог iBeacon (UUID, major, minor). Состоит из 2-х частей: Namespace ID (10 байт), Instance ID (6 байт).
  • Eddystone-URL.Теперь маяки транслируют URL до 18 байт. Проблему длинных урлов нам помогут решить URL shorteners. Например, сервис от того же Google goo.gl. Из такого адреса touchin.ru/portfolio/squawk можно получить короткий вариант goo.gl/PidTf3. Это главное нововведение, немного позже объясню почему.
  • Eddystone-TLM (Telemetry). Доступны такие данные по маяку:


  • уровень заряда
  • количество пакетов, отправленных с момента подключения к источнику питания
  • время активности маяка с момента подключения к источнику питания
  • температура

Телефон, который получает эти пакеты, может либо предупредить о получении информации определенного типа, или выполнить какое-то действие.

Настройка «малинки»

1. Скачиваем Raspbian;
2. Устанавливаем образ;
3. Ищем IP «малинки». Сделать это можно при помощи «the Raspberry Pi Finder» или же nmap.

$ sudo nmap -sP 192.168.2.0/24
или
$ arp -a | grep «b8:27»

4. Подключаемся к Raspberry:

$ ssh pi@

5. Ищем информацию по команде hciconfig

$hciconfig -h

6. Включаем Bluetooth девайса

pi@raspberrypi:~ $ sudo hciconfig hci0 up

7. Устанавливаем режим «advertise and not-connectable»

pi@raspberrypi:~ $ sudo hciconfig hci0 leadv 3

8. Вводим данные для Beacon

pi@raspberrypi:~ $ sudo hcitool -i hci0 cmd 0×08 0×0008 17 02 01 06 03 03 aa fe 0f 16 aa fe 10 00 02 77 65 62 67 61 7a 65 72 08 00 00 00 00 00 00 00 00

Вещаем:

Option Description
0×08 #OGF = Operation Group Field = Bluetooth Command Group = 0×08
0×0008 #OCF = Operation Command Field = HCI_LE_Set_Advertising_Data = 0×0008
17 Length. The hexadecimal 17 converts to 23 decimal which is the number of bytes that follow
02 Length
01 Flags data type value
06 Flags data
03 Length
03 Complete list of 16-bit Service UUIDs data type value
aa 16-bit Eddystone UUID
fe 16-bit Eddystone UUID
0f Length. The hexadecimal 0f converts to 15 decimal which is the number of bytes that follow
16 Service Data data type value
aa 16-bit Eddystone UUID
fe 16-bit Eddystone UUID
10 Frame Type = URL
00 TX Power (this should be calibrated)
02 URL Scheme (http:// = 0×02)
77 «w» in hexadecimal
65 «e» in hexadecimal
62 «b» in hexadecimal
67 «g» in hexadecimal
61 «a» in hexadecimal
7a «z» in hexadecimal
65 «e» in hexadecimal
72 «r» in hexadecimal
08 .org (.org = 0×08)
00
00
00
00
00
00
00
00

Пример выше позволяет отправлять адрес блога автора идеи по Eddystone и «малинке». Если нужно отправлять свой URL, меняем его здесь.

Для обнаружения Raspberry Pi beacon с iPhone используем следующее видеоруководство:

Android должен сделать все автоматически при условии наличия ОС Android 4.3.2 или более новой версии, включенным bluetooth, геологацией и разрешением определять местоположение для Chrome. Можно использовать и веб-приложение для того, чтобы все это заработало сразу и без проблем.

Страничка автора проекта.

© Geektimes