Сенсорная телеметрия 2.0.1
Sensor Telemetry 2.0.1. Передача данных о температуре в Microsoft Azure IoT Hub и удаленный мониторинг данных из универсального приложения Windows. Цифровой ремастеринг!
История
ОБНОВЛЕНО:проект Sensor Telemetry был обновлен в цифровом виде. Обновлено 17 мая 2017 г. и переименовано в Sensor Telemetry 2.0.1
Введение
Обзор
В этом проекте мы будем контролировать датчик температуры ( MCP9808 ) и отправлять показания телеметрии в Microsoft Azure IoT Hub где Stream Analytics задание обработает сообщения и запишет их в Azure SQL База данных Таблица. Мы будем использовать мобильные приложения для просмотра истории показаний датчика.
Приложение
Проект содержит два универсальных приложения для Windows . (на универсальной платформе Windows, UWP), которые разделяют около 99% кода. Один нацелен на Raspberry Pi (или ARM), а другой - на платформы x86 или x64.
Версия приложения для Интернета вещей работает на Raspberry Pi и считывает температуру с MCP9808. Приложение отправляет события телеметрии в Azure IoT Hub и SignalR . центр. Эта версия также будет прослушивать команды из Azure IoT Hub.
Клиентская версия, запущенная на компьютере, будет прослушивать обновления датчиков от концентратора SignalR и отображать их на экране. Эта версия также будет отправлять команды версии IoT через Azure IoT Hub.
Технологии
Приложение в этом проекте основано на MVVM (Модель-Представление-Модель представления) и был построен с использованием Призмы библиотека и использует Prism.Unity для IoC (Инверсия управления) контейнер. Помимо этих библиотек, приложение использует агрегатор событий . найдено в Prism.Event библиотека для создания, насколько это возможно, чисто событийной архитектуры. Приложение использует эту библиотеку, чтобы внутренние модули могли обмениваться данными, оставаясь при этом слабосвязанными.
Приложение также использует SignalR в мобильном приложении Azure, чтобы несколько экземпляров приложения могли взаимодействовать друг с другом. Показания температуры «транслируются» всем клиентам, работающим удаленно, чтобы они могли получать показания датчика температуры для отображения в главном окне.
Архитектура
В основе приложения лежит библиотека MCP9808, созданная как отдельный проект, который можно повторно использовать в других приложениях. Этот проект разработан как библиотека UWP, которую можно использовать в любом приложении Windows 10. Если библиотека используется на устройстве без I2C bus библиотека не вернет ни одного объекта устройства. Этот подход можно использовать для «обнаружения» датчика и корректного игнорирования библиотеки, если датчик не найден.
В клиентском приложении UWP есть несколько блоков, составляющих все приложение. Представления - это видимые страницы, и каждое представление имеет модель представления, отвечающую за состояние представления. Есть три репозитория:настройки приложений ( IApplicationSettingsRepository ), отладочная информация ( IDebugConsoleRepository ), а также чтение и запись MCP9808 ( ITemperatureRepository ). Есть два конкретных класса, построенных вокруг ITemperatureRepository; один является оболочкой для библиотеки MCP9808, а другой - нулевым устройством, используемым, когда приложение не запущено на Raspberry Pi.
Класс Mcp9808TemperatureRepository контролирует MCP9808 с помощью службы таймера и публикует информацию о температуре через внутренний агрегатор событий каждый раз при изменении показаний температуры или состояния предупреждения. Новое событие отправляется только в том случае, если текущее показание отличается от предыдущего.
Существует также ряд служб, определенных в IBackgroundService которые выполняются в фоновом режиме для различных действий.
На диаграмме ниже показано высокоуровневое представление архитектуры и связи между различными блоками и службами.
Служба телеметрии
Эта служба отслеживает событие изменения температуры (через подписку) и отправляет сообщение в концентратор событий служебной шины Azure при каждом изменении температуры.
Служба таймера
Эта простая служба представляет собой таймер, который публикует событие каждые 500 миллисекунд и используется моделями представления для отображения текущего времени в представлении. Он также используется в Mcp9808TemperatureRepository считывать показания датчика раз в секунду. Аргументы события таймера включают счетчик, который можно использовать с функцией мода, чтобы легко разделить интервал таймера на желаемую длину. Для аргумента события существует метод IsMyInterval (интервал TimeSpan), который выполняет вычисления за вас. Все, что вам нужно сделать, это указать интервал как TimeSpan объект.
Служба мониторинга контактов для предупреждений
Эта служба отслеживает состояние контакта GPIO, подключенного к контакту предупреждения на MCP9808. Когда значение GPIO изменяется, эта служба публикует событие.
Светодиодная служба
Эта служба отвечает за включение и выключение светодиодов. Это осуществляется путем мониторинга (посредством подписки) события изменения температуры, которое также включает в себя состояние предупреждения MCP9808. При изменении статуса предупреждения индикаторы соответственно обновляются.
Служба мониторинга нажатия кнопок
Эта служба отслеживает вывод GPIO, подключенный к кнопке, и публикует событие, когда кнопка отпускается. Это событие регистрируется Mcp9808TemperatureRepository когда устройство находится в режиме ручного сброса предупреждений (режим прерывания MCP9808). События отладки также публикуются, поэтому состояние кнопки можно просмотреть в консоли отладки.
Служба ретрансляции уведомлений
Служба отслеживает концентратор SignalR и внутренний агрегатор событий и передает сообщения между ними на основе предопределенного сопоставления (с использованием EventRelayMap класс). По сути, это позволяет приложению знать только о внутренней системе событий и по-прежнему иметь возможность отправлять и получать сообщения с другими экземплярами приложения.
Консольная служба отладки
Эта служба отслеживает приложения (через подписку) на предмет событий отладки и добавляет их во внутреннюю коллекцию. Он также реализует DebugConsoleRepository , что позволяет представлению консоли отладки отображать эти события в приложении через модель представления.
Инициализация приложения
Когда приложение запускается, оно запускает StartPage сначала просмотр, который автоматически вызывает StartPageViewModel . Эта модель представления запускает все перед запуском в главное представление.
Начало работы
Требования к цепи
Для схемы требуется большая беспаечная макетная плата и, возможно, Т-образный коблер и ленточный кабель (я использую версию, продаваемую Vilros). Макетную плату можно купить во многих местах (я покупал ее в местных магазинах и на Amazon). В схеме также используется тактильный кнопочный переключатель мгновенного действия с четырьмя контактами. Есть много типов; любой подойдет. Наконец, в качестве датчика температуры я использую плату подключения высокоточного датчика температуры I2C MCP9808 от Adafruit.
Схема может быть построена без сапожника. Просто следуйте альтернативной макетной схеме в конце проекта.
Сборка схемы
Используйте это руководство для сборки схемы, используя схему, расположенную в нижней части страницы, в качестве руководства (примечание:цвета проводов не являются обязательными и были выбраны, чтобы упростить сборку схемы. следить, когда он будет построен).
- Поместите каждый из четырех светодиодов на макетную плату.
- Подключите один конец кабеля 220 Ом резистор к аноду каждого светодиода и подключите другой конец резистора к 3V3 (контакт 1 или 17) на Raspberry Pi. Все четыре светодиодных анода должны быть подключены к 3V3 . через 220 Ом резистор. Лучше всего использовать один из + направляющие на макетной плате для соединений 3V3.
- Подключите катод синего светодиода к GPIO 18 . (вывод 12) на Raspberry Pi.
- Подключите катод зеленого светодиода к GPIO 23 . (вывод 16) на Raspberry Pi.
- Подключите катод красного светодиода к GPIO 12 . (вывод 32) на Raspberry Pi.
- Подключите катод желтого светодиода к GPIO 16 . (вывод 36) на Raspberry Pi.
- Поместите MCP9808 на макетную плату.
- Подключить Vdd от MCP9808 к 3V3 на Raspberry Pi.
- Подключите GND на MCP9808 к GND на Raspberry Pi. Землей на Raspberry Pi может быть любой из следующих контактов:6, 9, 14, 20, 25, 30, 34 и 39.
- Подключите SCL на MCP9808 на SCL на Raspberry Pi (вывод 5).
- Подключите SDA на MCP9808 до SDA на Raspberry Pi (вывод 3).
- Подключите 10 кОм резистор между предупреждением штифт на MCP9808 и 3V3 на Raspberry Pi.
- Подключите Оповещение подключите MCP9808 к GPIO 6 (контакт 31) на Raspberry Pi.
- Поместите кнопочный переключатель на макетную плату.
- Подключите одну сторону коммутатора к GPIO 5 . (вывод 29) на Raspberry Pi.
- Подключите другую сторону переключателя GND . на Raspberry Pi.
- Подключите 10 кОм резистор между GPIO 5 и 3V3 на Raspberry Pi.
Ниже приведены несколько фотографий схемы, которую я построил с помощью сапожника.
Требования Microsoft Azure
Если у вас нет учетной записи Azure, вам нужно будет ее создать. Вы можете получить кредит в размере 200 долларов США при создании учетной записи. Перейдите на azure.com . и нажмите ссылку БЕСПЛАТНЫЙ АККАУНТ . Если у вас уже есть учетная запись, войдите на портал по адресу portal.azure.com . .
ПРИМЕЧАНИЕ. Это руководство не является исчерпывающим руководством по настройке Azure. Возможно, вам потребуется ознакомиться с порталом, если вы никогда не использовали его раньше. Я постараюсь выполнить шаги, необходимые для этого проекта, насколько смогу.
Оставайтесь на портале Azure во время всего процесса установки. Вам придется возвращаться к нему много раз.
Настройка концентратора событий Azure IoT
- Выберите Создать . в левом меню портала.
- Выберите Интернет вещей .
- Выберите Iot Hub .
- Введите уникальное имя для своего хаба.
- Выберите подписку.
- В группе ресурсов выберите Создать . и введите название своей группы. Обратите внимание, что вы будете использовать эту группу для всех ресурсов Azure, созданных в ходе этого проекта.
- Выберите местоположение ( старайтесь, чтобы все ресурсы находились в одном регионе, чтобы снизить расходы ).
- Если это ваш первый центр Интернета вещей, выберите уровень цен и масштабирования. Затем выберите F1 бесплатно . . В вашем аккаунте может быть один уровень бесплатного пользования.
- Наконец, нажмите создать . и дождитесь создания Центра Интернета вещей.
- Щелкните Центр Интернета вещей в меню слева, чтобы увидеть новый центр.
- Щелкните новый концентратор, чтобы просмотреть подробные сведения. Вам нужно будет вернуться к этому представлению позже.
Создать устройство
Центр Интернета вещей Azure требует, чтобы каждое устройство было уникально идентифицировано и зарегистрировано в концентраторе в целях безопасности. Устройство можно зарегистрировать с помощью Azure SDK и кода, но для этого проекта мы будем использовать Device Explorer, доступный в Azure SDK.
- Загрузите пакет Azure SDK с GitHub со страницы https://github.com/Azure/azure-iot-sdk-csharp, получив zip-файл или клонировав репозиторий.
- Если вы скачали zip-файл, разверните его в папку на своем диске.
- Откройте папку azure-iot-sdk – csharp-master \ tools \ DeviceExplorer . .
- Откройте проект DeviceExplorer в Visual Studio.
- Запустите приложение.
- Вернитесь на портал Azure и выберите свой Центр Интернета вещей. Нажмите Политики общего доступа . ссылку и выберите iothubowner . . Нажмите копию кнопка рядом с Строкой подключения - первичный ключ .
- В окне "Обозреватель устройств" вставьте эту строку в текстовое поле Строка подключения к Центру Интернета вещей . .
- Нажмите Обновить . кнопка.
- Перейдите на Управление в обозревателе устройств и нажмите Создать . .
- Введите имя для своего устройства (например, TemperatureDevice1 ).
- Убедитесь, что параметр Автоматическое создание ключей установлен флажок и нажмите Создать . .
- Нажмите Готово . .
- Вам нужно будет вернуться в это приложение, чтобы получить строку подключения устройства позже.
Настройка базы данных SQL Azure
Данные телеметрии будут храниться в базе данных SQL Azure. Используйте портал для создания базы данных.
- Нажмите Базы данных SQL . в меню портала.
- Нажмите кнопку Добавить кнопка.
- Введите имя для базы данных (например, SensorTelemetry).
- Выберите подписку.
- Для группы ресурсов выберите Использовать существующие и выберите Телеметрия датчика . из раскрывающегося списка.
- Щелкните ссылку сервера, чтобы настроить новый сервер.
- Введите имя для сервера.
- Введите имя пользователя ( оно понадобится вам позже, запомните ).
- Введите пароль ( он понадобится вам позже, запомните ).
- Выберите местоположение ( старайтесь, чтобы все ресурсы находились в одном регионе, чтобы снизить расходы ).
- Нажмите Выбрать . .
- Нажмите Уровень ценообразования . .
- Выберите Базовый . .
- Нажмите Выбрать . .
- Нажмите Создать . .
- Щелкните новый сервер в списке SQL Server,
- Нажмите Настроить брандмауэр сервера . чтобы разрешить доступ с вашего компьютера к SQL Server.
- Введите имя для подключения и ваш внешний IP-адрес в диапазонах начального и конечного IP-адресов.
- Щелкните многоточие, чтобы сохранить запись.
- Нажмите Сохранить . чтобы сохранить IP-адрес.
Создание таблицы базы данных
Используемая таблица будет создана вручную. Развертывание Code First можно использовать в мобильных приложениях, но созданная таблица не будет совместима с Stream Analytics.
- Откройте Visual Studio.
- Выберите Обозреватель объектов SQL Server . из просмотра меню.
- Щелкните правой кнопкой мыши SQL Server . объект и выберите Добавить SQL Server . .
- Просмотрите базы данных Azure и выберите базу данных, созданную на предыдущем шаге.
- Введите свое имя пользователя и пароль и нажмите Подключиться . .
- Раскрывайте элементы обозревателя объектов, пока не увидите созданную базу данных.
- Щелкните эту базу данных правой кнопкой мыши и выберите Новый запрос . .
- Скопируйте сценарий SQL из нижней части страницы проекта и вставьте его в окно кода Visual Studio.
- Выберите Выполнить . из SQL меню для запуска скрипта.
- Если развернуть объект "таблицы" в проводнике, будет открыта вновь созданная таблица с названием SensorReadings . .
Создайте план службы приложений
План службы приложений необходим для создания службы приложений.
- Выберите планы службы приложений в меню портала.
- Введите название плана.
- Для группы ресурсов выберите Использовать существующие и выберите Телеметрия датчика . из раскрывающегося списка.
- Выберите место.
- Нажмите Уровень ценообразования . и выберите B1 Basic . .
- Нажмите Создать . .
Создайте службу приложений ( Мобильное приложение )
Веб-сайт и концентратор SignalR будут работать со службой приложений.
- Нажмите Создать . из меню портала.
- Выберите Интернет + мобильный . из списка.
- Выберите Мобильное приложение . .
- Введите название приложения.
- Выберите подписку.
- Для группы ресурсов выберите Использовать существующие и выберите Телеметрия датчика . из раскрывающегося списка.
- Выберите план службы приложений, созданный на предыдущем шаге.
- Статистика приложений не является обязательной.
- Нажмите Создать . .
Настройка Azure Stream Analytics
Задание Stream Analytics будет отслеживать события данных в Центре Интернета вещей и записывать их в базу данных SQL Server. Задание будет состоять из ввода (IoT Hub), вывода (таблица SQL) и запроса, который выбирает, какие поля использовать.
- Выберите Создать . .
- Выберите Данные + Аналитика . из меню.
- Выберите Задание Stream Analytics . из меню.
- Введите уникальное имя для работы.
- Выберите подписку.
- Для группы ресурсов выберите "Использовать существующий", а затем в раскрывающемся списке выберите "Телеметрия датчиков".
- Выберите местоположение ( старайтесь, чтобы все ресурсы находились в одном регионе, чтобы снизить расходы ).
- Нажмите Создать . .
- Выберите Дополнительные службы> . из меню.
- Прокрутите вниз до Stream Analytics . и нажмите звездочку . Это закрепит его в меню портала.
- Нажмите Задания Stream Analytics . в меню портала.
- Выберите только что созданное задание.
- Нажмите Входы . .
- Нажмите Добавить . .
- Введите имя для входа (например, SensorTelemetry-Input).
- Измените источник на Центр Интернета вещей . .
- Примите остальные значения по умолчанию.
- Нажмите Создать . .
- Нажмите Выходы . .
- Нажмите Добавить . .
- Введите имя для вывода (например, SensorTelemetry-Output).
- Выберите База данных SQL . как раковину.
- Выберите базу данных сенсорной телеметрии.
- Введите имя пользователя, указанное при создании сервера базы данных.
- Введите пароль, который вы указали при создании сервера базы данных.
- Введите SensorReadings . для имени таблицы.
- Нажмите Создать . .
- Выберите Запрос . .
- Замените текст [YourOutputAlias] с названием вывода (сохраняя квадратные скобки).
- Замените текст [YourInputAlias] с именем входа (сохраняя квадратные скобки).
- Замените звездочку ( * ) с таким текстом: [TimestampUtc], Source, Temperature, IsCritical, IsAboveUpperThreshold, IsBelowLowerThreshold .
- Нажмите Сохранить . а затем нажмите Да если будет предложено.
- Нажмите Обзор . в меню задания Stream Analytics.
- Нажмите кнопку Пуск . кнопка.
- Выбрать сейчас.
- Нажмите Пуск . .
Настройка программного обеспечения
Используя ссылку на репозиторий внизу страницы, либо загрузите код в виде zip-файла, либо клонируйте репозиторий на свой компьютер и откройте проект в Visual Studio . .
Настроить и опубликовать мобильное приложение
Веб-приложение (расположенное в веб-папке) необходимо опубликовать в службе приложений Azure.
- Щелкните проект правой кнопкой мыши в Visual Studio . и выберите Опубликовать . .
- Нажмите Служба приложений Microsoft Azure . .
- Выберите свою службу приложений из списка (вам может потребоваться войти в систему, если вы делаете это впервые).
- Нажмите ОК . .
- Нажмите Далее . .
- Перейдите на портал Azure.
- Выберите Базы данных SQL . из меню портала.
- Выберите свою базу данных.
- Нажмите Показать строки подключения к базе данных . ссылка.
- Нажмите кнопку копирования рядом с ADO.NET . строка.
- Вернитесь в Visual Studio и вставьте эту строку в текстовое поле с надписью MS_TableConnectionString . .
- Измените имя пользователя и пароль на значения, которые вы установили при создании SQL Server.
- Нажмите Далее . .
- Нажмите Опубликовать . .
- По завершении публикации будет запущен браузер, указывающий на ваш новый веб-сайт.
Введите учетные данные Центра Интернета вещей
Перед запуском приложения вам нужно будет ввести в код учетные данные устройства IoT Hub.
- Откройте проект в Visual Studio.
- Разверните Телеметрию датчика . проект в рамках UWP папку и откройте код для App.xaml .
- Прокрутите вниз до раздела с определением IIotHubConfiguration . .
- Откройте Обозреватель устройств . проект в другом экземпляре Visual Stduio.
- Перейдите на вкладку "Управление".
- Щелкните созданное ранее устройство правой кнопкой мыши.
- Нажмите Копировать строку подключения для выбранного устройства . вариант в меню.
- Вернитесь к проекту Sensor Telemetry и вставьте строку подключения поверх текста {YOUR CONNECTION STRING HERE} .
- Введите имя устройства поверх текста {ИДЕНТИФИКАТОР ВАШЕГО УСТРОЙСТВА} . .
- Сохраните этот файл.
- Разверните Sensor Telemetry IoT проект и найдите код для App.xaml .
- Прокрутите вниз до раздела с определением IIotHubConfiguration . .
- Скопируйте и вставьте ту же конфигурацию из предыдущего app.cs . файл.
Введите URL мобильного приложения
URL-адрес мобильного приложения также необходимо ввести в код.
- Откройте проект в Visual Studio.
- Разверните Общие проект.
- Откройте UnityConfiguration.cs .
- Прокрутите вниз до раздела, содержащего IMobileServicesConfiguration . определение.
- Откройте портал Azure.
- Нажмите Службы приложений . .
- Выберите службу приложений . вы создали для этого проекта.
- Наведите указатель мыши на URL и нажмите Копировать значок.
- Вернитесь в Visual Studio и вставьте URL в текст {URL ВАШИ МОБИЛЬНЫЕ УСЛУГИ ЗДЕСЬ} . .
Подробнее:Sensor Telemetry 2.0.1
Производственный процесс
- Что такое калибровка датчика - определение и ее применение
- Датчик сердцебиения - работа и применение
- Что такое датчик O2?
- Библиотека Python датчика температуры TMP006 с использованием Raspberry pi,
- Датчик движения с использованием Raspberry Pi
- Датчик влажности почвы Raspberry Pi
- Тест датчика DS18B20
- Датчик температуры Raspberry Pi
- Сенсорная телеметрия 2.0.1
- Датчик эмоций / ЭЭГ