LoRaMessenger
LoRaMessenger — это автономный чат между узлами ESP32, оснащенными LoRa, с простым беспроводным веб-интерфейсом.
На ESP32 размещена сеть Wi-Fi, которая предоставит простой интерфейс, похожий на чат, который будет отображать онлайн-узлы, полученные и отправленные сообщения, а также некоторые текстовые поля для установки имени узла, узла назначения и сообщения.
Поскольку протокол связи LoRa используется для отправки и получения сообщений, можно настроить два или более модулей для передачи и приема сообщений на расстоянии до нескольких километров.
Большинство модулей ESP32 LoRa, таких как TTGO LoRa32 или Heltec Wifi LoRa 32, оснащены дисплеем, поэтому вы можете использовать их независимо для получения сообщений, как пейджер.
Узел можно легко установить внутри небольшой коробки с батареей, создав таким образом систему связи, которая сможет общаться даже в местах, где нет телефонного сигнала.
Веб-интерфейс
После запуска ESP32 создается новая сеть Wi-Fi под названием LoRaMessenger [номер].
Когда устройство подключается к сети, веб-интерфейс должен открываться автоматически. Если ничего не происходит, доступ к интерфейсу можно получить, открыв веб-браузер и перейдя по IP-адресу ESP32, который по умолчанию равен 1.1.1.1.
На Android страница входа в Wi-Fi, содержащая веб-интерфейс, открывается после подключения к сети Wi-Fi. Таким образом, фоновое сетевое соединение 4G сохраняется даже при использовании LoRaMessenger . Уведомление о входе в сеть должно оставаться на панели уведомлений и его можно открыть в любое время, чтобы снова отобразить интерфейс.
Веб-интерфейс теперь представлен в вашем браузере, чат имеет следующие возможности:
- Вверху страницы можно ввести имя узла, чтобы получатель знал, кто пишет. После нажатия кнопки обновления имя сохраняется и отправляется всем доступным узлам.
- В онлайн-разделе показаны все обнаруженные доступные узлы с некоторой дополнительной информацией, такой как узел ретрансляции, который используется принимающим узлом, если он присутствует, принимающий RSSI, количество переходов между реле и время, прошедшее с момента последнего контакта.
- В разделе сообщений показаны последние 5 (по умолчанию, устанавливаются пользователем) отправленных и полученных сообщений в хронологическом порядке. Под каждым сообщением указано имя всех узлов, правильно принявших сообщение.
- Внизу страницы есть два текстовых поля: первое используется для установки узла назначения, а второе — для написания сообщения.
Поле назначения по умолчанию содержит значение Broadcast. Таким образом сообщение отправляется всем доступным узлам. Вы также можете написать имя узла точно так, как указано в онлайн-разделе, чтобы отправить сообщение только конкретному получателю.
Обратите внимание, что на данный момент необходимо обновить страницу, чтобы обновить полученные сообщения и уведомления о прочтении.
протокол ЛоРа
LoRaMessenger использует собственный протокол связи, каждый отправленный пакет состоит из заголовка и полезной нагрузки.
Заголовок предоставляет информацию, необходимую для правильной работы сети и маршрутизации пакетов. Параметры, содержащиеся в заголовке, следующие:
- NETID: идентификатор сети, указанный в config.h. Это позволяет создавать несколько независимых сетей.
- TTL: время жизни пакета, указанное в config.h. Это значение используется для того, чтобы узнать, сколько переходов сделал пакет, и необходимо алгоритму маршрутизации.
- ПОЛУЧАТЕЛЬ: Номер узла получателя.
- ОТПРАВИТЕЛЬ: номер узла отправителя.
- ПОСЛЕДНИЙ УЗЕЛ: номер узла-отправителя или последнего узла, передавшего пакет.
- СЛЕДУЮЩИЙ УЗЕЛ: номер узла-получателя или следующего узла, необходимого для ретрансляции пакета узлу-получателю.
- ID: Идентификатор пакета, каждый пакет, отправленный с одного и того же узла, имеет свой уникальный идентификатор длиной 4 байта. Это нужно для отбрасывания уже полученных пакетов и для отправки полученного подтверждения.
- ТИП ПОЛЕЗНОЙ НАГРУЗКИ: тип полезной нагрузки, используемый для правильной интерпретации полезной нагрузки. Возможные типы полезных данных: Сообщение, Подтверждение и Объявление.
Полезная нагрузка сообщения:
- РАЗМЕР СООБЩЕНИЯ: Размер сообщения в байтах, необходимый для чтения сообщения.
- СООБЩЕНИЕ: Содержание сообщения. На данный момент это отправляется в виде обычного текста!
Полезная нагрузка подтверждения:
- ID ПОЛУЧЕННОГО ПАКЕТА: Идентификатор полученного пакета сообщения. Он отправляется обратно отправителю, чтобы сообщить ему, что пакет получен.
Объявить полезную нагрузку:
- РАЗМЕР ИМЯ: Размер имени узла в байтах, необходимый для чтения имени.
- ИМЯ УЗЛА: Имя узла. Это отображается в веб-интерфейсе каждого узла и может быть записано в поле назначения, чтобы отправить сообщение только определенному узлу.
Ретрансляция и маршрутизация пакетов
LoRaMessenger создает сеть узлов, способных пересылать сообщения узлам, недоступным напрямую отправителю.
Для этого каждый узел использует таблицу автоматической маршрутизации, содержащую узлы назначения и лучший маршрут для их достижения. Таблица обновляется посредством пакетов объявлений, которые отправляются периодически или при изменении имени всеми узлами.
Текущий алгоритм маршрутизации очень прост и предпочитает меньшее количество переходов. В случае двух маршрутов с одинаковым количеством переходов выбирается тот, который подключен к следующему по силе узлу.
Установка
Эту программу можно легко установить, импортировав проект в Platformio, обновив настройки и загрузив его на доски.
Конфигурация
В папке include находится файл конфигурации с именем config.h. Этот файл содержит все настройки, необходимые для работы LoRaMessenger .
Конфигурация ЛоРа:
- ЛОРАБАНД: Частота чипа LoRa. Частота зависит от вашей платы и местных разрешенных частот. Обязательно используйте только разрешенные частоты в вашей стране. Дополнительную информацию можно найти здесь.
Возможные значения: 433E6, 866E6, 915E6. - SPREADINGFACTOR: коэффициент распространения LoRa. Будьте осторожны при использовании значений выше 7, поскольку LoRaMessenger учитывает рабочий цикл передачи. Высокие значения значительно замедляют время ожидания между передачами и могут повлиять на правильную работу; могут потребоваться другие настройки, такие как время предотвращения коллизий. Возможные значения: 7 - 12.
- TXDBM: мощность передачи чипа LoRa.
Возможные значения: 1–20. - LORADUTY: Рабочий цикл передачи. Обязательно используйте только значения, разрешенные в вашей стране. Возможные значения: 1–99.
- NETID: идентификатор сети LoRaMessenger . Это позволяет создавать несколько независимых сетей.
Возможные значения: 0–255.
Конфигурация L1:
- L1BUFFER: очередь пакетов передачи. Увеличьте, если используете большие сети узлов или высокие коэффициенты расширения.
- TTL: Время жизни пакета. Устанавливает максимальное количество прыжков, которое может сделать пакет до истечения срока его действия.
Возможные значения: 1 (только прямые сообщения, без ретрансляции), >1. - BROADCASTADDR: номер широковещательного адреса.
Конфигурация L3:
- NODENUMBER: номер локального узла. Каждому узлу нужен свой номер узла! Вы можете рассматривать это как эквивалент IP-адреса для обычной сети.
Возможные значения: 1–255. Не используйте один и тот же адрес BROADCASTADDR! - MAXNODES: Максимальное количество узлов, ожидаемых в сети.
- АНОНСЕМИНЫ: объявление о присутствии узла и обновление имени. Это сообщение необходимо для информирования всех узлов о наличии всех остальных узлов. Интервал можно увеличить, чтобы предотвратить спам при использовании статических узлов, высоких коэффициентов распространения или больших сетей.
- INACTIVEMINS: время бездействия, необходимое для того, чтобы узел считался отключенным. Будьте осторожны: используйте значение ANNOUNCEMINS как минимум в 2–3 раза больше или даже больше, если прием плохой.
- INACTIVESECONDSREMOVECHECK: интервал проверки удаления автономных узлов.
Конфигурация сообщений:
- SHOWNMESSAGES: количество сообщений, отображаемых в веб-интерфейсе.
- KEEPNMESSAGES: количество сообщений, которые будут храниться в памяти.
Конфигурация дисплея:
- DISPLAYSTBYSECS: Количество секунд после выключения дисплея.
Конфигурация сети:
- WIFIENABLED: Wi-Fi включен. Это можно использовать для снижения энергопотребления в случае развертывания узла только для ретрансляции сообщений.
- NODENAMEOVERRIDEEN: включение переопределения имени узла. Используется для замены имени узла по умолчанию (Node [номер]) на строку, указанную в NODENAMEOVERRIDE.
- NODENAMEOVERRIDE: переопределение имени имени. Это можно использовать для установки имени узла без его изменения в веб-интерфейсе. Полезно при настройке узла только ретрансляции.
- WIFISSID: префикс имени сети Wi-Fi ( LoRaMessenger [номер]).
- DNSPORT: DNS-порт.
Распиновка:
- SCK: часы SPI.
- МИСО: СПИ МИСО.
- МОСИ: СПИ МОСИ.
- SS: выбор ведомого устройства SPI.
- RST: сброс чипа LoRa.
- DI0: LoRa получает обратный вызов.
- I2CSCL: часы I2C.
- I2CSDA: данные I2C.
- LCDRESET: сброс ЖК-дисплея.
Определения контактов, возможно, потребуется отредактировать в случае использования другой платы (определения контактов основаны на TTGO LoRa32 V2).
Будущие улучшения/исправления
Другие функции, которые запланированы на будущее:
- Шифрование сообщений, начиная с первого, все сообщения отправляются в незашифрованном виде.
- Автоматическое обновление сообщений.
- Тестирование и доработка алгоритма маршрутизации.
Лицензия
Лицензия МТИ.