ЧАСТЬ 2 из 4-х частей серии статей об использовании Nordic Thingy91 с Edge Impulse

Часть 1: от нуля до героя с Nordic Thingy91 и Edge Impulse

Часть 3. Создание собственной прошивки Edge Impulse Thingy91 и подключение к MQTT

Часть 4. Создание интерактивных автономных моделей Edge Impulse с возможностью подключения MQTT на Nordic Thingy91

Edge Impulse официально поддерживает Thingy91, предоставляя прошивку, которую вы можете прошить на плату, что, в свою очередь, позволяет вам подключаться к Edge Impulse Studio для сбора данных. Существует также возможность генерировать прошивку из ваших собственных импульсов прямо из веб-интерфейса для развертывания на Thingy91 для запуска ваших моделей машинного обучения прямо на устройстве.
Прежде чем двигаться дальше, убедитесь, что на вашем ПК установлена ​​программа nRF Connect 3.7.1. В этом руководстве предполагается, что вы используете Windows 10. Помимо некоторых шагов по настройке среды Nordic, многие шаги Nordic и все шаги Edge Impulse Web Studio являются общими для Windows, MacOS и Linux.
Обратите внимание, что на момент написания статьи в Windows и Linux можно было использовать только nRF Connect 3.7.1, версию 3.7.2, если вы используете MacOS.
Если у вас уже установлена ​​более поздняя версия, вам необходимо сделать следующее, чтобы перейти на nRF Connect 3.7 (если вы этого не сделаете, вы столкнетесь с такими проблемами, как ошибки «Нет признаков» при попытке прошивки):

  1. Загрузите самую актуальную подверсию 3.7 для вашей платформы по этой ссылке (https://www.nordicsemi.com/Products/Development-tools/nRF-Connect-for-desktop/Download?lang=en#infotabs ). Это будет либо 3.7.1 (Windows/Linux), либо 3.7.2 (Mac).
  2. Установите эту загрузку и запустите ее. Вам будет предложено обновить и нажать Нет.
  3. Выберите Настройки в nRF Connect и выберите Добавить источник, а затем вставьте следующий URL-адрес http://developer.nordicsemi.com/.pc-tools/nrfconnect-apps/3.7-apps/apps.json.
  4. Вы должны увидеть «3.7 Совместимые приложения, v x.x.x» во всех инструментах вместе с последними «официальными» версиями, что означает, что вы увидите более одной версии каждого инструмента. Если вы используете только Thingy91, вы будете использовать только версии, совместимые с 3.7, поэтому необязательный шаг, чтобы упростить вашу жизнь, — нажать «Фильтр», как показано ниже, и отфильтровать официальные/последние версии, сняв флажок «Официальные».

В этом руководстве также основное внимание уделяется использованию порта USB для прошивки прошивки, однако, если у вас есть отладчик Segger J-Link или плата со встроенным отладчиком, вы также можете использовать порт отладки для прямой прошивки обеих микросхем (nRF9160 и nRF52840) на устройстве. .

Затем вы должны установить как минимум надстройку программатора в nRF Connect, нажав кнопку установки, которая затем изменится на «Открыть», как показано ниже, после установки программатора.

Обратите внимание, что приложение будет называться совместимым с 3.7, если вы правильно выполнили шаги по настройке старой версии.
Когда вы нажмете «Открыть» в приложении Programmer, откроется окно, как показано ниже, и теперь все готово.

Эти шаги задокументированы на сайте Edge Impulse и частично на сайте Nordic. Некоторые из шагов, которые вам нужно выполнить в этом руководстве, вы будете часто повторять, и их наличие здесь в одном месте избавит вас от необходимости прыгать вперед и назад во время чтения. Приведенные здесь шаги предназначены для того, чтобы дать вам представление о полном сквозном процессе использования Thingy91 вместе с Edge Impulse. Следование этому руководству также поможет вам ознакомиться с процессом сборки самого Thingy91. Итак, давайте к этому тогда.

Первым шагом является прошивка устройства прошивкой Edge Impulse, чтобы вы могли подключиться к устройству в студии Edge Impulse, чтобы начать сбор данных для обучения вашего режима. Прошивка Edge Impulse поддерживается Edge Impulse и доступна для загрузки в готовом виде здесь:
Когда вы загрузите ее и распакуете архив, вы найдете следующие 3 файла:

Конкретные файлы, которые вам нужны, это файлы .hex, которые представляют собой скомпилированную прошивку, готовую к прошивке на микросхемы Thingy91. Файл «connectivity-bridge.hex» предназначен для nRF52840, который действует как последовательный интерфейс USB на плате, отсюда и название моста подключения. Эта прошивка не играет большой роли в вашем окончательном приложении, и вам нужно будет прошить ее только один раз, если версия вашего оборудования ниже 1.4.0. Версия аппаратного обеспечения указана на этикетке, как показано ниже. Если вы сомневаетесь, все равно прошивайте, так как это нужно сделать только один раз.

Файл «firmware.hex» — это микропрограмма основного приложения, которая выполняет вывод и управляет датчиками и подключениями к веб-студии Edge Impulse Studio. Этот файл загружается во встроенный процессор приложений nRF9160 при выполнении следующих шагов. Помимо возможности подключения к Edge Impulse Studio, эта прошивка также управляет выводом модели, управлением через командную строку, датчиками и, конечно же, модемом LTE. Также имеется клиент MQTT для удаленной публикации данных. Первая версия, которую вы загрузите, не будет содержать вашей модели и используется только для начального этапа подключения к Studio и сбора данных. Позже вы перепрошьете nRF9160 обновленной прошивкой, содержащей вашу обученную модель, все настроено и готово к работе, это перезапишет версию, которую вы изначально загрузили. Вы узнаете, как это сделать, шаг за шагом.

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

Начиная с прошивки Connectivity Bridge на nRF52840, вам необходимо подключить устройство к компьютеру через USB, а затем выключить питание.

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

Будьте осторожны, так как это очень маленький переключатель, и лучше всего использовать что-то тупое и сделанное из пластика, чтобы нажать на него, например, на обратной стороне маркера или ручки. Вы даже можете использовать край прилагаемого держателя IBasis Sim. Эта кнопка находится рядом с компонентами, включая nRF52840, поэтому следите за тем, чтобы то, что вы используете для нажатия этого переключателя, не соскользнуло и не замкнуло открытые контактные площадки или не сместило какие-либо компоненты с платы.

Открыв программное обеспечение nRF Connect Programmer, просто включите Thingy91, сдвинув переключатель SW1 и удерживая нажатым переключатель SW4. Лучше всего это делать двумя руками.

В программе Programmer устройство будет отображаться как один последовательный порт. Число будет варьироваться в зависимости от вашей системы, так как в данном случае это виртуальный COM-порт, созданный Windows. Вы должны увидеть, как серая точка станет зеленой, что означает успешное подключение к Thingy91. Установите флажок «Включить MCUboot» красным цветом.

Перейдите в «Добавить шестнадцатеричные файлы», перейдите к прошивке «connectivity-bridge.hex» и нажмите «Записать», выделенную зеленым цветом выше. Появится окно MCU Boot DFU. Нажмите «Записать» еще раз в этом всплывающем окне, и начнется перепрошивка.

После завершения вы должны завершить работу с Connectivity Bridge, и вам не нужно будет снова использовать SW4. MCUBoot — это безопасный загрузчик, встроенный в ваши шестнадцатеричные файлы, который позволяет вам записывать программное обеспечение через виртуальный com-порт USB, в противном случае вам понадобится отладчик, такой как Segger J-Link, что, в свою очередь, означает дополнительное оборудование, необходимое для источник.

Благодаря MCUBoot все, что вам нужно, это USB-кабель, поэтому убедитесь, что вы всегда выбираете этот вариант. В прошивку Edge Impulse встроен загрузчик MCUBoot, так что вам не о чем беспокоиться. Это относится как к nRF9160, так и к nRF52840 (firmware.hex и connection-bridge.hex).

Если на этом этапе вы столкнетесь с проблемами или ошибками, вернитесь назад и убедитесь, что у вас установлена ​​версия 3.7.x, как описано выше. Кроме того, если MCUBoot не работает, вам может понадобиться отладчик Segger J-Link для прямой прошивки прошивки MCUBoot. Если устройство совершенно новое, это не должно быть проблемой, но это может быть проблемой, если кто-то другой использовал устройство и решил не загружать загрузчик.

Далее идет фактический файл прошивки для основного процессора приложений nRF9160, и для этого вы выполняете тот же процесс, что и выше, но сначала вам нужно нажать «Очистить файлы», выделенный синим цветом, а затем найти «firmware.hex». Как и прошивка, которую вы прошивали на nRF52840 для моста подключения, основная прошивка также содержит MCUBoot, так что вы можете прошить свое приложение через USB. На данный момент следующие шаги для прошивки основного приложения на самом nRF9160 — это то, что вы можете использовать снова и снова при обновлении прошивки.

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

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

Вы можете прошить прошивку, установив флажок MCUBoot и нажав Write. Вы получите такое же всплывающее окно MCUBoot DFU, как и в случае с nRF52840 ранее, просто нажмите «Записать» еще раз.

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

Рабочий процесс Edge Impulse

Общий процесс, которому вы будете следовать с Thingy91, будет состоять в том, чтобы один раз прошить мост подключения, а затем прошить основную прошивку, чтобы иметь возможность подключаться к студии и собирать данные. Как упоминалось ранее, после того, как вы построили, обучили и настроили свою модель и готовы запустить ее на Thingy91, Edge Impulse Studio позволяет вам создать свежую прошивку, содержащую обученную модель, выбрав цель сборки Thingy91 в разделе Развертывание. меню.

После того, как вы нажмете «Сборка» и завершите сборку, Studio предоставит вам новую загрузку прошивки, как и исходную прошивку, которая также будет иметь «connectivity-bridge.hex», но на этот раз она содержит обновленную версию «firmware.hex». », и в нем запекается ваша развернутая модель. Все, что вам нужно сделать, это перепрошить «firmware.hex», используя описанный выше процесс, на Thingy91, а затем запустить его непосредственно на устройстве либо из командной строки, либо через последовательную консоль. . Обратите внимание, что вам не нужно повторно прошивать прошивку моста подключения, но она включена в загрузку на случай, если вы используете ее впервые. Надеюсь, на этом этапе процесс ясен, но практика делает его совершенным, поэтому я призываю вас выполнять шаги, пока вы не привыкнете к устройству.

В качестве альтернативы сборке прошивки непосредственно в студии вы можете использовать другой подход — создать и экспортировать C++-версию нашей модели со страницы Edge Impulse Studio Deployment. Это переносимая библиотека C++, которая содержит все необходимое для запуска вашей модели (код DSP для извлечения признаков, а также саму модель). Затем его можно добавить в исходный код прошивки и пересобрать из командной строки или из IDE. Если вы будете следовать этому подходу, вы сможете внести изменения в прошивку, и вы не будете загружать готовые шестнадцатеричные файлы. Подробнее об этом в следующем разделе, а пока воспользуемся функцией сборки прошивки в Studio.

Давайте выполним эти шаги, чтобы построить базовую модель классификации движения, которая станет основой для остальной части этого проекта. На этом этапе вы знакомы с процессом создания моделей Edge Impulse и можете сразу перейти к разделу о локальном создании встроенного ПО.

Первый шаг — войти в Edge Impulse Studio по адресу www.edgeimpulse.com и нажать кнопку Создать новый проект:

Начните с создания пустого проекта акселерометра:

Выберите «Начать», чтобы открыть панель инструментов Studio.

На данный момент у вас есть два способа подключения Thingy91: один из них — использовать команду интерфейса командной строки (CLI) «edge-impulse-daemon» или, благодаря WebUSB, вы также можете подключить его напрямую через интерфейс Studio в своем браузере. WebUSB — это более новая функция, использующая API-интерфейсы HTML5 для прямого подключения браузера к локальным последовательным портам. Это самый простой и быстрый способ подключения.

Как и в Nordic Programming Software, появляются 2 последовательных порта, и они должны быть пронумерованы так же, как вы видели в Nordic Programming software, если только вы не делаете это с другой рабочей станции. Пока вы видите два порта, выберите порт с наименьшим номером и нажмите «Подключиться».

Через несколько секунд ваше устройство будет готово к выборке, и в блоке «Запись новых данных» отобразится идентификатор устройства, который для Thingy91 получен из IMEI модема LTE, уникального для каждого nRF9160.

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

Ниже вы можете увидеть примеры сэмплирования окружения и света по отдельности.

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

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

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

Что я сделал, так это выбрал опцию «Только акселерометр» в разделе «Датчик» и создал образцы со следующими метками: «motion_up», «motion_foward», «motion_side», «канцелярские товары». Обратите внимание, что в этом примере «motion_up» означает «вверх» и «вниз» и т. д., имена должны быть короткими для краткости, но вы можете свободно использовать любые метки, которые вы хотите, если вы отслеживаете, что они значат для вас в вашем приложении. .

Чтобы сэмплировать из Thingy91, введите имя метки в поле «Метка» и нажмите «Начать сэмплирование».

Приведенный выше пример будет производить выборку в течение 10 секунд, собирая 5 выборок в секунду. Вы можете отрегулировать длину и частоту дискретизации, но для этого примера нормально работает 5 Гц, и я бы посоветовал увеличить длину, чтобы вам не приходилось несколько раз нажимать «Начать сэмплирование».

Для метки «motion_forward» я перемещал Thingy91 вперед и назад, как показано синими стрелками, во время выполнения выборки. Я выбрал ось Y в качестве направления вперед/назад. Вы можете увидеть ось, обозначенную на печатной плате над держателем SIM-карты.

Сделайте то же самое для движения вверх и вниз и назовите его «motion_up», а затем для движения из стороны в сторону и назовите это «motion_side». Наконец, оставьте стационарные данные Thingy91 и образцы данных, пометив их как «стационарные».
После этого вы соберете данные, представляющие 3 поступательных степени свободы и стационарное состояние. Я собрал в общей сложности чуть менее 5 минут или чуть более 1 минуты на этикетку.

Прежде чем перейти к построению модели машинного обучения, вам сначала нужно разделить данные между обучающими и тестовыми наборами. Если вы знаете, что делаете, и у вас есть набор данных, который, как известно, работает, вы можете пропустить этот шаг и тренироваться только на обучающем наборе. Однако это крайне желательно при построении моделей. Параметры в верхней части экрана «Сбор данных» показывают, как разделены ваши данные. Блок «Собранные данные» показывает, сколько данных вы собрали, и визуально показывает, как они разделены между классами разными цветами.

То же самое относится и к разделению между обучающими и тестовыми данными. Вы можете вручную перемещать данные между двумя наборами, щелкнув 3 точки на каждом образце и выбрав для перемещения данных, и вы можете просмотреть каждый набор с помощью параметров «Тренировочные данные» и «Тестовые данные» вверху. Вы также можете навести курсор на круговые диаграммы, чтобы увидеть всплывающие окна, показывающие, какая это метка, и количество образцов, что очень удобно.

Хорошим разделением является 80% для обучения и 20% для теста, и вы можете сделать это автоматически с панели инструментов, нажав кнопку «Балансировать набор данных», которая пытается максимально соответствовать этому разделению на основе размера вашего набора данных.
Как только это будет сделано, нажмите «Создать импульс» и начните с добавления блока обработки объектов, просто нажав «Добавить блок обработки».

Для классификации движения выберите блок обработки «Спектральный анализ», который извлекает характеристики частотной области. Если вы не уверены, что означает, не беспокойтесь об этом слишком сильно, знайте, что Edge Impulse предоставил этот блок в качестве оптимального варианта обработки для классификации движения.

Когда вы позже развернете свою модель в Thingy91, Edge Impulse вставит код обработки цифровой обработки сигналов (DSP) в вашу модель, чтобы выполнить этот спектральный анализ в режиме реального времени на устройстве, прежде чем он передаст обработанные функции в модель нейронной сети на вашем устройстве. в настоящее время. Вам никогда не нужно беспокоиться об этом, кроме как знать, что он существует. Если вы строите встроенную модель ML с нуля или используете другие инструменты, вам необходимо быть компетентным в DSP и знать, как делать такие вещи, как быстрые преобразования Фурье, которые включают сложную математику и теорию обработки сигналов, как преподают на инженерных курсах, а затем выяснить, как реализовать их. Это может сильно задержать получение вашей модели на устройстве. С Edge Impulse для этого потребовалось всего несколько кликов.

Прежде чем закончить, вам нужно нажать «Добавить блок обучения», чтобы вставить саму модель ML в конвейер обработки. Выберите модель классификации. Опять же, нет необходимости беспокоиться об архитектуре модели, однако вы можете получить доступ к коду Keras TF, чтобы внести изменения или реализовать свои собственные архитектуры, если вы имеете опыт работы с ML. Эта модель использует очень простую, но эффективную архитектуру.

К настоящему времени вы должны увидеть ниже, и все, что вам нужно сделать, это нажать «Сохранить импульс».

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

Если вам интересно, когда мы будем обучать модель, то мы почти у цели. Прежде чем мы сможем это сделать, мы должны сначала сгенерировать функции на наших обучающих данных, которые мы выбрали ранее. Этот важный шаг необходим для обучения модели, которая на самом деле использует функции в качестве входных данных, а не необработанные данные, а также для того, чтобы помочь нам проверить наши данные, если они приведут к модели, которая может хорошо классифицировать. Чтобы сгенерировать функции, нажмите «Спектральные функции» и оставьте все параметры по умолчанию, нажав «Сохранить параметры». Затем нажмите «Создать объекты» в появившемся окне.

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

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

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

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

Последнее, что осталось сделать, это обучить модель, поэтому это было сделано, нажав «Классификатор NN», оставив значения по умолчанию и нажав «Начать обучение». Обучение проходит в облачном бэкенде Edge Impulse с использованием их ресурсов, поэтому оно происходит относительно быстро.

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

Поскольку я использовал небольшой набор данных, который не является идеальным, я провел тест только на небольшом наборе данных, используя функцию «Классифицировать все» для моего набора тестов. Чем больше наборы данных, тем лучше модель будет обобщать невидимые условия. Помните об этом при создании производственных моделей.
Когда обучение будет завершено, просто перейдите в раздел «Развертывание» в меню навигации слева, выберите Nordic Thingy91 в качестве цели и нажмите «Создать».

После сборки прошивки вы просто открываете zip-файл, который загружается автоматически, извлекаете и записываете файл «firmware.hex» в nRF9160, как описано выше.

Запуск импульса на вашем устройстве

Для запуска импульса у вас есть два варианта: первый — использовать команду CLI «edge-impulse-run-impulse», которая подключает ваше устройство через последовательный порт (USB к последовательному порту для Thingy91) и позволяет запускать импульс и просматривать результаты в режиме реального времени. Для выполнения этой команды вам потребуется установить интерфейс командной строки Edge Impulse.

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

Вывод будет повторяться каждые 2 секунды, и число рядом с каждой обученной вами меткой показывает уверенность модели в том, что Thingy91 находится в этом состоянии. Диапазон составляет от 0 до 1 и может быть преобразован в проценты путем умножения на 100. Приведенный выше пример показывает, что устройство с вероятностью 98% находится в стационарном состоянии, что так и есть. Обратите внимание, что категории вперед и сбоку регистрируются незначительно. Это связано с небольшим набором данных.

Второй вариант — использовать последовательную консоль и запустить Impulse с помощью прошивки Edge Impulse, встроенной в интерфейс AT-команды Edge Impulse. На данный момент не путайте это с командным интерфейсом AT на модеме nRF9160.

Putty — это хорошее консольное/терминальное приложение с открытым исходным кодом, которое позволяет подключаться к последовательным портам. В Сессии. Используйте наименьший обнаруженный номер порта и настройте Putty для подключения через последовательный порт на скорости 115200 бод.

Вы должны увидеть ниже, а затем вы можете начать свой импульс, набрав «AT + RUNIMPULSE» все заглавными буквами. Это запускает вашу модель непрерывно.

Ваша модель запустится на устройстве и покажет ту же информацию, которую вы видели при запуске «edge-impulse-run-impulse». Вы не можете использовать любое последовательное консольное приложение, а не только Putty.

Подключение к облаку

Thingy91 несколько уникален тем, что благодаря модему LTE он предлагает полное подключение к Интернету по протоколу TCP/IP. Для простоты использования клиент MQTT реализован непосредственно в прошивке, поэтому вам не нужно беспокоиться о реализации собственного протокола. MQTT стал стандартом де-факто для IoT благодаря своей простоте и надежности. MQTT — это протокол с посредником публикации/подписки, поскольку для него требуется центральный посредник, к которому подключаются клиенты.

Данные отправляются или, скорее, публикуются в темах, которые имеют свободную форму и могут быть созданы на лету клиентом публикации, а данные читаются другими клиентами, подписавшимися на тему. Темы имеют структуру, аналогичную путям файловой системы. Например, прошивка Edge Impulse публикуется в общедоступном брокере HiveMQ (broker.hivemq.com) в теме «ei/demo». Публичный брокер не требует аутентификации, и любой клиент может подключиться к этой теме и подписаться на нее. Если кто-то еще экспериментирует со своим Thingy91 в то же время, используя тему по умолчанию, его данные также будут опубликованы.

Чтобы подключиться к общедоступному брокеру, вы должны ввести команду AT+CONNECT с помощью консоли, и эта команда блокируется, и вы ничего не можете сделать, пока она не завершится. Возможно, вам придется подождать пару минут. Если вы видите приведенную ниже ошибку, подключение не работает при использовании микропрограммы, встроенной в Studio.

Thingy91 поддерживает как LTE-M, так и NB-IoT, и вам необходимо убедиться, что вы уточняете у местного оператора, который поддерживается. Если у вас есть только NB-IoT, у вас могут возникнуть проблемы с подключением к прошивке, которую вы создаете в облаке, и вы не сможете подключиться. Скорее всего, вам потребуется локально собрать прошивку Edge Impulse.

В Thingy91, который вы получаете, должна быть загружена последняя прошивка модема, но позже вы можете обнаружить, что прошивку вашего модема необходимо обновить, это довольно просто сделать. Если вы сомневаетесь, я бы посоветовал обновить его один раз, и, как и мост подключения, это также одноразовое действие.
Прошивка модема также размещается на nRF9160 только в определенной области памяти, связанной с частным процессором модема, помните что ваш nRF9160 имеет встроенный процессор приложений и модем. Прошивка модема реализует набор AT-команд, который позволяет вашему хост-приложению управлять модемом, например выполнять инициализацию, передачу данных и т. д.

Причина, по которой вы хотите обновить прошивку модема, заключается в том, что плата не подключается, но это будет первым шагом в устранении неполадок подключения. Прошивка находится здесь: https://www.nordicsemi.com/Products/Development-hardware/Nordic-Thingy-91/Download#infotabs
Обязательно выберите последнюю версию и на момент написания mfw_nRF9160_1.3.1.zip была последней рабочей версией. Файл будет начинаться с mfw_nRF9160.

Чтобы обновить прошивку модема, выполните тот же процесс, чтобы перевести nRF в режим MCUBoot, удерживая нажатой основную кнопку SW3 при включении питания, на этот раз вы выбираете кнопку «Обновить модем» в разделе «Сотовый модем».

Вместо просмотра шестнадцатеричного файла вы просматриваете загруженный вами Zip-архив, а программное обеспечение Programmer сделает все остальное за вас.

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

Теперь, когда вы знакомы с перепрошивкой прошивки и работой с Edge Impulse, следующим шагом будет научиться собирать прошивку локально, чтобы увидеть, как это сделать, перейдите к Часть 3. MQTT