Изучаем возможности Meshtastic
Meshtastic – это технология обмена текстовыми сообщениями по беспроводной связи. В первом приближении Meshtastic напоминает SMS, пейджинговую связь, или интернет-чаты вроде Telegram. Только без операторов связи и без интернета. Зачастую Meshtastic позиционируется, как альтернативный канал связи на случай отключения электричества, стихийных бедствий и т.п.
Суть идеи показана на следующей картинке:

Сообщения передаются при помощи LoRa. Это проприетарный беспроводной протокол, оптимизированный по энергопотреблению и дальности связи. Работает на безлицензионных суб-гигагерцовых диапазонах, таких как 433 МГц. Популярен среди любителей IoT, так как идеально подходит для посылки в эфир показаний всевозможных датчиков.
Когда узел сети Meshtastic принимает сообщение от другого узла, сообщение перепосылается в эфир. Таким образом, два узла Meshtastic могут обмениваться сообщениями, даже если между ними нет прямой связи, но есть связь через другие узлы. При большом числе узлов можно обеспечить связью целый город.
Светлое будущее, в котором LoRa есть в каждом смартфоне, пока не наступило. Поэтому приходится костылить. Костыль состоит в том, что за LoRa отвечает отдельная отладочная плата. Нынче такие платы недороги. Приложение на смартфоне общается с платой либо по Bluetooth, либо по UART. Первый вариант обычно удобнее. Можно также по Wi-Fi, но для этого смартфон и плата должны находиться в одной сети.
Для Meshtastic есть и готовые устройства «все в одном». Например, T-Deck Plus от компании Lilygo. Внешне T-Deck выглядит как смартфон с qwerty-клавиатурой, по типу смартфонов BlackBerry. Однако T-Deck сравнительно дорог.
Совместимых плат существует много. Я выбрал Heltec Lora32 v3:

Плата крохотная. Ее размеры составляют всего лишь 52x26 мм.
Так как поблизости от меня нет других пользователей Meshtastic, я приобрел две платы. Экспериментировать было решено на 433 МГц. В России также доступны 868 МГц, но с рядом оговорок. В частности, на предмет того, как часто можно посылать пакеты в эфир. Разбираться желания не возникло, поэтому был выбран хорошо знакомый диапазон. Здесь работают LPD-рации. Кроме того, 433 МГц попадают на радиолюбительский диапазон 70 см.
Сама по себе Lora32 v3 позиционируется производителем, просто как отладочная плата с микроконтроллером ESP32, а также LoRa и OLED-дисплеем на борту. Кто и для чего ее использует – это не забота производителя. На плате есть какая-то прошивка, но чисто демонстрационная. То есть, чтобы Lora32 v3 превратилась в узел Meshtastic, плату предстоит прошить.
Подключаем Lora32 к ноутбуку по USB и говорим:
pip3 install esptool
esptool chip-id
Убеждаемся, что последняя команда распознала плату. Замечаем, что Lora32 использует микроконтроллер ESP32-S3. Качаем stable сборки прошивок под этот микроконтроллер. Прошиваем, используя .bin файл конкретно для Lora32:
unzip firmware-esp32s3-2.6.11.60ec05e.zip
./device-install.sh -f firmware-heltec-v3-2.6.11.60ec05e.bin
Далее нам понадобится мобильное приложение. Я воспользовался версией для Android. Просто открываем Play Store и устанавливаем приложение Meshtastic. Подробно описывать интерфейс не буду, так как он прост и понятен. Кроме того, в будущем он может поменяться.
Находим вкладку Connection и подключаемся к Lora32 по Bluetooth. Пин-код для подключения выводится на OLED-дисплее. Находим настройки платы. В списке Region выбираем Russia. В поле Frequency Override указываем 433.875 МГц. Далее в поле Transmit Power вводим значение 10.
Почему именно 10? Согласно Решению ГКРЧ при Мининформсвязи России от 07.05.2007 № 07-20-03-001 (ред. от 13.07.2020) «О выделении полос радиочастот устройствам малого радиуса действия» на 433 МГц допускается использовать ЭИИМ не более -17 дБВт или 13 dBm. Так как усиление диполя равно 2.15 dBi, получаем ограничение по мощности около 10 dBm, которые мы и указываем в настройках. Это равно 10 мВт.
Тут будет уместно отметить, что под iOS приложение тоже существует. Однако на момент написания этих строк оно не было доступно в России для установки через App Store. Есть еще веб-версия клиента Meshtastic. Для его работы требуется браузер с поддержкой Web Bluetooth, такой как Edge или Chrome. В мобильной версии Chrome для iOS этой поддержки нет. На десктопе у меня приложение тоже не заработало. Точнее, оно никак не может подключиться к Lora32. Кажется, что веб-версия пока сыровата.
Как уже отмечалось, я использовал две платы Lora32. Вторая плату я прошил и настроил так же, как и первую.
В качестве эксперимента попробуем произвести обмен сообщениями между смартфоном под Android и ноутбуком под управлением Ubuntu Linux. Для Linux полноценного клиента Meshtastic не нашлось. Зато нашелся CLI, написанный на языке Python. Для Ubuntu имеется готовый пакет в виде исполняемого файла.
Пример посылки сообщения:
chmod u+x meshtastic_ubuntu
./meshtastic_ubuntu -s /dev/ttyUSB0 --sendtext 'Hello from Ubuntu'
Здесь узел Meshtastic подключен к ноутбуку по UART. Смартфон подключен ко второму узлу по Bluetooth. После выполнения команды на смартфоне видим:

А вот что показывает SDR-приемник:

Сначала сообщение было отправлено первым узлом (внизу водопада), а потом перепослано в эфир вторым узлом (вверху). Выглядит, как если бы все работало.
В приведенном примере мы использовали публичный общедоступный канал с именем LongFast. Также Meshtastic позволяет создавать закрытые каналы с шифрованием сообщений. В мобильном приложении находим вкладку Settings. Это настройки узла Meshtastic. Переходим в Radio configuration → Channels, нажимаем кнопку с плюсиком, вводим название канала и генерируем пароль. Для сохранения настроек на узле нажимаем кнопку Send. Добавление людей на канал происходит при помощи ссылки или QR-кода. Ищите кнопку в правом нижнем углу на экране Conversations.
Измеренная выходная мощность Lora32 v3 соответствует настройкам. Гармоники хорошо подавлены. Штатная антеннка, понятно, довольно скверная. Ее неплохо бы заменить на вертикальный диполь. Потребление тока – 110 мА на прием и 160 мА при передаче с мощностью 10 мВт.
Итак, кому и зачем все это может быть нужно? Чисто субъективно, Meshtastic интересен в первую очередь огромным простором для творчества. Здесь можно ставить те же эксперименты с антеннами, фильтрами и т.д., что и в любительском радио. Только не нужно получать лицензию. Можно проектировать платы и свои устройства по типу T-Deck, а также писать для них прошивки. Можно создать GUI клиент для десктоп-систем или починить проблемы в веб-клиенте.
Можно написать скрипт, чтобы 3D-принтер слал уведомление в Meshtastic по окончании печати. Можно спроектировать чехол для смартфона, чтобы в него помещалась Lora32 и как-то получала питание, без существенного утолщения смартфона. Словом, все ограничено лишь вашей фантазией.
Если вас заинтересовал Meshtastic, рекомендую поискать локальные сообщества пользователей в Telegram. Там есть @meshtastic_russia, @meshtastic_moscow, и множество других. Также существуют технологии, по духу чем-то напоминающие Meshtastic, но не являющиеся им. В качестве примеров можно назвать Reticulum и Meshcore. Энтузиастам mesh-сетей предлагается изучить их самостоятельно.