Создание радиосети на основе технологии LoRaWAN.
Конструкция выходного дня.
Введение.
Как собрать данные с датчиков в радиусе 1 км по радиоканалу в черте города с плотной застройкой ?
Специфика города такова, что:
1. Нет прямой видимости между устройствами.
2. На пути распространения сигнала стоят здания, линии электропередач, деревья, банеры и
другие конструкции затрудняющие распространение радиоволн.
3. Большой уровень шумов в эфире, от других устройств.
Радиоканал то какой ?
Можно рассмотреть следующие варианты:
- Создать свой радиоканал (на рассыпухе) с нуля + вся обработка (кодирование, модуляция, де-модуляция).
- Использовать готовое решение в виде готовых микросхем трансиверов.
Свой радиоканал делать с нуля весьма занимательное занятие, но при этом очень непростое.
Поэтому первое, что приходит на ум посмотреть, что есть уже из готовых решений на рынке.
Что есть из готовых решений ?
1. WiFi - не подойдет, так как будет работать только на прямой видимости и на расстоянии до
100 метров.
2. GSM/GPRS - устраивает, но за сотовую надо платить и учитывая что будет несколько датчиков,
то придется платить за несколько телефонных номеров(сим карт), это весьма накладно.
3. Еще есть модули для работы в диапазонах 433, 868, 915 МГц, на основе готовый микросхем
трансиверов, но и тут не все так просто. Большая их часть работает на небольших расстояниях
(до 10-300 метров) в пределах прямой видимости.
4. Недавно в 2015 году была заявлена новая технология LoRaWAN которая позволяет за счет
применения модуляции основанной на технике расширения спектра spread spectrum modulation и
вариации линейной частотной модуляции, демодулирывать сигналы на уровне до 20dB ниже уровня
шумов, тогда как большинство систем с частотной манипуляцией (frequency shift keying, FSK)
могут корректно работать с сигналами на уровне не ниже 8-10dB над уровнем шумов.
Также в канале введено дополнительное кодирование данных с применением прямой коррекции
ошибок (кодов FEC).
Также приемник имеет высокую чувствительность.
Все эти особенности делают применение сетей на основе LoRa весьма привлекательными.
Реклама это хорошо если в меру, но вот что из этого правда и на сколько ?!
Идея следующая:
Прежде чем применять данную технологию, необходимо убедиться в ее работоспособности.
Для начала необходимо разобраться что к чему, собрать стенд, провести эксперимент.
Собрать результаты эксперимента, сделать выводы, после чего будет понятно чего можно ожидать
от работы устройств в реальных условиях.
Радиоканал штука тонкая !
Предполагаемая методика проверки следующая:
Собрать два устройства состоящих из:
Антенна + Модуля(LoRa) + микроконтроллер STM32 + ЖКИ.
Одно из устройств перевести на передачу. Второе устройство перевести на прием.
Передающее устройство периодически передает пакет данных. В пакете данных передается
короткое сообщение в виде счетчика - номера текущего передаваемого пакета.
Приемное устройство принимает пакет и выводит содержимое на ЖКИ индикатор, а также
выводит уровень принимаемого сигнала, для визуальной оценки состояния принимаемого сигнала.
Далее одно устройство(передатчик) разместить стационарно, со вторым устройством (приемник)
обойти округу и проверить качество и устойчивость принимаемого сигнала.
Часть 1. Макет.
Сказано сделано !
LoRa модули были взяты готовые.
Для макетирования были приобретены два модуля LoRa с управляющим микроконтроллером
на борту. На плате помимо радио чипа с обвязкой дополнительно установлен микроконтроллер
STM32F151. На данном микроконтроллере реализован интерфейс типа мост между радио чипом и
пользовательским интерфейсом на основе UART порта с AT-командами.
Для быстрого старта весьма удобное решение, хотя есть и недостатки:
1. При передачи команды в модуль нет ответного эха, для контроля приема модулем команд.
2. AT - Команду необходимо посылать без задержек между байтами, иначе модуль выдает ошибку
(связанную с истечением таймаута).
Первоначально предполагалось что модуль будет подключен к терминалу на ПК через конвертер
USB-UART и можно будет передавать управляющие команды из окна терминала в ручную набирая
команды посимвольно (как с GSM модемом). Но модуль возвращал ошибку !
Решение формировать строку целиком, и затем посылать.
3. Передача и прием данных ведется в виде строк текста (диапазон символом все отображаемые
по таблице кодов ASCII). Т.е. для передачи произвольного потока байт, необходимо производить
конвертацию в текстовый вид и обратно. Т.е. например нужно передать бинарные массив
0x00 0x01 0x02 0x03, который конвертируется в массив 0x30 0x30 0x30 0x31 0x30 0x32 0x30 0x33.
Это в добавок ко всему удлиняет пакет/сообщение.
4. Иногда за место принятого пакета, модуль возвращает МУСОР ! Это глюк !
Поэтому необходимо дополнительно вводить контроль целостности передаваемых/принимаемых
данных, например ввести контрольную сумму на основе CRC8/16/32.
Есть еще вариант модулей без микроконтроллера, стоят они дешевле и это очень заманчиво,
но сейчас хотелось проверить идею (быстро), не заморачиваясь сильно с программированием
модуля.
Мне как то (в 2005 году) довелось подымать радиоканал на основе модулей DP1203 и это была
не тривиальная задача, т.к. не всегда понятно какие параметры грузить в регистры и т.п. В общем
пришлось повозиться...
Что интересно, на дворе 2019, прошло уже 14 лет, а модули DP1203 выпускаются до сих пор.
Хотя забегая вперед, надо сказать что с данными модулем все равно необходимо будет разобраться,
т.к. два процессора в простой системе(датчике) это уже перебор, но это можно оставить для
оптимизации на потом.
Сейчас необходимо проверить идею ! (и рекламу за одно)
Микроконтроллер был взят из того что есть под рукой, им оказался STM32F030F4 на макетке,
ЖКИ от NOKIA 5110 с SPI интерфейсом.
Питание предполагается от USB через понижающий преобразователь Step-Down от ST (5В -> 3.3В).
ЖКИ (от NOKIA 5110) применялся мною в первый раз. В свое время были куплены 4 шт как раз
для подобных задач.
Порадовало то, что работать с данным ЖКИ одно удовольствие, все предельно просто.
Производиться инициализация ЖКИ, формируется в ОЗУ видео буфер, который выводится целиком и
несколько функций по формированию изображения на основе готовых шрифтов и т.д.
Что не понравилось, так это качество изготовления ЖКИ. Это просто Жуть.
Из четырех модулей:
1 шт - заработал,
1 шт - не заработал вообще (даже после переборки, чистки и танцев с бубном),
2 шт - периодически глючели, то затемняется изображение, то изображение вовсе пропадает.
Не помогла переборка с чисткой, так и не удалось вернуть их к полноценной жизни.
Во те и взял с запасом называется.... мда....
Забегая вперед:
Испытания устройств проводились вне помещения при температуре -12...-15 0С.
На морозе ЖКИ сильно тормазил (очень медленно обновлял экран), угол обзора сильно завалился,
поэтому приходилось всматриваться под углом пытаясь разобрать что сейчас выведено на ЖКИ.
Одним словом неудобно....
Надо пробовать/переходить OLED благо их сейчас много видов.
Собрав все воедино получилась следующая схема устройства.
Собрав все узлы, итоговая конструкция получилась следующая:
Питание от USB, преобразование 5В в 3.3В осуществляется при помощи DC/DC Step-Down
преобразователя LM3671.
Данный преобразователь способен выдавать на нагрузку до 600 mA при 3.3В.
Для работы преобразователю требуется только три внешних компонента. Это индуктивность
и два конденсатора на входе и выходе.
Теперь можно переходить к софту.
Часть 2. Программное обеспечение.
Проект был создан при помощи среды STM32CubeMX. Компилятор ARM IAR.
Исходники лежат на github.
В проекте реализованы алгоритмы приемника и передатчика. Выбор кем будет данное устройство
(приемником или передатчиком) производится на основании состояния вывода GPIO P0 микро-
контроллера, для удобства выбора на плате установлена перемычка.
Алгоритм работы следующий:
Часть 3. Испытания.
Поехали.....
Расшифровка содержимого индикаторов ЖКИ:
На индикаторе передатчика выводятся следующие параметры:
1. Название устройства и версия.
2. Кем является данный модуль, (передатчиком).
3. Счетчик номер передаваемого сообщения + индикатор идет передача (символ стрелка '>' ).
На индикаторе приемника выводятся следующие параметры:
1. Название устройства и версия.
2. Кем является данный модуль, (приемником).
3. Счетчик времени прошедшего с момента получения последнего сообщения/пакета (wait=10).
4. Содержимое последнего принятого пакета с двумя полями цифр(P=00001,-48,40).
первая цифра уровень принимаемого сигнала (-48), вторая уровень ошибок (40).
5. Индикатор номера ошибок, если есть.
wait - счетчик системный тиков прошедших с момента последнего приема пакета.
Данный счетчик применяется для визуальной диагностики, прошедшего времени с момента приема
пакета.
В данной реализации, при непрерывной передаче пакетов, интервал приема пакетов составлял wait=14.
Получается если счетчик перевалил за 14 тиков, ПРИЕМА НЕТ !
Результаты испытаний.
В целом результаты порадовали. Судите сами.
Передающий модуль был установлен на крыше 5 этажного дома в Москве.
Максимальная дальность составила 2,5 км на (условно) прямой видимости.
Видимость условна прямая т.к. эксперимент проводился вдоль проспекта, вдоль которого располагались
столбы с весящими растяжками и кабелями, рекламные щиты и другими конструкциями.
Также рельеф местности вносил коррективы, это две точки с прямой визуальной видимостью, дальше
начинался поворот проспекта и снижение дороги.
Уровень сигнала в точке удаления 2.5 км составлял от -127 до -130 dbm.
Далее пройдя по прилегающим улицам удалось выяснить места где есть прием и где нет.
При отсутствии прямой видимость, на пути дома (а то и несколько домов) прием есть,
расстояние составляло 300-700 метров если смотреть по карте.
Если войти в здание то расстояние сокращалось в разы, а также место приема необходимо было
подбирать более тщательно.
Точки локального минимума и максимума внутри помещения могут находится на расстоянии 50-100 см.
Но тем не менее прием ЕСТЬ !
Увеличение расстояния.
Дальность можно повысить если поднять передатчик выше, подключить настроенные антенны или
применить направленные антенны, но было интересно посмотреть как себя ведут данные антенны
"спиральки".
Ради интереса данные спиральки были подключены к анализатору цепей, для снятия характеристик
антенн.
Результаты получились следующие (параметры сильно плавали в зависимости от положения
окружающих предметов, на расстоянии от 0 до 20-30 см):
- Резонансная частота плавала от 850 до 950 МГц.
- КСВ плавал от 1.2 до 4 в полосе 850 до 950 МГц.
Малейшее изменение положения антенны и можно было получить резонанс на 930 МГц
(за место 864 МГц) и КВС на частоте 864 МГц равный 3 - 5 !
Затем для частоты эксперимента были проведены измерения штыревых антенн для диапазона
864-915 МГц которые были под рукой.
Данный антенны вели себя более устойчиво, во всей полосе частот, и сильный завал характеристик
удавалось получить только когда антенны полностью закрывались рукой или другим предметом.
Итог.
LoraWan интересная работоспособная технология, можно применять.
Пока еще Lora сетей не так много, и эфир достаточно чистый. Но по мере развития и внедрения
новых сетей плотность в эфире будет расти, что будет приводить как минимум к конфликтам и
помехам от работы других подобных сетей.
Судите сами. Датчики опрашиваются редко, сообщения короткие, это хорошо.
Но если датчиков становиться сотни (и скорость передачи минимальна), время необходимое для
опроса всех датчиков в сети будет требоваться уйма. Плюс пусть в данном канале работает другая
подобная сеть (с другим идентификатором) и тоже большим количеством датчиков.
В результате может получатся так, что сети будут не работоспособны (полностью или частично)
так как, будут глушить друг друга.
В общем тут есть над чем подумать.