Получение выходных данных отладки устройства Azure Sphere
При разработке Решения Интернета вещей часто требуется доступ к выходным данным отладки с устройств. Хотя это можно сделать с помощью отладочного подключения к Visual Studio/Code (но также может быть достигнуто из командной строки), также может потребоваться просмотреть выходные данные отладки для устройств, которые не подключены к Visual Studio/Code. Такие устройства могут выполнять долгосрочные тесты или даже развертываться в рабочей среде. Существует несколько вариантов получения доступа к данным отладки:
- Получение выходных данных отладки с устройства, подключенного к компьютеру разработки
- Получение выходных данных отладки для устройства, не подключенного к компьютеру разработки
- Ведение журнала во внешнее хранилище
- Ведение журнала в Azure
Получение выходных данных отладки с устройства, подключенного к компьютеру разработки
Проблема: Как получить выходные данные отладки при отладке с помощью Visual Studio или Visual Code?
Параметры:
Высокоуровневое приложение
Высокоуровневое приложение Azure Sphere может использовать API Log_Debug для отправки выходных данных отладки с форматированием стиля printf на подключенный компьютер во время отладки. Эти выходные данные можно просмотреть с помощью Visual Studio или Visual Studio Code окна отладки или из командной строки.
Возможно, вы захотите настроить флаги детализации отладки в приложении и использовать определения компиляции CMake для управления объемом выходных данных отладки при запуске приложения. В файле CMakeLists.txt можно создать определение времени компиляции:
add_compile_definitions(DEBUG_FLAG)
Затем в коде приложения высокого уровня можно увеличить или уменьшить объем выходных данных отладки, отображаемых приложением, с помощью
#ifdef
, например:
#ifdef DEBUG_FLAG
Log_Debug("My Message\n");
#endif
Приложение с поддержкой реального времени
Приложение с поддержкой реального времени Azure Sphere (работающее на одном из ядер M4) может записывать сведения об отладке и журнале в выделенный UART-интерфейс M4, предназначенный только для передачи. Для этого требуется USB/последовательный адаптер, например FTDI Friend и эмулятор терминала.
В примере Hello World Azure Sphere показано, как печатать в UART отладки M4.
Кроме того, в CodeThink и MediaTek доступны примеры приложений:
Определения времени компиляции флагов отладки также можно использовать в приложениях с поддержкой реального времени (M4).
Использование межядерных коммуникаций для отправки состояния из приложения с поддержкой реального времени в высокоуровневое приложение
Если вы создаете систему, которая сочетает в себе высокоуровневое приложение, поддерживающее режим реального времени, может потребоваться использовать высокоуровневое приложение для регистрации состояния системы для обоих приложений. Для этого можно использовать межядерные коммуникации. Пример межядерной связи Azure Sphere реализует простой интерфейс для передачи сообщения между высокоуровневым приложением и приложением с поддержкой реального времени.
В этом модуле обучения Azure Sphere показано, как использовать Azure Sphere и ОСРВ Azure в сочетании с межядерной моделью обмена сообщениями для передачи пользовательских сообщений между ядрами.
Получение выходных данных отладки для устройства, не подключенного к компьютеру разработки
Проблема: Как регистрировать выходные данные отладки, если устройство не подключено к компьютеру разработки?
Параметры:
Отправка выходных данных отладки по сети или UART
Получение сведений журнала отладки при подключении устройства к компьютеру разработки довольно просто. Однако также может потребоваться собирать сведения об отладке или журнале, если устройство не подключено к компьютеру. Например, у вас может быть набор устройств, выполняющих долгосрочные тесты.
Если устройства подключены к сети, может потребоваться отправить выходные данные отладки по сети в приложение, которое может собирать и анализировать информацию. Это приложение коллекции Azure Sphere демонстрирует, как переопределить поведение по умолчанию Log_Debug для отправки и получения этих выходных данных через сокет UDP.
Обратите внимание, что механизм, используемый для переопределения приложения с высоким уровнем потока по умолчанию Log_Debug поведения, также можно использовать для отправки сведений журнала отладки в другие места, например для вывода данных в одном из UART Azure Sphere. Этот пример UART можно использовать в качестве ссылки для объединения с приложением коллекции UDPDebugLog для регистрации сообщений в UART.
Отправка выходных данных отладки в Центр Интернета вещей Azure/Azure IoT Central
Хотя выходные данные отладки могут быть полезны для диагностики проблем по мере их возникновения, также может быть полезно хранить данные телеметрии или журнала с устройства для последующей обработки.
Настройка экземпляра Центр Интернета вещей Azure или Azure IoT Central предоставляет конечную точку для отправки данных телеметрии устройства, которые могут использоваться в бизнес-логике. Вы также можете отправлять сведения о состоянии или журнале устройства, которые можно обрабатывать отдельно от данных телеметрии или бизнес-данных.
В примере ведение журнала в Azure показано, как пересылать сообщения журнала в виде Центр Интернета вещей телеметрии и хранить их в кластере azure Data Explorer для расширенного выполнения запросов.
Центр Интернета вещей Azure
Экземпляр Центр Интернета вещей Azure можно настроить для отправки данных в Базу данных Azure для хранения или анализа. Также может потребоваться фильтровать сообщения, что можно сделать с помощью EventHub и функции Azure.
Для Центр Интернета вещей Azure можно отправлять данные в функцию Azure, которая затем может обрабатывать сообщения. В статье триггер Центр Интернета вещей Azure для Функции Azure объясняется, как связать функцию Azure с экземпляром Центр Интернета вещей Azure.
Azure IoT Central
Azure IoT Central предоставляет возможность постоянного экспорта данных в различные конечные точки, в том числе:
- Центры событий Azure
- Очередь Служебная шина Azure
- раздел Служебная шина Azure
- Хранилище BLOB-объектов Azure
- Веб-перехватчик
Веб-перехватчик — это созданная вами конечная точка REST API, которая может быть функцией Azure.
Обратите внимание, что вы можете фильтровать сообщения в функции Azure на основе идентификатора устройства, отправляющего данные. Идентификатор устройства можно получить с помощью следующего кода в функции Azure:
public static async Task Run(EventData message, ILogger log)
{
var deviceId=message.SystemProperties["iothub-connection-device-id"];
// Code to filter the messages goes here...
}
Центр Интернета вещей Azure и Azure IoT Central поддерживают двойники устройств, которые включают требуемое состояние (заданное в приложении Центр Интернета вещей/Central) и сообщаемое состояние (состояние с устройства). Вы можете использовать Центр Интернета вещей Azure/Центральный двойник устройства, чтобы задать требуемое состояние для детализации данных журнала (увеличение или уменьшение частоты ведения журнала или богатство данных ведения журнала). В примере Интернета вещей Azure показано, как обрабатывать изменения двойника Desired State
устройства.
Ведение журнала данных в хранилище
Azure Sphere поддерживает до 64 КБ изменяемого хранилища для высокоуровневого приложения. Это можно использовать для сохранения параметров, состояния приложения или других данных. Разработчики приложений отвечают за сериализацию и десериализацию данных в изменяемое хранилище. Коллекция Azure Sphere включает проект , в который показано, как использовать пару "ключ— значение" (словарь) для записи и чтения состояния в изменяемое хранилище (до 64 КБ в зависимости от того, как настроен манифест приложения).
Может потребоваться записать более 64 КБ данных журнала или состояния в той или иной форме внешнего хранилища. Это может быть полезно для устройств с периодическим подключением или для хранения и извлечения более 64 КБ данных.
Один из вариантов — добавить внешнее хранилище, возможно, использовать вспышку SPI для хранения данных. Этот проект использует вспышку SPI для хранения обновления по воздуху для подчиненного устройства и может быть изменен для поддержки ведения журнала данных телеметрии или состояния из приложения Azure Sphere.