Пари
Статус проекта:
Основная идея состоит в том, чтобы иметь возможность использовать Semtech Lora SX1272MB2DAS Shield на доске ядер STM32WB55. К сожалению, код, доступный ST (I-Cube-Lrwan) для этого щита, доступен только для нескольких досок в ядрах (L053RG, L073RZ, L152RE и L476RG).
Производственные идеи заключаются в том, чтобы жениться на Лоре и Бле, в настоящее время многие объекты IoT доступны по разным причинам (настройки, провинции, Fuota, ...), но в основном потому, что они совместим со смартфонами. Серия STM32WL не имеет BLE, а у серии STM32WB нет возможностей LORA.
Что ж, у меня была возможность создать пару с SX1272 и WB55 и позволить комбинации двух чипов для гибкого проекта IoT. Имейте в виду, что серия WB55 не ограничена BLE. Прошивка Coprocessor может обрабатывать 2,4 ГГц боковых протоколов, таких как Zigbee и Openthread. Таким образом, комбинация радиочастотных и коротких радиочастотных коммуникаций интересна.
Этот проект представляет собой только порт существующих кодов и библиотек, но может сэкономить время настройки для некоторых разработчиков, так как есть некоторые технические проблемы для решения.
С предстоящей Lora 2,4 ГГц это следует рассматривать как переходную работу. SX1280 будет комбинировать короткую и дальнюю связь в одном чипе. Вы можете поближе познакомиться.
Это легко найти. Semtech SX1272MB2XAS LORA MBED SHIELD - ARDUINO, совместимый с экраном, а ядровые платы имеют соответствующий разъем. Техническое краткое изложение:
Как уже упоминалось, серия STM32WB55 является целью здесь, и P-Nucleo-WB55RG-хорошая доска для игры. Техническое краткое изложение:
После подключения (это не сложно), вот полученный объект. 

Никогда не забывайте подключить антенну перед включением досок. Вы можете повредить результат РЧ -усилителя (хотя это довольно низкий мощный). Конечно, покупка по двум каждому немного необходима для пинг -понга.
| Упаковка | Версия |
|---|---|
| STM32Cubeide | 1.7 |
| STM32Cubemx | 6.3.0 |
| FW_WB | 1.12.1 |
| I-cube-lrwan | 2.0 |
Основная часть кода охватывается ST и Semtech Sublicensing. Ознакомьтесь с соответствующими соглашениями для правильного использования:
| Компонент | Авторское право | Лицензия |
|---|---|---|
| Оригинальный источник приложения | Stmicroelectronic | Лицензионное соглашение ST SLA0044 |
| Lorawan® Stacks | Семтех | BSD Пересмотренная лицензирована для полутчевых деталей |
| Cortex®-M CMSIS | Arm Ltd | BSD-3-CLAUSE или Apache License 2 |
Моя любимая среда разработки - Linux, но инструменты ST доступны и для Mac и Windows. Первые два легче настроить, обычно нет проблем или проблем с драйвером. Ну, настоящие технологии уже знают это.
Хотя я не большой поклонник IDES, STM32Cudeide Works OK, и плагины ST помогли (MX, Расширение программного обеспечения, скачать, ...). Stmicro предоставляет пакет расширения программного обеспечения для некоторых щитов Lora. Как связано выше, это I-Cube-Lrwan и содержит примеры проектов и библиотеки, такие как драйверы SX1272 низкого уровня (через SPI) и стек Lorawan (1,0,3 совместимых).
Проект может быть легко открыт в STM32Cudeide без зависимостей. Весь код не нужно устанавливать WB или Lorawan Firmare из ST. Откройте проект и создайте его (протестировано на Linux и MacOS). Тем не менее, вам нужна прошивка BLE Stack, установленная для CPU2. Здесь, STM32WB5X_BLE_STACK_FULL_FW.BIN был вспых. Каждая прошивка стеков представлена в проектах/STM32WB_COPRO_WIRELESS_BINARY/STM32WB5X Справочниках пакета прошивки STM32CUBEWB, а также о том, как программировать платы для этого. Это должно быть сделано один раз .
Весь эксперимент нуждался в дополнительных инструментах. Я использовал Mighty NRF52840 USB -ключ с NRF Connect для настольного компьютера 3.7.0 (доступен на Linux, Mac и Windows) от Nordic полупроводника для проверки BLE. Я знаю, что смартфоны могут это сделать, я использую LightBlue на iOS или Android, но когда вы испортите UUID или названия устройств, платформы, как правило, теряются при кэшированных данных, поэтому мне нравится выяснять, что происходит с такими инструментами разработки, как северные.
Для части Лоравана TTN просто великолепен, и я решил купить недорогую ворота Лоравана, TTIG (дешевле, чем rak ляпсы для Raspberry Pi) для местных тестов. Шлюз жестко кодируется службами TTN, но должен быть способ подключиться к вашим собственным LNS.
Это был самый первый шаг. Заставляя вещи работать, и я выбрал для этого пример передачи RF низкого уровня. Портирование кода ST/Semtech была вопросом для реконфигурации WB55:
Картирование штифтов между платой WBLEO WB55 и SX1272MB2DAS Shield:
| SX1272MB2DAS | P-NUCLEO-STM32WB55 | Имя штифта соединителя Arduino |
|---|---|---|
| Dio0 | ПК6 | D2 |
| Dio1 | PA10 | D3 |
| Dio2 | ПК10 | D4 |
| Dio3 | PA15 | D5 |
| NSS | PA4 | D10 |
| SCLK | ПА5 | D13 |
| Мисо | PA6 | D12 |
| Моси | ПА7 | D11 |
| ПЕРЕЗАГРУЗИТЬ | PC0 | А0 |
Так что ничего несовместимого с первого взгляда. SPI1 SIN -набор соответствия, NSS и сбросных контактов тоже в порядке. Но вот первый Hickup с линиями IRQ. PC6 использует линию exti6 IRQ (exti9_5_irqn), это нормально, но PA10, PC10 и PA15 имеют ту же линию Exti IRQ, то есть exti15_10_irqn.
Таким образом, определение радио интерфейса было изменено в соответствии с платой Nucleo-WB55 (SX1272MB2DAS_CONF.H). И обработчики IRQ были изменены для проверки состояний GPIO (DIOX) перед вызовом соответствующих обработчиков IRQ SX1272 (обратитесь к исходному файлу SX1272 IRQ)
RTC имеет набор источников часов в LSE.
Оригинальный макет файла проекта также был немного изменен. Интеграция исходных файлов была сделана в проекте, сгенерированного MX (SX1272.ioc), чтобы сохранить возможность изменения проекта. Тем не менее, какой -то осторожный должен восприниматься как конфликтный код .
Программирование двух досок с этим кодом работает, и, как и ожидалось, первая доска, которая получает ответ понг на сообщение Ping, становится мастером, другой становится рабом . Я сделал статус светодиода отразить это (как ранее планировалось в исходном коде). Один мигает красный, где у другого зеленое светодиод мигает через короткое время: видео.
Код BLE - это полностью MX, сгенерированный. Наличие одного, которое работает сразу же, было не было простым, так как многие вещи должны быть должным образом установлены в проекте MX (которая могла бы отдельной статьи). Я настроил тестовый проект BLE в отдельно для этой цели, после того, как он сработал, я объединил код в проект LORA, чтобы два запускались рядом.
Таким образом, программное обеспечение для испытаний BLE - это всего лишь HRS (датчик сердечного ритма) периферический код. Он основан на совершенно другой структуре таймера, которая называется аппаратным сервером таймера (HW_TS). Библиотека Semtech Lora основана не на этом, а на утилите STM32_Timer, основанной на драйвере HAL RTC. Я снял библиотеку утилиты и адаптер RTC, чтобы весь проект полагался только на HW_TS. Библиотека LORA фактически опирается на промежуточный API (Timer.h), который был легко переписать, поэтому вместо этого используется HW_TS. Приложение Ping Pong, с другой стороны, опирается на бывшую библиотеку утилиты. Несколько изменений, внесенных в этой части, сделало весь код полагаться только на HW_TS.
Мне нужно объединить задачи, определенные приложением Ping Pong и кодом BLE. К счастью, они используют утилиту STM32_Sectencer . После того, как правильно сделано, я успешно сделал приложение Lora Ping Pong и приложение Hrs BLE, работающее одновременно и безупречно на плате STM32WB55.
Я изменил код APP_BLE.C, чтобы рекламное (видимое) имя основано на STM32 UDN, чтобы мы могли различать платы, работающие одновременно.
Для полезной демонстрации я написал специальную службу GATT, чтобы обе платы могли быть опрошены через BLE, чтобы вы могли знать, какую роль имеет узел Lora (Master или Slave) и количество Ping/Pong, отправленное/полученное. Для этого я слегка адаптировал код BLE, так что синий светодиод отражает состояние соединения BLE. Пользовательский сервис (не генерируемый MX, он слишком грязный), имеет две характеристики, одна для знания роли узла (мастер или подчинение после синхронизации Пингпон) и еще одна, которая является счетчиком полученных рамков Ping (рабский узел) или кадров Pong (мастер -узел). Вот скриншот NRF Connect, подключенные к двум синхронизированным доскам: 
Это было сделано, я предпочел проводить больше времени на немного другое приложение Lora, управляемое BLE, которое является следующим шагом.
Стек Lorawan-это тот, который является Semtech, предоставленным в пакете расширения I-Cube-Lrwan. Он соответствует 1,0,3 и включает в себя пакет программного обеспечения для сертификации, если для окончательного устройства необходима сертификация Lora Alliance.
Опять же, код опирается на другую обертку RTC, чем на стек BLE, поэтому он был изменен для этого. Количество таймеров было увеличено, поскольку начальная настройка HW TimerServer слишком ограничена для одновременного запуска двух стеков (файл hw_if.h изменен после модифицированного МОК).
Первоначальный пример, Lorawan End Node, отправляет очень полный набор данных, я резко сведет тестовый кадр до простого текста.
Устройство настроено на присоединение к сети с использованием OTAA, поэтому необходимы 3 элемента: DeVeui, Joineui и Appkey. DeVeui является уникальным идентификатором для аппаратного устройства и построен из серийного номера STM32. Идентификатор joineui (или бывший Appeui) используется для разделения приложений на стороне сервера. Appkey очень важен (ключ AES128), что MUTs сохраняется очень тайно. Исходный код произвольный установил его на значение, которое должно быть изменено для окончательного использования. Секретность осуществляется с помощью Semtech Code с использованием API безопасного элемента, в нашем случае это виртуальная SE, но это очень удобно, если вы используете фактический.
JOINEUI и Appkey в твердом кодировании в файле se-inedity.h ( lorawan_app_key и lorawan_nwk_key должны быть одинаковыми значениями для OTAA, последний используется для вычисления MIC и необходимо для того, чтобы JoinRequest был действительным на LNS).
Тестирование с помощью TTN и TTIG Gateway дает их:

Для декларативной части.

Как только у двух досок получил положительный ответ от соответствующего JoinRequest.
Специальная служба GATT была написана для разоблачения:
| Атрибут | Доступ | Комментарий |
|---|---|---|
| Статус | Читать | Заполнил ли JoinRequest |
| DeVeui | Читать | Чтение вычисленного deveui |
| JOINEUI | Читать | Чтение твердого кодированного joineui/appeui |
| Данные | Писать | Данные, которые будут отправлены (максимум 16 байтов). По умолчанию "STM32WB55 здесь!" |
| Период | Писать | Период в секундах, когда данные отправляются (по умолчанию до 10 секунд) |
| RSSI | Читать | Обновлено при получении сообщения нисходящей линии связи |
| SNR | Читать | Обновлено при получении сообщения нисходящей линии связи |
Примечание: не связывайтесь с периодом, существует ограничение рабочего цикла в 1%. С настройками по умолчанию модуль отправляет 15 байтов каждые 10 секунд. При SF7BW125 это может быть сделано в самый низкий период в ~ 7 секунд.
Здесь иллюстрация обнаженных характеристик при подключении к ней:

продолжение следует