Превращаем Raspberry Pi 3 в Eddystone URL beacon
Мини ПК 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. Можно использовать и веб-приложение для того, чтобы все это заработало сразу и без проблем.
Страничка автора проекта.