Если вы занимаетесь сбором данных на обширной территории, да еще не охваченной интернетом, возникает задача передачи данных на расстояния, исчисляемые километрами без использования WiFi и сети Ethernet.

В решении этой задачи вам помогут радиомодули, передающие данные с использованием технологии связи на большие расстояния (Long Range, LoRa). Эта технология запатентована компанией Semtech и реализована в микросхемах приемо‑передатчиков (трансиверов), таких как SX1268, SX1276, SX1278.

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

К сожалению, скорость передачи данных LoRa невелика, порядка 2400-19200 бит/c.  Однако этого достаточно, например, для систем телеметрии и удаленного контроля, систем умного дома или других подобных систем.

Изучите законодательство

В законодательстве есть ограничения по используемым частотам, уровням мощности и времени передачи. Найдите перечень и условия использования безлицензионных диапазонов частот (Industrial, Scientific, Medical, ISM) для использования протокола LoRa в вашей стране.

В России правила использования радиочастотного спектра устанавливаются Государственной комиссией по радиочастотам (ГКРЧ). Подробнее об использовании безлицензионных частот можно почитать здесь.

На момент написания этой статьи в России к безлицензионным диапазонам частот отнесены 433 МГц, 868 МГц, 2400 МГц и 5725 МГц.

Для создания сетей интернета вещей в России используют диапазон частот от 864 МГц до 869 МГц с мощностью до 25 мВт. При этом выделяются поддиапазоны от 864,0 МГц до 865,0 МГц и 868,7 МГц до 869,2 МГц. В первом из этих поддиапазонов действуют дополнительные ограничения: период активной работы может составлять не более 0,1%, и не разрешается работать вблизи аэропортов. У второго поддиапазона таких ограничений нет.

Законодательство постоянно изменяется, поэтому его необходимо отслеживать.

Особенности протокола LoRa

Метод модуляции LoRa использует технику расширения спектра (spread spectrum modulation) и вариацию линейной частотной модуляции (chirp spread spectrum, CSS). При этом данные кодируются широкополосными импульсами с частотой, изменяющейся на некотором временном интервале. Также применяется прямая коррекция ошибок (forward error correction, FEC).

Большая дальность связи при невысокой мощности передатчика достигается благодаря тому, что протокол LoRa принимает сигналы ниже уровня шума. Подробнее о протоколе LoRa можно почитать на этом сайте.

Радиомодули LoRa компании EBYTE

В этой статье мы будем подключать к Repka Pi и Raspberry Pi модули LoRa производства компании EBYTE с интерфейсом UART. Описание модулей можно найти здесь. Кроме того, один из периферийных узлов будет сделан на базе микрокомпьютера Micro:bit.

Модули LoRa и антенны к ним можно купить на Алиэкспресс. В табл. 1 перечислены некоторые модули производства EBYTE с интерфейсом UART, рассчитанные на разные частотные диапазоны и мощность.

Табл. 1. Модули EBYTE с технологией LoRa

Мощность модулей может регулироваться в пределах, указанных в табл. 1. Выбирая частотный диапазон и мощность, сверяйтесь с законодательством в области распределения частот для LoRa вашей страны. Есть также способы увеличения дальности без увеличения мощности передатчика. Это использование антенн с большим усилением, направленных антенн и ретрансляторов.

Заметим, что компания EBYTE выпускает модули LoRa с термокомпенсированным кварцем (TCXO), что улучшает качество связи в уличных условиях.

Перечисленные в табл. 1 модули производства EBYTE очень легко установить на макетную плату, но есть SMD‑модули.

На модуле EBYTE имеется семь контактов: M0, M1, RXD, TXD, AUX, VCC и GND, а также разъем антенны (рис. 1).

Рис 1. Модуль LoRa E32 433T30D

Контакт GND нужно объединить с землей микрокомпьютера Repka Pi.

На контакт VCC следует подать питающее напряжение. Согласно документации, напряжение питания должно лежать в диапазоне от 3,3 В до 5,2 В. Если максимальная мощность не нужна, используйте источник питания 3,3 В.

Контакты RXD и TXD предназначены, соответственно, для приема и передачи данных с помощью протокола UART. Их нужно подключить к соответствующим контактам GPIO Repka Pi.

Аналогично, к GPIO подключаются контакты M0, M1 и AUX.

Первые два из них задают режим работы радиомодуля, например, режим установки параметров (конфигурирования), режим обычной работы, режим сохранения мощности и, наконец, режим автоматического перехода из режима сохранения мощности в активный режим при получении данных по радиоканалу.

Для изменения параметров модуля на выводы M0 и M1 нужно подавать напряжение 3,3 В, что соответствует логической единице. В режиме передачи данных на эти выводы нужно подать нулевое напряжение.

Контакт AUX используется для проверки, готов ли радиомодуль к получению команд и данных, либо он занят выполнением какой‑либо операции. В состоянии готовности на контакте AUX будет высокий уровень напряжения, а при занятом модуле — нулевой. Если модуль занят, то, прежде чем работать с ним, нужно подождать, пока текущая операция закончится, и на контакте AUX появится напряжение логической единицы.

Выберите правильную антенну

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

Для подбора антенны найдите нужный модуль по названию на этом сайте , а затем щелкните кнопку Manual. Изучите в документации раздел Antenna recommendation.

Выбирая антенну, учитывайте ее тип, размеры, рабочую частоту, а также такой параметр, как усиление Gain, измеряемое в децибелах. Чем выше усиление антенны выше, тем будет дальше устойчивая связь при одинаковой выходной мощности передатчика.

Также важен тип интерфейса антенны. Чтобы вы смогли подключить антенну непосредственно к модулям, перечисленным в табл. 1, у нее должен быть интерфейс SMA‑J.

В табл. 2 для примера мы привели список совместимых типов антенн для разных модулей EBYTE.

Табл. 2. Антенны для радиомодулей EBYTE с технологией LoRa

Антенну следует располагать вдали от стен и металлических поверхностей. Чем больше высота ее установки, тем больше дальность радиосвязи при прочих равных условиях. Лучше всего подключать антенну непосредственно к антенному разъему радиомодуля, так как промежуточный соединительный кабель ослабит радиосигнал. Это отрицательно скажется на дальности связи.

Конфигурирование модулей EBYTE LoRa

Прежде чем использовать модули EBYTE, их нужно правильно сконфигурировать. В частности, следует установить режим передачи данных (прозрачный или фиксированный), частоту (номер канала) и выходную мощность передатчика, а также другие параметры.

В репозитории вы найдете программы get‑e32-config.py и set‑e32-config.py. Первая из этих программ выводит на консоль байты текущей конфигурации радиомодуля, а вторая позволяет изменить конфигурацию.

Работа программы get-e32-config.py основана на отправке модулю E32 через UART команды чтения конфигурации в виде трех байт 0xC1. В ответ программа получает от радиомодуля шесть байт ответа, и после раскодирования выводит конфигурацию на консоль:

# python3 get-e32-config.py
Работает на платформе: Repka-Pi

Конфигурация модуля E32:                        0xc0000d1a0fc7
Сохраняем параметры при выключении питания:     0xc0
Нужен подтягивающий резистор для UART:          1
Таймаут в режиме сохранения энергии:            0
Адрес:                  0x000d
Режим UART:             0x0
Скорость UART:          0x3
Скорость радиоканала:   0x2
Номер радиоканала:      0x1a
Режим Fixed:            1
Включен режим FEC:      1
Выходная мощность:      3 

Аналогично при запуске на Raspberry Pi:

# python3 get-e32-config.py
Работает на платформе: Raspberry Pi

Конфигурация модуля E32:                        0xc0000b1a0fc7
Сохраняем параметры при выключении питания:     0xc0
Нужен подтягивающий резистор для UART:          1
Таймаут в режиме сохранения энергии:            0
Адрес:                  0x000b
Режим UART:             0x0
Скорость UART:          0x3
Скорость радиоканала:   0x2
Номер радиоканала:      0x1a
Режим Fixed:            1
Включен режим FEC:      1
Выходная мощность:      3

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

Байты конфигурации модуля EBYTE E32

Описание байтов конфигурации радиомодуля EBYTE E32 приведено в табл. 3.

Табл. 3. Кодирование байтов конфигурации E32

Сохранение конфигурации при выключении питания модуля

Первый байт с номером 0 полученной конфигурации может содержать значения 0xC0 и 0xC2. В первом случае конфигурация модуля сохраняется при выключении его питания, а во втором — нет.

Адрес радиомодуля

Каждому модулю можно назначить свой адрес в диапазоне от 0 до 65 535. По умолчанию установлен адрес, равный 0. Адрес 65 535 используется для широковещательной рассылки данных по всем адресам, а также в так называемом режиме мониторинга адресов.

Можно отправлять данные только модулям, сконфигурированным на определенный адрес, или всем модулям сразу независимо от их адреса (при отправке на широковещательный адрес 65 535).

Номер канала передачи данных

Параметр номера канала передачи данных задает частоту, на которой радиомодуль будет вести передачу. Частота вычисляется по формуле, которая зависит от типа модуля (табл. 4).

Табл. 4. Вычисление рабочей частоты по номеру канала

С помощью конфигурирования номеров каналов установите рабочую частоту модуля, разрешенную для использования протокола LoRa в вашей стране. Например, для модулей E32-868T20D и E32-868T30D можно установить частоту 869 МГц, если задать номер канала, равный 7 (862+7=869).

Режимы работы модуля

Пятый байт конфигурации позволяет задавать дополнительные параметры конфигурации.

С помощью бита 7 этого байта можно установить несколько режимов работы модуля:

  • прозрачная передача (transparent transmission);

  • фиксированная передача (fixed transmission);

  • фиксированная широковещательная трансляция (fixed transmission broadcast);

  • режим мониторинга фиксированной передачи (fixed transmission monitoring)

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

На рис. 2 изображены четыре модуля с нулевым адресом. При этом модули A, B и C сконфигурированы для использования канала с номером 15, а модуль D — канала с номером 5.

Рис. 2. Режим прозрачной передачи

В режиме прозрачной передачи модули A, B и С могут взаимодействовать между собой, но модуль D, работающий на другом канале, будет недоступен.

Режим фиксированной передачи интереснее в плане адресации модулей. В этом режиме передающий модуль может без изменения своей конфигурации передавать данные принимающему модулю с любым адресом и на любом канале (рис. 3).

Рис. 3. Режим фиксированной передачи

Как видно из рис. 3, модуль A получает вместе с данными адрес назначения (равный 2) и номер канала (равный 4), на котором нужно вести передачу. Только модуль B сможет принять эти данные, так как именно он имеет адрес, равный 2, и работает на канале с номером 4.

Модули C и D не примут данные. У первого из них адрес задан как 3, а второй работает не на четвертом, а на пятом канале.

В режиме фиксированной широковещательной трансляции данные будут приняты всеми модулями, работающими на заданном канале, независимо от их адреса. Для этого при отправке данных нужно указать специальный адрес 65 535, а также номер канала, на котором будет происходить передача (рис. 4).

Рис. 4. Режим широковещательной передачи данных

Здесь передача идет на четвертом канале, поэтому данные будут приняты модулями B и С. Модуль D не примет данные — он сконфигурирован для работы на пятом канале.

Еще один режим, в который можно перевести модуль, называется мониторингом фиксированной передачи. В этом режиме можно настроить модуль так, чтобы он принимал все пакеты, отправленные другими модулями, на заданном канале. Для этого нужно задать для принимающего модуля адрес 65 535 и канал, на котором должен выполняться контроль.

Формат данных UART

Байт с номером 3 (табл. 3) задает формат данных для UART, а также скорость передачи данных по радиоканалу.

Биты 7 и 6 этого байта определяют режим работы порта UART:

  • 00 — 8N1 (используется по умолчанию);

  • 01 — 8O1;

  • 10 — 8E1;

  • 11 — 8N1 (то же самое, что и 00)

Режим 8N1 означает, что пакет данных содержит 8 бит, нет служебного бита проверки четности, используется один стоп-бит в конце пакета.

Режим 8O1 аналогичен предыдущему, но используется контроль по нечетности. В режиме 8E1 то же самое, но применяется контроль по четности.

Скорость передачи данных UART

Биты 5, 4 и 3 третьего байта конфигурации задают скорость передачи данных в bps:

  • 000 — 1200;

  • 001 — 2400;

  • 010 — 4800;

  • 011 — 9600 (по умолчанию);

  • 100 — 19200;

  • 101 — 38400;

  • 110 — 57600;

  • 111 — 115200

Скорость передачи данных по радиоканалу

Биты 2, 1 и 0 байта конфигурации с номером 3 задают скорость передачи данных по радиоканалу:

  • 000 — 300;

  • 001 — 1200;

  • 010 — 2400 (по умолчанию);

  • 011 — 4800;

  • 100 — 9600;

  • 101 — 19200;

  • 110 — 19200;

  • 111 — 19200

Протокол LoRa не позволяет передавать данные с большой скоростью, поэтому нет особого смысла устанавливать высокую скорость для протокола UART. Что касается скорости передачи данных по радиоканалу, то, чем она ниже, тем больше дальность устойчивой радиосвязи. С учетом этих обстоятельств вы можете оставить параметры скорости передачи данных UART и через радиоканал (эфир) установленными по умолчанию.

Выходная мощность и другие параметры

Байт конфигурации номером 5 (то есть последний, шестой байт по счету) сдержит значения множества различных параметров.

Очень важно правильно установить биты 1 и 0 этого байта конфигурации, так как они определяют выходную мощность передатчика радиомодуля.

Для модулей E32-915T30D, E32-868T30D или E32-433T30D мощность задается так:

  • 00 — 30 dBm или 1 Вт (установлена по умолчанию)

  • 01 — 27 dBm или 501 мВт

  • 10 — 24 dBm или 251 мВт

  • 11 — 21 dBm или 126 мВт

Если у вас модули E32-915T20D, E32-868T20D или E32-433T20D, то мощность будет ниже:

  • 00 — 20 dBm или 100 мВт (установлена по умолчанию)

  • 01 — 17 dBm или 50 мВт

  • 10 — 14 dBm или 25 мВт

  • 11 — 10 dBm или 10 мВт

Напомним, что выходная мощность передатчика модуля не должна превышать максимально разрешенную в вашей стране для выбранной частоты передачи (номера канала). Кроме того, повышение выходной мощности ведет к повышенному расходу электроэнергии.

Стенд с EBYTE E32 LoRa и Repka Pi

Для конфигурирования модулей E32 и их совместного использования с микрокомпьютером Repka Pi соберем стенд, показанный на рис. 5.

Рис. 5. Подключение модуля LoRa E32 к микрокомпьютеру Repka Pi

На рис. 6 показана схема подключения контактов радиомодуля E32 к порту GPIO микрокомпьютера Repka Pi. Для Raspberry Pi нужно точно такое же подключение.

Рис. 6. Подключение контактов E32 к порту GPIO Repka Pi

Обратите внимание, что питание на модуль E32 подается отдельно, что особенно важно при высоком уровне мощности передатчика. В макете мы использовали понижающий стабилизатор напряжения на базе AMS1117, но подойдет любой аналогичный.

Выводы M0 и M1 модуля E32 подключены к контактам 13 (PA9) и 15 (PA10) платы Repka PI, соответственно. Напомним, что эти выводы задают режимы работы модуля.

Линии приема данных модуля RXD и передачи данных TXD нужно подключить к контактам 8 и 10 платы Repka PI, соответственно. Контакт 8 соответствует UART0-TX, а контакт 10 — UART0-RX микрокомпьютера. То есть RXD модуля подключается к UART0-TX микрокомпьютера, а TXD модуля — к UART0-RX микрокомпьютера.

И, наконец, контакт AUX модуля E32 нужно подключить к контакту 12 (PA6) микрокомпьютера Repka Pi. Напомним, что когда модуль E32 занят выполнением какой‑либо операции, на нем устанавливается нулевое значение напряжения, а когда свободен — напряжение 3,3 В.

Программа чтения конфигурации радиомодулей

Рассмотрим упомянутую выше программу чтения текущей конфигурации радиомодуля get‑e32-config.py. Эта программа отправляет через UART модулю E32 команды чтения конфигурации в виде трех байт 0xC1. В ответ она получает шесть байт ответа, и после раскодирования выводит данные конфигурации на консоль.

Перед запуском программы необходимо установить библиотеку RepkaPi.GPIO, доступную на GitHub, а также другие программы и библиотеки.

Установка библиотеки RepkaPi.GPIO выполняется следующим образом:

# apt-get update
# apt-get install python3-dev git
# git clone https://github.com/DikShv/RepkaPi3.GPIO.git
# cd RepkaPi3.GPIO
# apt-get install python3-setuptools
# python3 setup.py install 

Далее клонируйте репозиторий repka-pi-lora:

# git clone https://github.com/AlexandreFrolov/repka-pi-lora.git

Установите python3-pip, pyserial и программу lm-sensors:

# apt install python3-pip
# pip3 install pyserial
# apt install lm-sensors

Если вы все сделали правильно, то при запуске в консоли программа get-e32-config.py выведет расшифрованные байты конфигурации:

# python3 get-e32-config.py
Работает на платформе: Repka-Pi

Конфигурация модуля E32:                        0xc0000d1a0fc7
Сохраняем параметры при выключении питания:     0xc0
Нужен подтягивающий резистор для UART:          1
Таймаут в режиме сохранения энергии:            0
Адрес:                  0x000d
Режим UART:             0x0
Скорость UART:          0x3
Скорость радиоканала:   0x2
Номер радиоканала:      0x1a
Режим Fixed:            1
Включен режим FEC:      1
Выходная мощность:      3 

Исходный код программы чтения конфигурации можно загрузить из Github (листинг 1).

Листинг 1. https://raw.githubusercontent.com/AlexandreFrolov/repka‑pi‑lora/main/get‑e32-config.py

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

В зависимости от типа платформы для работы с GPIO подключаются библиотеки RepkaPi.GPIO или RPi.GPIO:

if board_type == 'Repka-Pi':
    import RepkaPi.GPIO as GPIO
    GPIO.setboard(GPIO.REPKAPI3)
elif board_type == 'Raspberry Pi':
    import RPi.GPIO as GPIO
print('Работает на платформе: ' + board_type + "\n")

Далее импортируются другие необходимые библиотеки и вызываются следующие функции:

ser = gpio_init()
received_data = e32_get_config()
print_e32_config(received_data)
gpio_cleanup()

Функция gpio_init инициализирует нужные нам линии GPIO. После этого функция e32_get_config читает текущую конфигурацию модуля E32, а затем выводит конфигурацию в расшифрованном виде при помощи функции print_e32_config.

Перед завершением работы вызывается функция gpio_cleanup для сброса порта GPIO.

В зависимости от платформы для работы с UART указывается устройство /dev/ttyS0 (Repka PI) или /dev/serial0 (Raspberry Pi):

if board_type == 'Repka-Pi':
    ser = serial.Serial("/dev/ttyS0", 9600, timeout=1)
elif board_type == 'Raspberry Pi':
    ser = serial.Serial("/dev/serial0", 9600, timeout=1)  

Исходный код функции e32_get_config приведен ниже:

def e32_get_config():
    try :
     if ser.isOpen() :
      wait_for_aux_pin()
      ser.write(b'\xC1\xC1\xC1')
      sleep(1)
    except :
     if ser.isOpen() :
      ser.close()
      GPIO.cleanup()

    wait_for_aux_pin()
    if ser.inWaiting() > 0:
        wait_for_serial_data(ser)
        received_data = ser.read(6)
        sleep(1)
    return received_data

Функция вначале открывает устройство UART, создавая объект ser класса Serial. Далее функция проверяет, что модуль E32 готов принимать данные, вызывая для этого функцию wait_for_aux_pin.

Если модуль E32 не занят выполнением какой‑либо операции, программа отправляет в него три байта команды чтения конфигурации b'\xC1\xC1\xC1'.

Далее функция e32_get_config снова ожидает готовность E32, дожидается, когда в буфере UART появятся данные, и затем читает шесть байт конфигурации.

Байты конфигурации передаются функции print_e32_config, которая извлекает отдельный поля с помощью операций сдвига и логического И.

Программа конфигурирования радиомодулей

Программа конфигурирования радиомодулей E32 set-e32-config.py позволяет настроить конфигурацию, выбрав ее из заранее сформированного массива (листинг 2).

Листинг 2. https://raw.githubusercontent.com/AlexandreFrolov/repka‑pi‑lora/main/set‑e32-config.py

Это удобно, если нужно подготовить несколько узлов, работающих в одном канале, но имеющих разные адреса.

Массив конфигураций указан следующим образом:

NODE_CFG = [b'\xC0\x00\x0B\x1A\x0F\xC7', # 1: Node 1, Address 0x0B
            b'\xC0\x00\x0C\x1A\x0F\xC7', # 2: Node 2, Address 0x0C
            b'\xC0\x00\x0D\x1A\x0F\xC7', # 3: Node 3, Address 0x0D
            b'\xC0\x00\x0E\x1A\x0F\xC7'] # 4: Node 4, Address 0x0E

При запуске нужно передать программе set-e32-config.py номер узла от 1 до 4. После запуска программа выведет на консоль байты новой конфигурации и запросит разрешение на внесение изменений:

# python3 set-e32-config.py 2
Node 2 set new config:
c0000c1a0fc7
Enter 'yes' to confirm: yes
Node 2 new config:
c0000c1a0fc7

Чтобы проверить, изменилась ли конфигурация, используйте описанную ранее программу get‑e32-config.py.

Новая конфигурация устанавливается функцией set_config. Для записи в порт UART, подключенный к радиомодулю, выдается команда b'\xC1\xC1\xC1'.

Система сбора данных

Теперь у нас есть все, чтобы создать систему сбора данных с обширных территорий. Мы соберем ее макет с применением радиомодулей E32, подключенных к микрокомпьютерам Repka Pi, Raspberry Pi и Micro:bit (рис. 7).

Рис. 7. Система сбора данных на базе Repka Pi

Система содержит четыре микрокомпьютера:

  • главный узел, Repka Pi, адрес E;

  • периферийный узел 1, Raspberry Pi, адрес B;

  • периферийный узел 2, Micro:bit, адрес С;

  • периферийный узел 3, RepkaPi, адрес D

Главный узел отправляет поочередно запросы на периферийные узлы и получает в ответ от этих узлов данные телеметрии. В макете, показанном на рис. 7, узел 1 возвращает температуру CPU микрокомпьютера, узел 2 — температуру окружающей среды, давление, влажность и точку росы, а узел 3 — температуру CPU и GPU на плате микрокомпьютера.

На главном узле запускается программа send‑request‑e32.py, отправляющая запрос. Адреса отправки запросов и ответы выводятся на консоль, а также записываются в файл hosts_data.json:

# python3 send-request-e32.py
Repka-Pi

Sended to :b'\x00\x0b\x0f'
Received: 46;0

Sended to :b'\x00\x0c\x0f'
Received: 27;983;0;7

Sended to :b'\x00\r\x0f'
Received: 39;42

{
  "0": {
    "Температура CPU": "46",
    "Температура GPU": "0"
  },
  "1": {
    "Температура": "27",
    "Давление": "983",
    "Влажность": "0",
    "Точка росы": "7"
  },
  "2": {
    "Температура CPU": "39",
    "Температура GPU": "42"
  }
}

Вы можете запускать эту программу периодически с помощью crontab, например, раз в 15 минут или с другим актуальным для вас интервалом времени.

Программа send-request-e32.py

Исходный код программы send-request-e32.py, отправляющей запросы на периферийные узлы для получения телеметрии, приведен в листинге 3.

Листинг 3. https://raw.githubusercontent.com/AlexandreFrolov/repka‑pi‑lora/main/send‑request‑e32.py

После инициализации GPIO программа вызывает функцию get_nodes_data, которая получает данные телеметрии от периферийных узлов и сохраняет их в JSON‑файле при помощи функции save_nodes_data_to_file:

ser = gpio_init()
nodes_dict = get_nodes_data(ser)
save_nodes_data_to_file(nodes_dict)

Функция get_nodes_data отправляет по очереди на все периферийные узлы команду получения телеметрии, вызывая send_cmd. Данные телеметрии форматируются для последующего преобразования в JSON при помощи функции format_node_data:

def get_nodes_data(ser):
    nodes_dict={}
    node_data0 = send_cmd(ser, b'\x00\x0B\x0F')
    node_data1 = send_cmd(ser, b'\x00\x0C\x0F')
    node_data2 = send_cmd(ser, b'\x00\x0D\x0F')

    nodes_dict[0] = format_node_data(0, node_data0)
    nodes_dict[1] = format_node_data(1, node_data1)
    nodes_dict[2] = format_node_data(2, node_data2)
    return nodes_dict

И, наконец, функция save_nodes_data_to_file преобразует данные в формат JSON, выводит их на консоль и записывает в файл:

def save_nodes_data_to_file(nodes_dict):
    jsonString = json.dumps(nodes_dict, indent=2, ensure_ascii=False)
    print(jsonString)
    with open('hosts_data.json', 'w') as f:
        json.dump(nodes_dict, f, indent=2, ensure_ascii=False)

Функция send_cmd отправляет в радиомодуль сначала адрес периферийного модуля, а затем строку 'getData \n':

def send_cmd(ser, address):
    try :
        if ser.isOpen() :
            wait_for_aux_pin()
            ser.write(address)
            wait_for_aux_pin()
            ser.write('getData \n'.encode())
    except :
        if ser.isOpen() :
            ser.close()
            GPIO.cleanup()
    print('Sended to :' + str(address))
   
    wait_for_aux_pin()
    received_data = ser.readline()
    sleep(0.05)
    wait_for_aux_pin()
    data_left = ser.inWaiting() 
    received_data += ser.read(data_left)
    rec = received_data.decode("utf-8").strip()
    print('Received: ' + received_data.decode('utf-8') + "\n")
    node_data = rec.split(';')
    return node_data

Данные от периферийных узлов приходят в виде строки значений, разделенных точкой с запятой. Эти данные декодируются и разделяются при помощи функции split, а затем сохраняются в файле при помощи функции save_nodes_data_to_file.

Функция format_node_data позволяет задать различный набор названий параметров для каждого узла.

Программа get-request-e32.py

На периферийных узлах с микрокомпьютерами Repka Pi и Raspberry Pi запускается программа get-request-e32.py (листинг 4).

Листинг 4. https://raw.githubusercontent.com/AlexandreFrolov/repka‑pi‑lora/main/get‑request‑e32.py

Эта программа ожидает в цикле прихода от центрального узла нашей системы сбора данных команды в виде строки 'getData \n'. В ответ на эту команду программа получает данные телеметрии, а затем отправляет их на центральный узел по радиоканалу.

Цикл ожидания запускается после инициализации GPIO функцией wait_for_cmd:

ser = gpio_init() 
wait_for_cmd(ser, b'\x00\x0E\x0F')

В качестве второго параметра этой функции передается адрес центрального узла, по которому нужно отправить ответ.

Цикл выглядит следующим образом:

while True:
    received_data = ser.readline()
    sleep(0.03)
    data_left = ser.inWaiting() 
    received_data += ser.read(data_left)
    rec = received_data.decode("utf-8").strip()
    if received_data:
        print(rec)
    else:
        print('.', end='', flush=True)
        
   if 'getData' in rec:
       temperature_data = get_sensor_temperatures()
       print(temperature_data.encode())
       s_data = temperature_data.encode()
       if ser.isOpen() :
           wait_for_aux_pin()
           ser.write(address)
           wait_for_aux_pin()
           ser.write(s_data)
           print(s_data)

С помощью метода ser.readline выполняется ожидание данных из радиоканала. Когда данные появляются, они дочитываются при необходимости повторным вызовом этой функции, а затем декодируются.

Если в декодированных данных содержится строка 'getData', программа получает температуру CPU и GPU (GPU только для Repka Pi) функцией get_sensor_temperatures. Далее программа выводит через UART в радиомодуль вначале адрес центрального узла, а затем закодированные данные.

Температура измеряется при помощи утилиты sensors, которую вы установили на периферийные узлы.

Программа для Micro:bit

Один из периферийных узлов создан с использованием микрокомпьютера Micro:bit. Код программы для узла 1 приведет в листинге 5.

Листинг 5. https://raw.githubusercontent.com/AlexandreFrolov/repka‑pi‑lora/main/microbit‑lora‑net‑host1.hex

Вы можете загрузить этот код в редактор Microsoft MakeCode, а потом записать на диск микрокомпьютера Micro:bit, подключенного через USB.

На рис. 8 показана первая часть программы microbit‑lora‑net‑host1.hex.

Рис. 8. Программа microbit‑lora‑net‑host1.hex (часть 1)

На этапе инициализации блок при начале выводит на дисплей строку E32 Loranet Host 1, а затем инициализирует модуль E32, порт UART и погодную станцию BMP280. На светодиодную панель микрокомпьютера выводится цифра 1.

Блок on e32radio received получает управление при поступлении команды от центрального узла. Если эта команда содержит строку «getData», блок E32 Send string отправляет по указанному адресу на центральный узел данные от погодной станции. Эти данные возвращает функция getWeatherData (рис. 9).

Рис. 9. Программа microbit‑lora‑net‑host1.hex (часть 2)

Подробнее о работе с E32 с помощью Micro:bit вы можете прочитать в статьях:

Выводы, итоги и благодарности

Из данной статьи вы узнали о том, как с помощью радиомодулей EBYTE E32 LoRa и микрокомпьютеров (на примере Repka Pi, но это общий принцип, подходящий для любых подобных одноплатников, в которых имеется порт UART и GPIO, также поддаются интеграции с EBYTE E32 LoRa) можно создать систему сбора данных на обширной территории, измеряемой километрами. Даже если там нет доступа к сети интернет. Мы с Вами научились конфигурировать радиомодули и использовать их в фиксированном режиме, когда можно передавать данные на узлы по их адресам.

Подключая к периферийному 40 pin разъёму Repka Pi через порты GPIO, I2C, SPI и UART различные сенсоры и исполнительные устройства, можно собирать довольно сложные системы управления и/или сбора данных.

Также приводим ссылки на ресурсы проекта Repka Pi:

  • Официальный сайт проекта Repka Pi и там же куча дополнительной информации, прошивки, чертежи, исходники бинарники DT, блог и что важно - интернет магазин с ценами на все комплектации Репки ощутимо ниже, чем на плэйс маркетах.

  • Официальный Телеграм канал проекта Repka Pi.

  • Группа обсуждения и комментариев к постам официального канала в Телеграм проекта Repka Pi - там можно задать актуальные вопросы и пообщаться с единомышленниками, которые тоже увлекаются одноплатными компьютерами вообще и Репкой в частности.

  • Официальное сообщество в ВК компании разработчика, где периодически появляются новости проектов разработчика проекта, в том числе и Репки.

  • Предыдущая статья о проекта, где было подробнее рассказано тестах разных MicroSD, клонирование SD карт, создание и клонировании образов SD карт c рабочей прошивкой.

Эта статья целиком написана и свёрстана Александром Фроловым. Александр является автором материалов, мы лишь выполнили постановку задачи и незначительную редактуру материала. Связываться с целью благодарности или уточнения вопросов с Александром можно в его Телеграм-аккаунте, который приводим с его согласия.

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

Раз Вы читаете эти строки, значит статья Вас заинтересовала и Вы дочитали её до конца. Спасибо Вам!

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

Удачи Вам и Вашим проектам - как рабочим или образовательным, так и просто Вашим любимым DIY проектам!

Комментарии (58)


  1. Jury_78
    06.07.2023 10:45

    Дальняя радиосвязь с LoRa на одноплатных микрокомпьютерах Repka Pi

    Реальные измерения дальности не проводились?


    1. AlexandreFrolov
      06.07.2023 10:45

      Нет, так как очень зависит от условий, от частоты, типа антенн и их расположения, от помех на пути радиоволн и рельефа местности.

      Такое исследование могло бы стать темой отдельной статьи, но все равно дальность надо проверять в условиях конкретных применений.

      В даташите на модуль E32-868T20D говорится о дальности 3000 м на открытой местности с антенной 5 dBi на высоте 2.5 м и при скорости передачи данных по воздуху 2400 bps:

      "Distance for reference: 3000 m. Test condition: clear and open area, antenna gain 5 dBi, antenna heght: 2.5 m, air data rate 2.4 kbps"

      Разумеется есть модули помощнее, E90-DTU(400SL44), например, дает дальность до 40 км за счет большой мощности (25 Вт). Но тут уже надо оформлять все необходимые документы в соответствии с законодательством.


      1. SpiderEkb
        06.07.2023 10:45
        +1

        Нет, так как очень зависит от условий, от частоты, типа антенн и их расположения, от помех на пути радиоволн и рельефа местности.

        Т.е. все эти рассуждения по поводу "LongRange" фактически ни о чем.

        Есть формула Введенского, позволяющая оценить (зная мощность передатчика и чувствительность приемника) дальность связи на открытой местности. Есть теоретический предел дальности с учетом кривизны земной поверхности и высоты расположения антенны.

        А есть еще конкретный рельеф местности, различные препятствия на пути радиосигнала (плотный лес, здания и т.п.).

        И в результате всего этого вам обещали аж целых 8км, а по факту 500м и оп-па...

        С безлицензионной связью не понаслышке знаком.

        Разумеется есть модули помощнее, E90-DTU(400SL44), например, дает дальность до 40 км за счет большой мощности (25 Вт)

        Ага. Только антенны при этом надо поднять на высоту 40м. Вот тут можно прикинуть - Расчёт дальности УКВ связи

        Тут одной мощности мало. Нужна еще т.н. "оптическая видимость". УКВ волны - это не гаубица, они по параболе не умеют. Только по прямой и никак иначе.

        Это все в горах познается очень хорошо. Обычные 5-ваттные (ну на антенне там где-то4.5Вт честных) переноски с более-менее прилично согласованным четвертьволновым диполем. С вершины на вершину - десятки километров устойчивая связь. С одной стороны перевала на другую уже на километре (а то и меньше) полная тишина. Даже несущей не видит.

        Другое дело СБ - там уже всякие ионосферные отражения и т,п. Но там габариты и мощность уже иные.


        1. AlexandreFrolov
          06.07.2023 10:45

          Да, серебряной пули тут нет. Или есть какая-то альтернатива LoRa для дальней связи при относительно небольших затратах на оборудование?


          1. SpiderEkb
            06.07.2023 10:45

            Нету. Потому что LoRa имеет очень условное отношение к "дальней связи".

            Вот пример.

            По красной линии расстояние километра полтора. От силы два. Но никакая ЛоРа связи не обеспечит. Ни при каких условиях.

            Только ставить ретранслятор на вершине горы, но это уже совсем иные затраты.

            Перепад высоты там метров 60-70.

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

            А вот если с одного конца города на другой, да нет высоких зданий в окрестности, тогда уже упс...

            Иными словами, в каждом конкретном случае, прежде чем принимать решение использовать или нет, надо проводить исследования на конкретной местности. И может быть (!) оно заработает.


            1. AlexandreFrolov
              06.07.2023 10:45

              Конечно, без исследования тут никак. А насчет ретранслятора - цена модуля LoRa E32 с антенной и микрокомпьютера не так уж и высока. Просто добавляется еще один узел. И еще нужно решить вопрос электропитания, разумеется.


              1. SpiderEkb
                06.07.2023 10:45

                Ну и охраны, разумеется. Оставьте его в лесу без присмотра - сколько он проживет там? День? Три? Неделю?

                И сколько потребуется таких ретрансляторов, если говорить о дальней связи (ну хотя бы километров 10 с парой-тройкой горок по дороге)?

                Я не против ЛоРа как таковой. Идей хорошая. Но любую подачу информации о ней надо начинать с принципов радиосвязи и доведения до сведения того факта, что УКВ связь в принципе не для дальних рассеяний дешевыми способами. Что это вещь капризная, работает только в пределах прямой видимости. Еще и препятствия на пути не любит (тут еще можно про способность радиоволн огибать препятствия в зависимости от длины волны пояснить)

                Вот это все надо упомянуть. Прежде всего остального.


                1. AlexandreFrolov
                  06.07.2023 10:45

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

                  А дешево или нет - это понятия условные. Разумеется, в промышленных применениях нужно подходить ко всему с умом и с расчетом.


            1. exTvr
              06.07.2023 10:45

              И может быть (!) оно заработает.

              До тех пор, пока между точками ВНЕЗАПНО не построят дом или не вырастет дерево :))


              1. AlexandreFrolov
                06.07.2023 10:45
                +1

                Да, такое возможно. Вот, спутниковая антенна тоже может из-за построенного дома перестать принимать сигнал. Такова жизнь.


        1. fvariation
          06.07.2023 10:45
          +1

          Тут одной мощности мало. Нужна еще т.н. "оптическая видимость". УКВ волны - это не гаубица, они по параболе не умеют. Только по прямой и никак иначе.

          Фишка LoRa именно в том, что умеет заходить в зону оптической невидимости в городских условиях и иметь возможность работать хоть и на малой скорости, но на больших расстояниях, чем просто УКВ связь. Можете попробовать понять зачем передача идет плавающей частотой?


          1. SpiderEkb
            06.07.2023 10:45
            +2

            Фишка LoRa именно в том, что умеет заходить в зону оптической невидимости в городских условиях и иметь возможность работать хоть и на малой скорости, но на больших расстояниях, чем просто УКВ связь.

            А можно физику процесса? С формулами? Без ссылок на чатгпт, а вот именно с формулами как эти волшебные волны так особенно распостраняются.

            А то все это напоминает гаубицу, которая, если на бок положить, за угол стрелять начнет.



            1. olartamonov
              06.07.2023 10:45
              +1

              А то все это напоминает гаубицу, которая, если на бок положить, за угол стрелять начнет.

              У вас спор с какой-то странной терминологией, судя по всему, самостоятельно выдумываемой на ходу обоими оппонентами.

              Что такое «зона оптической видимости»? У меня вот до роутера оптической видимости нет, он вообще в другой комнате, а вайфай всё равно работает. Да и крышка ноутбука, под которой антенны стоят, оптически непрозрачная.

              Модуляция LoRa позволяёт дёшево сделать приёмопередатчик с двусторонней связью, с приемлемой для ряда задач скоростью работающий с сигналами ниже уровня шума. Точка, абзац. Ничего другого она не позволяет.

              Дальше всё определяется радиопоглощением среды на пути распространения сигнала. Где-то можно и 50+ км на лоре получить, где-то (в городе) 2-3 километра.

              В чём смысл? В том, что на других модуляциях вы в таких условиях и на такой дальности вообще ничего не получите.


    1. maledog
      06.07.2023 10:45
      +1

      Все эти "километры" при наличии хорошей антенны и в чистом поле. В городе в такой конфигурации как на фото метров 300 при условии что принимающая нода на высоте 4 этажа, а вокруг частный сектор. И то если есть прямая видимость хотя бы через окно. Это при SF7. А при SF12 никакой батареи не напасешься. Так что "дальняя радиосвязь" это преувеличение.


      1. AlexandreFrolov
        06.07.2023 10:45

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


        1. SpiderEkb
          06.07.2023 10:45

          Что такое "сигнал ниже уровня шума"?

          Есть вполне определенные критерии - чувствительность приемника. Если напряженность э/м поля (данного сигнала) в данной точке ниже чувствительности приемника - все. Никто ничего не принимает. Выше уровня шума, ниже - не важно.


          1. AlexandreFrolov
            06.07.2023 10:45

            Вот, например, ответ на этот вопрос, который сходу выдала ChatGPT:

            Одной из особенностей LoRa является его способность принимать сигналы ниже уровня шума, что обеспечивает большую надежность связи и расширяет радиодальность.

            Существуют несколько причин, почему LoRa E32 может принимать сигналы ниже уровня шума:

            1. Модуляция Chirp Spread Spectrum (CSS): LoRa использует метод модуляции CSS, который имеет преимущество в чувствительности к слабым сигналам. Это означает, что модулятор и демодулятор LoRa способны обрабатывать сигналы, которые значительно ниже уровня шума. Модуляция CSS позволяет LoRa E32 достичь высокой чувствительности при приеме слабых сигналов.

            2. Низкий уровень шума и динамический диапазон: LoRa E32 имеет низкий уровень шума и широкий динамический диапазон приема. Это позволяет ему эффективно извлекать слабые сигналы из фонового шума и обеспечивает прием сигналов на значительно более низком уровне, чем у других типов радиосистем.

            3. Функция прямого расширения спектра (Direct Sequence Spread Spectrum, DSSS): LoRa использует технологию DSSS, которая помогает улучшить спектральную эффективность и устойчивость к помехам. Это позволяет LoRa E32 обрабатывать и восстанавливать сигналы даже при наличии сильных помех или слабых сигналов.

            4. Адаптивная модуляция и кодирование (Adaptive Modulation and Coding, AMC): LoRa E32 может автоматически выбирать оптимальную модуляцию и кодирование для передачи данных в зависимости от условий канала. Это позволяет модулю успешно передавать данные даже при низком уровне сигнала и высоком уровне шума.

              Преимущество приема сигнала ниже уровня шума состоит в том, что устройство может обнаруживать и декодировать слабые сигналы, которые обычно были бы несостоятельными или непригодными для других радиосистем. Это особенно полезно в сельской местности, горных районах или других удаленных местах, где существует много помех или сигналы должны проникать сквозь препятствия.


              За счет своей способности принимать слабые сигналы, LoRa E32 может обеспечивать большую дальность связи. В отличие от других радиосистем, где сигнал быстро ослабевает на больших расстояниях, LoRa способен передавать данные на расстояния до нескольких километров, что делает его подходящим для различных приложений IoT (Интернета вещей), например, в умных городах, сельском хозяйстве, промышленности и т.д.

              Важно отметить, что, хотя LoRa E32 может принимать сигналы ниже уровня шума, его производительность все же может быть ограничена в условиях сильных помех или при большом расстоянии от источника сигнала.

              Факторы, такие как препятствия, атмосферные условия и другие радиосигналы, могут влиять на достижимую дальность и надежность связи.

              В целом, благодаря способности принимать слабые сигналы ниже уровня шума, LoRa E32 и другие устройства LoRa предлагают эффективный и надежный способ беспроводной связи на большие расстояния с минимальным энергопотреблением.


            1. SpiderEkb
              06.07.2023 10:45
              -1

              Я говорил несколько об ином. Не надо спрашивать у ГПТ. Надо просто почитать учебник по теории радиосвязи.

              Есть напряженность э/м поля в точке приема. Если она выше чувствительности приемника - прием будет. Ниже - не будет.

              А выше-ниже уровня шума это уже способность приемника выделить из принятого сигнала (если он его вообще принял) полезную составляющую и отфильтровать шумы. Вы говорите об этой способности. Я говорю о способность вообще услышать сигнал.


              1. AlexandreFrolov
                06.07.2023 10:45

                Будет или нет прием при наличии сильных шумов - как раз зависит от способа модуляции. Еще и патенты на это есть. Так понимаю, что LoRa как раз умеет выделять из шумов полезный сигнал.

                Разумеется, чудес не бывает, и LoRa не сможет детектировать слишком слабый сигнал. Но у нее есть преимущества в этом перед другими средствами радиосвязи. Хотя и ценой низкой скорости передачи данных.


              1. Jury_78
                06.07.2023 10:45
                +1

                Есть еще метод накопления - работает ниже уровня шума.


          1. sci_nov
            06.07.2023 10:45
            +2

            Физически антенна всё равно принимает. Фишка Лоры - в обработке сигнала и последующих кодов.


        1. maledog
          06.07.2023 10:45

          1. Ретранслятор требует питание, притом желательно постоянное.
          2. Ретранслятор, как минимум, удваивает количество пакетов отправляемых в эфир. Что само собой приводит к увеличению числа коллизий, так как набор каналов ограничен.
          3. Само собой, ретранслятор требует больше золота.


          1. AlexandreFrolov
            06.07.2023 10:45

            Радиомодули E32 в составе ретранслятора могут принимать данные на одном канале, а передавать на другом. Кроме канала можно задать адрес для каждого такого модуля.

            Питание, разумеется, нужно, как и для каждого узла связи. Что касается золота, то модули E32 недорогие. Но все относительно, конечно.

            Если кто знает альтернативное решение, чтобы работало на большие расстояния без интернета, не через космос и без космических цен, с удовольствием почитаю.


            1. maledog
              06.07.2023 10:45

              Приемник то работает на одном канале, если это не базовая станция lorawan (SX13xx). придется держать два приемника. Для пакетов от обычных датчиков и пакетов от ретранслятора на другой частоте. Либо придумывать протокол для согласованного переключения каналов.


              1. AlexandreFrolov
                06.07.2023 10:45

                Можно сделать, например, так. Центральный узел по очереди опрашивает периферийные узлы, напрямую или через ретрансляторы, и дожидается ответа от каждого. Если нужна скорость, никто не мешает разделить узлы по сегментам с разными каналами, и, установив в центральном узле дополнительные модули, опрашивать такие сегменты параллельно.

                Но вообще говоря, создание и обслуживание радиосетей - тема для отдельных статей.

                Было бы интересно почитать такие статьи, например, про сбор данных электросчетчиков и счетчиков воды в условиях плотной городской застройки в масштабах города. Сравнимого по размером с Москвой, например.


                1. maledog
                  06.07.2023 10:45
                  +1

                  Тут возникает еще одна проблема. На центральный узел можно поставить хорошую дорогую антенну но на каждое периферийное устройство не поставишь, дорого. Потому связь будет скорее односторонняя. Центральный узел еще может принять данные, но вот периферийное устройство уже нет. Не хватит чувствительности антенны. Так что инициализировать опрос и синхронизировать время центральный узел не сможет. Это примерно соответствует устройствам LoRaWAN c ABP и отправкой без подтверждения. Так главным образом устройства с LoRa на дальних расстояниях и эксплуатируются. Иначе расстояния между устройствами нужно еще больше сокращать.
                  Разделение по времени тоже не очень подходит если вы работаете с сотней датчиков. Кроме того в районе и диапазоне частот вы скорее всего не одни будете.
                  Для избежания коллизий при передаче, я использую способ подсмотренный в LoRaWAN (почему-то применяется он только в китайском диапазоне частот). Перед передачей на некоторое время перевожу приемопередатчик в режим приемника и измеряю уровень сигнала на частоте. Если он выше определенного предела, то ожидаю некое случайное время и пробую прослушать эфир повторно.


      1. sav13
        06.07.2023 10:45

        А не подскажите хорошую антенну на 868?
        А то как-то реально все это работает только на сотни метров.

        А LoRaWAN провайдер в нашем городе тупо все решает установкой ретрансляторов для обеспечения покрытия.


        1. maledog
          06.07.2023 10:45

          В сложных случаях мы используем что-то вроде этого если где-то внуnри склада то есть образцы покороче 10dBi


    1. NutsUnderline
      06.07.2023 10:45
      +2

      Даже если в этом конкретном случае не проводились, то в целом - очень много проводились: в привязке как обычно к микросхемам Semtech но и скажем к модулям Ebyte на них построенных, а так же других устройствах. В ютубе достаточно набить что то типа "LoRa range test"


  1. avshkol
    06.07.2023 10:45
    +1

    Но зачем для LoRa, которая передаёт байты, а не мегабайты, Репка и Распберри, а не более дешёвое Ардуино??? https://docs.arduino.cc/learn/communication/lorawan-101


    1. maledog
      06.07.2023 10:45

      Сейчас ардуино не такое и дешевое. платы с esp8266 подешевле будут. Ну или bluepill с одним из китайских клонов stm.


    1. AlexandreFrolov
      06.07.2023 10:45
      +1

      Более мощные микрокомпьютеры позволяют запускать различные сервисы или дополнительную обработку. Например, на Repka Pi можно поднять сервер NodeJS, OpenVPN, использовать шифрование данных или что-то еще, недоступное на микроконтроллерах.

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


      1. avshkol
        06.07.2023 10:45

        Согласен, на приёмнике. Где сервер. А на передатчиках зачем? Ну, не ардуино, аналоги?


        1. AlexandreFrolov
          06.07.2023 10:45
          +1

          Представьте себе, что микрокомпьютер передатчика собирает некий массив информации, например, результат распознавания объектов обученной нейросетью, зашифровывает этот результат и передает на центральный узел, подключенный к интернету.

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


          1. avshkol
            06.07.2023 10:45

            Согласен, но это редкий случай - умное видеонаблюдение в местах, где нет интернета по кабелю, Wi-Fi и сотовой связи (в сибирской тайге).


            1. AlexandreFrolov
              06.07.2023 10:45

              Кроме видео наблюдения достаточно требования шифрования данных или их какой-либо другой сложной обработки, недоступной на микроконтроллере.

              Доступ в интернет может и быть, но не всегда его удобно использовать. Если, например, устройств много, то возникнут ограничения на количество подключений. Да и платно это, и не особо надежно.

              И есть еще другой вариант - когда нужен именно отечественный микрокомпьютер с поддержкой от производителя.


      1. DashBerlin
        06.07.2023 10:45
        +1

        А насколько она отечественная? Она заявлялась как клон Малинки, не более, по идее и комплектующие, они какие-то особенные?


        1. AlexandreFrolov
          06.07.2023 10:45

          Вообще не клон. Заявлялась как замена для Raspberry Pi 3.

          Плата полностью разработана и изготовлена в НПО Рэйнбовсофт. Соответственно, возможно внесение изменений не только в ПО, но и в железо.

          Подробнее о проекте можно почитать в блоге на сайте компании. Ведется разработка новых версий платы. Также есть фильм: Репка Pi ответит сколько в ней российского и откуда деньги на разработку.


  1. Worky
    06.07.2023 10:45
    +2

    Кто о чем, а любители ЛоРы о дальности. Их есть у меня!

    4.69км по прямой видимости на 868МГц модулями от ЛилиГо ТТГЩ 2.1 с мештастиком в прошивке. Антенны - штырь для 868МГц на 90см для Хелиум Майнинга, бывают и больше. По прямой видимости и 5ти этажки и 9ти этажки были.

    Раздача на 5м этаже 5ти этажки с окна, прием 6й этаж. Пробовал на 6м этаже антенну штырь 15см - тоже связь была.

    Выезжал на дорогу за частным сектором на 4км и раздачей с окна 5 этажки - тоже работало. Пробовал на 400м по земле за 5ти этажками, даже 2х - работало.


    1. sav13
      06.07.2023 10:45

      А ссылочку на антенну хорошую дайте
      А то пробовал всевозможные с али - не сильно от штатной встроенной спиральки отличается


  1. lesha108
    06.07.2023 10:45

    Все эти модули без нормального канального шифрования и авторизации. Поиграться только


    1. AlexandreFrolov
      06.07.2023 10:45
      -1

      Можно шифровать данные, которые будут передаваться через эти модули, или подписывать их. Соответственно, на принимающем узле расшифровывать полученные по радиоканалу данные, либо проверять подпись.

      А есть ли подобные решения с шифрованием, которое пригодно для промышленного применения (ГОСТ, например), и сколько они стоят?


    1. NutsUnderline
      06.07.2023 10:45

      в общем то в некоторых из них какое никакое шифрование есть, встроенное: предлагается задавать 16 битный ключ. Уж наверное достаточно чтобы передать температуру из теплицы. Если же есть желание послать кому то нечто интимное то шифровать можно тем к чему этот модуль будет подключатся.


      1. AlexandreFrolov
        06.07.2023 10:45
        +1

        Да, вот для такого шифрования как раз и пригодится Repka Pi на узле.


      1. lesha108
        06.07.2023 10:45
        +3

        Проблема в том, что можно записать пакет с эфира и потом ретранслировать его по своему усмотрению. Даже не заморачиваясь подбором ключа. Хотя 16 бит шифра перебрать не так долго. И условная "теплица" будет всегда получать одну и ту же температуру. Т.е. регулирование температуры в теплице уже будет нарушено. Поэтому дополнительное шифрование и авторизация пакетов жизненно необходимы + обязательна нумерация зашифрованных пакетов


        1. NutsUnderline
          06.07.2023 10:45
          +1

          Сетевые карты типа Ethernet тоже все так хорошо шифруют? Wifi вон WEP приделали, а толку... все обеспечивается шифрованием на совсем других уровнях.

          Модули предназначены для передачи байтов. Есть кстати два варианта - первый это который чисто радиоканал, там вообще ничего нет кроме голого пакета с данными. И второй - с дополнительным контроллером, который обеспечивает эти вещи на минимальном уровне. Для конкретно теплицы - достаточно. А регулятор неплохо бы вообще локально реализовать. Ну а то вдруг кто то с PortaPack H2 по деревням шастает.

          Думаю модули в которых все это реализовано максимально по уму, и протестировано по правильному будут стоить космически, это уже что то типа тех штук которые банковские платежи обеспечивают, и там все очень закрытое.

          Проще уж это все на более высоких уровнях прикрутить, в том числе такие методы которые производитель модулей никогда не сделает.


          1. lesha108
            06.07.2023 10:45

            Да. Но статья помечена как обучающая. Новички должны знать о рисках применения таких модулей и то, что нужно писать стек шифрования. А примеры кода в статье только для использования в детском кружке. А то кто-то может подумать, что такой код и для промышленного применения пригоден. Ресурсов репки вполне достаточно для реализации любого шифрования.


            1. NutsUnderline
              06.07.2023 10:45

              Должны знать это одно. А вот первый урок сразу портянку кода писать - это перебор. Вон тут коллега чуть выше наоборот предлагает зачем нам Линуксы, давайте на ардуине


            1. AlexandreFrolov
              06.07.2023 10:45

              Разработчики промышленных применений все же обычно не новички в своем деле. Что же касается статьи, то она про подключение радиомодулей к Repka Pi, и не претендует на детальный обзор необъятных тем, имеющий отношение к организации и безопасности радиосетей. Тут каждая из тем тянет на отдельный набор статей.


              1. NutsUnderline
                06.07.2023 10:45

                А вот тут не соглашусь. Здесь есть буквально тысячи статей о том что разработчики промышленных решений о таком не помышляют. А иногда и о более прозаичных вещах.


                1. AlexandreFrolov
                  06.07.2023 10:45
                  +1

                  Это конечно печально, но статьями тут не поможешь, нужно профильное обучение видимо


  1. sav13
    06.07.2023 10:45

    Изучите законодательство

    В законодательстве есть ограничения по используемым частотам, уровням мощности и времени передачи. Найдите перечень и условия использования безлицензионных диапазонов частот (Industrial, Scientific, Medical, ISM) для использования протокола LoRa в вашей стране.

    В России правила использования радиочастотного спектра устанавливаются Государственной комиссией по радиочастотам (ГКРЧ). Подробнее об использовании безлицензионных частот можно почитать здесь.

    На момент написания этой статьи в России к безлицензионным диапазонам частот отнесены 433 МГц, 868 МГц, 2400 МГц и 5725 МГц.

    Для создания сетей интернета вещей в России используют диапазон частот от 864 МГц до 869 МГц с мощностью до 25 мВт. При этом выделяются поддиапазоны от 864,0 МГц до 865,0 МГц и 868,7 МГц до 869,2 МГц. В первом из этих поддиапазонов действуют дополнительные ограничения: период активной работы может составлять не более 0,1%, и не разрешается работать вблизи аэропортов. У второго поддиапазона таких ограничений нет.

    Законодательство постоянно изменяется, поэтому его необходимо отслеживать.

    А ничего что рекомендуемые вами модули E32 433T30D используют дополнительный усилитель сигнала и имеют максимальную мощность до 1Вт?


    1. NutsUnderline
      06.07.2023 10:45
      +1

      Там еще есть интересные подробности насчет времени рабочего цикла . Постоянно что то вещать - не моги, типа такого.


      1. AlexandreFrolov
        06.07.2023 10:45

        Да, в России это касается поддиапазона 864,0 МГц до 865,0 МГц.


      1. sav13
        06.07.2023 10:45

        Ну да
        LoRa - протокол исключительно для низкоскоростной телеметрии которая в основном находится в режиме сна.

        Тут к нам в Горсвет пришли распальцовщики с крутыми LoRaWAN светильниками, которыми можно "управлять в онлайн" и "прошивать по воздуху"

        Когда я попросил показать прошивку по воздуху 1000 светильников, сдулись. )))


    1. AlexandreFrolov
      06.07.2023 10:45
      +1

      В статье нет рекомендаций конкретных модулей для тех или иных применений и стран, она обзорная. Мощность модулей E32 настраивается при конфигурировании, так же как и частота, на которой ведется передача.

      Так что выбирайте модули и устанавливайте их конфигурацию в соответствии с законодательством в вашей стране.


  1. yamifa_1234
    06.07.2023 10:45
    +1

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

    Для продвижения репки подобные статьи имеют важное значение. Человек который решит начать разбираться с одноплатными ПК будет смотреть не только на характеристики но и на размер комьюнити... В моем видении нужно просто брать популярные проекты на других одноплатных ПК и переносить на репку. С одной стороны все относительно одинаково, но тупить каждый может)