Автономная система голосовой связи с поддержкой Wi-Fi на базе Android-приложения и устройства Raspberry Pi

Автономная система голосовой связи с поддержкой Wi-Fi на базе Android-приложения и устройства Raspberry Pi

Если у вас нет стабильной сотовой связи или доступа к Wi-Fi, но есть необходимость реализовать систему коммуникации, можно организовать автономную систему голосовой связи на базе устройства Raspberry Pi и Android-приложения.

Автор: Retia

Казалось бы, уже существуют приложения навроде Bridgefy для создания узловой сети с целью коммуникации с другими устройствами через Bluetooth. Однако, когда вы едете в колонне автомобилей и хотите написать сообщение людям, находящимся в других транспортных средствах, металлические конструкции вокруг сделают эту задачу практически невозможной. Даже когда вы находитесь снаружи, но есть множество препятствий, блокирующих Bluetooth-сигнал, лучше воспользоваться каким-то другим решением.

В случае, когда мощности маршрутизатора точки доступа недостаточно для подключения соседей, на выручку может прийти устройство Raspberry Pi с приличными беспроводным сетевым адаптером, которое в связке с системой PirateBox позволяет анонимно расшаривать изображения, видео, аудио файлы, документы, голосовые коммуникации и другой контент со всеми, кто подключится к точке доступа.

В связи с протестами по всему миру в некоторых районах правоохранительные органы могут блокировать сотовую связь, чтобы протестующие не могли связываться друг с другом. Проект, рассматриваемый в данной статье, представляет собой нечто вроде системы «уоки-токи» на основе Wi-Fi, используя которую, каждый, кто подключился, может обмениваться важной информацией.

Что понадобится

  • Raspberry Pi 3: Мы продолжаем использовать одну из этих моделей, поскольку для новой версии Raspberry Pi 4 пока нет образа PirateBox. Вы можете использовать любую другую модель при наличии беспроводного адаптера в случае отсутствия поддержки с Wi-Fi. Мы используем модель Raspberry Pi 3 B+.
  • USB флешка: Флеш-накопитель будет служить в качестве жесткого диска для PirateBox. Размер зависит от ваших нужд. Чем больше, тем лучше. Если будет много фото и видео, попробуйте внешний жесткий диск на 1 ТБ.
  • Карта MicroSD: Рекомендуется размером не менее 32 ГБ.
  • Картридер для MicroSD: Есть много разные вариантов, любой из которых подойдет.
  • Источник питания: Нужен для запитывания Raspberry Pi.
  • Ethernet-кабель: Используется для подключения Raspberry Pi к роутеру для настройки. Потом не понадобится.
  • Беспроводной сетевой адаптер и антенна с большим коэффициентом усиления: если вы хотите более сильный сигнал, что, скорее всего, так и есть, то понадобится хороший и надежный Wi-Fi адаптер (подойдет модель Alfa Tube-U) с большой ненаправленной антенной для наружного использования, например, во время путешествий или на море. Убедитесь, что адаптер совместим с Kali Linux, чтобы вы могли пользоваться этим устройством для других целей. В этом случае адаптер практически гарантированно будет совместим с системой PirateBox. Кроме того, для более надежного соединения может пригодиться Wi-Fi усилитель. В качестве эксперимента можно воспользоваться адаптером с панельной антенной, явно указывать на цель и быть в середине путешествующей колонны, однако лучше пользоваться устройствами, с которыми точно не возникнет проблем.

Шаг 1. Загрузка образа Piratebox

PirateBox – очень крутой инструмент, который можно использовать в связке с Raspberry Pi. Эта утилита функционирует как автономный коммуникационный блок, доступный для подключения через беспроводную сеть с целью совместного использования чата, файлового сервера и других функций вместе с близлежащими устройствами. В данной статье нас будет интересовать тот факт, что PirateBox основан на технологии маршрутизатора с открытым исходным кодом со всеми функциями коммутации, необходимыми для голосовых коммуникаций.

Вначале нужно загрузить образ, заточенный под Raspberry Pi, при помощи BitTorrent-клиента. В этом руководстве используется Deluge, доступный для Windows, Mac и Linux. Загрузите последнюю версию для вашей операционной системы и следуйте инструкциям во время установки.

Как только BitTorrent-клиент установлен, переходим к загрузке нужного образа для Raspberry Pi. Кликните на одну из ссылок ниже, соответствующей модели вашего устройства.

После загрузки кликните на torrent-файл, который должен открыться в клиенте Deluge с выбранным образом для PirateBox. Чтобы начать, кликните Add. Если все сделано правильно, должна начаться загрузка, как показано на скриншоте ниже. Кроме того, признаком хорошего тона является сидирование, в течение некоторого времени после того, как вы скачали файл.

Рисунок 1: Загрузка образа PirateBox

Шаг 2. Копирование образа на карту MicroSD

Теперь нужно записать образ на карту microSD. Наиболее оптимальный вариант – отключить все внешние жесткие диски и другие USB устройства, чтобы вы случайно не записали образ на неправильный носитель, после чего вставить карту в адаптер и подключить к рабочей системе.

Если у вас уже есть программа для записи образа на карту, используйте ваше приложение. В противном случае скачайте утилиту Etcher, которая доступна для Windows, Mac и Linux и имеет простейший пользовательский интерфейс. Etcher должен определить вашу операционную систему автоматически. Если нет, убедитесь, что загружаете корректную версию для вашей ОС, и далее следуйте инструкциям установки. Затем запустите Etcher (если не произошло автоматического запуска после установки) и выберите загруженный образ.

Рисунок 2: Запись образа на карту

Далее убедитесь, что выбран нужный диск, и запишите образ. По завершению SD карта безопасно отключится самостоятельно. Если вдруг, что бывает довольно редко, во время записи возникли ошибки, воспользуйтесь утилитой ApplePiBaker для Mac или Win32 Disk Imager для Windows.

Шаг 3. Запуск Raspberry Pi

Вначале вставьте SD карту в слот внизу Raspberry Pi, после чего подключите устройство к Ethernet-кабелю и к электросети. Другой конец Ethernet-кабеля будет подключен к роутеру, который в свою очередь подключен к вашему компьютеру через кабель или беспроводное соединение.

Шаг 4. Подключение к PirateBox

Чтобы узнать IP-адрес устройства, воспользуйтесь утилитой arp-scan, как показано в примере ниже. Один из найденных IP-адресов принадлежит Raspberry Pi и, скорее всего, нашей системе PirateBox, если вокруг нет других устройств подобного рода.

~$ arp-scan -l

Interface: en0, datalink type: EN10MB (Ethernet)
Starting arp-scan 1.9.5 with 256 hosts (https://github.com/royhills/arp-scan)
192.168.77.1    b8:27:eb:4d:1f:f2       Raspberry Pi Foundation
192.168.77.128  b4:f1:da:ec:4c:e7       (Unknown)

516 packets received by filter, 0 packets dropped by kernel
Ending arp-scan 1.9.5: 256 hosts scanned in 1.858 seconds (137.78 hosts/sec). 2 responded

Теперь проверим, что у нас есть подключение. Во время использования команды, приведенной ниже, нужно поменять IP-адрес. На вопрос о продолжении подключения укажите Yes, а затем введите пароль.

~$ ssh alarm@192.168.77.1

The authenticity of host '192.168.77.1 (192.168.77.1)' can't be established.
ECDSA key fingerprint is SHA256xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
Are you sure you want to continue connecting (yes/no)? yes
Waarning: Permanently added '192.168.77.1' (ECDSA) to the list of known hosts.
alarm@192.168.77.1's password:

После появления заставки PirateBox считайте, что подключение выполнено успешно.

\______   \______   \__|___________ _/  |_  ____\______   \ _______  ___
 |       _/|     ___/  \_  __ \__  \\   __\/ __ \|    |  _//  _ \  \/  /
 |    |   \|    |   |  ||  | \// __ \|  | \  ___/|    |   (  < > >    <
 |____|_  /|____|   |__||__|  (____  /__|  \___  >______  /\____/__/\_ \
        \/                         \/          \/       \/            \/
Website: http://piratebox.cc                 PirateBox Version: 1.1.4
Forum:   http://forum/piratebox.cc           Build date: 11-05-2018
IRC:     #piratebox irc.freenode.net         Be open  --  Share freely!

First Steps After Flashing
1. Change password of alarm user
 > passwd
2. Change password of root user
 > sudo password root
3. Enable Fake-Timeservice
 3.1 Set date and time
  # Disable network time sync
  > sudo timedatectl set-ntp false
  # Set time to "Mon May 23 17:42:00" (Format: CCYYMMDD hhmm)
  > sudo date -s "20170523 1742"
  > cd /opt/piratebox && sudo ./bin/timesave.sh ./conf/piratebox.conf install
 3.2 Enable on startup
  > sudo systemctl enable timesave
4. Enable the Kareha Image and Discussion Board
  > sudo /opt/piratebox/bin/board-autoconf.sh
5. Enable USB thumb drive share OR extend SDCard
 USB: > sudo /opt/piratebox/rpi/bin/usb_share.sh
 SDCard: > sudo /opt/piratebox/rpi/bin/sdcard_share.sh
6. Enable UPnP Media Server
  > sudo cp /etc/minidlna.conf /etc/minidlna.conf.bkp
  > sudo cp /opt/piratebox/src/linux.example.minidlna.conf /etc/minidlna.conf
  > sudo systemctl stsart minidlna
  > sudo systemctl enable minidlna
7. Enable RealTimeClock timekeeping (needs DS3231 or 1307 RTC module!)
  > sudo systemctl enable rpi_hwclock
[alarm@alarmpi ~]$

Шаг 5. Изменение Wi-Fi карты (необязательно)

Если вы используете внешний Wi-Fi адаптер, а не внутреннюю карту, то после подключения к PirateBox нужно изменить одну переменную в файле /boot/wifi_card.conf с целью переключения от внутренней карты на сетевой адаптер, который мы будем использовать. Вначале нужно найти имя карты при помощи ifconfig.

[alarm@alarmpi ~]$ ifconfig

Если вы видите только одну карту, как, например, wlan1, воспользуйтесь командой ниже, и вы, скорее всего, увидите две карты (wlan1 и wlan0).

[alarm@alarmpi ~]$ ip a

Чтобы активировать вторую карту, используйте команду ниже (естественно, с заменой имени). Здесь потребуется ввод пароля. Теперь, если вы вновь запустите команду ifconfig, то должны появиться две карты.

[alarm@alarmpi ~]$ sudo ifconfig wlan0 up

[sudo] password for alarm:

Теперь откройте конфигурационный файл, упомянутый ранее, в редакторе nano, и убедитесь, что в этом файле указано имя Wi-Fi адаптера, который вы используете. Для выхода из nano нажмите Control-X. В случае изменения имени, введите Y, а затем нажмите Enter для сохранения изменений.

[alarm@alarmpi ~]$ sudo nano /boot/wifi_card.conf

GNU nano 2.9.6              /boot/wifi_card.config

wlan1

Теперь в конфигурационном файле будет указана Wi-Fi карта, используемая Raspberry Pi. В нашем случае используется внешняя карта, но, если нужно переключиться обратно, откройте тот же файл и поменяйте имя обратно.

Шаг 6. Установка приложения Intercom и подключение к PirateBox

Загрузите и установите приложение «Intercom for Android», используемое для коммуникации на всех Android-устройствах, которые будут взаимодействовать друг с другом при помощи PirateBox Pi.

Рисунок 3: Страница приложения Intercom for Android

Как только приложение будет готово для тестирования, отключите мобильные данные на Android-устройстве, и в настройках Wi-Fi укажите вашу карту, используемую PirateBox Pi. Возможно, телефон выдаст предупреждение об отсутствии интернета.

Рисунок 4: Настройка Wi-Fi для подключения к PirateBox

После подключения к PirateBox, должна открыться домашняя страница, однако интерфейс PirateBox нас пока не интересует.

Рисунок 5: Домашняя страница PirateBox

Шаг 7. Коммуникация с другими устройствами из той же Wi-Fi сети

Откройте приложение Intercom for Android. Должен отобразиться список устройств, подключенных к PirateBox. В противном случае кликните на компас.

Рисунок 6: Внешний вид интерфейса в случае отсутствия подключенных устройств

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

Рисунок 7: Перечень подключенных устройств

Если вы нажмете на иконку Wi-Fi должен выполниться пинг, после чего прозвучит сигнал, свидетельствующий о подключении и готовности к коммуникации. Для общения нажмите и удерживайте кнопку «PTT» с целью начать разговор. Все подключенные устройства должны вас услышать (если открыты приложения на этих устройствах).

Кроме того, вы можете кликнуть на иконку в виде круга с точкой внутри для переключения режимов. В этом случае будет активирована функция детектирования голоса, и вам не нужно постоянно удерживать кнопку «PTT». После начала разговора ваш голос будет распознан и передан другим устройствам в сети. Для переключения обратно кликните на иконку в виде комментария.

Рисунок 8: Два режима коммуникации: по нажатию PTT (режим рации) и автоматическое детектирование голоса

После выполнения всех инструкций из этого руководства вы должны уметь одновременно подключаться и разговаривать со множеством Android-телефонов – даже когда отсутствует сотовая связь. Неплохая альтернатива, не так ли?

Дополнительные возможности

У рассмотренного проекта есть некоторые ограничения, но в целом, если вы хотите продолжить исследования этой области, можете ознакомиться с Raspberry Pi в связке с OpenWrt (прошивкой с открытым исходным кодом для роутера). В этом случае появятся новые опции, и вы сможете реализовать другие интересные проекты, но настройка будет чуть сложнее. В общем, эта тема не совсем для новичков.

Ваша приватность умирает красиво, но мы можем спасти её.

Присоединяйтесь к нам!