Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Отслеживание GPS с использованием гелия, Azure IoT Hub и Power BI

Компоненты и расходные материалы

Модуль прототипирования атома гелия
× 1
Arduino Zero
× 1
Adafruit Ultimate GPS Breakout
× 1
Макет (общий)
× 1

Приложения и онлайн-сервисы

Microsoft Azure
IDE Arduino

Об этом проекте

Об этом проекте

Helium существует, чтобы помочь разработчикам создавать маломощные, безопасные подключенные устройства. В этом проекте мы рассмотрим использование модуля прототипирования атома гелия с Arduino Zero и Adafruit Ultimate GPS Breakout для беспрепятственной отправки данных в Azure IoT Hub, а затем в отчет Power BI для визуализации данных.

Вы можете узнать больше о маломощных, безопасных, беспроводных продуктах Helium с большим радиусом действия и купить все необходимое оборудование на helium.com/store.

Аппаратное обеспечение

Первое, что вам нужно сделать, это подключить модуль прототипирования атома гелия к адаптеру Arduino Helium Atom, а затем к Arduino. Для этого руководства мы используем Arduino Zero, но вы можете использовать Uno, Due, M0 или любой другой Arduino, какой захотите.

После подключения Atom к Arduino у вас должно получиться примерно следующее:

Затем нам нужно прикрепить Adafruit Ultimate GPS Breakout к бутерброду Arduino. Мы собираемся использовать здесь макетную плату, чтобы упростить и нагляднее, но вы можете так же легко подключить выход GPS напрямую к Arduino. Ваша проводка должна быть в виде:

Arduino 5v -> GPS VIN

Земля Arduino -> Земля GPS

Arduino D12 -> GPS TX

Arduino D10-> GPS RX

Когда вы закончите, у вас должно получиться что-то вроде этого:

Хорошо, теперь, когда у нас есть настройка Arduino, нам нужно подключить и включить элемент гелия. Если у вас есть сотовый элемент, вам просто нужно включить его и подождать, пока свет не станет бирюзового цвета. Вот и все. Если у вас есть элемент Ethernet или вы предпочитаете использовать соединение Ethernet для своего сотового элемента, подключите порт Ethernet вашего элемента к порту с поддержкой DHCP, например, на задней панели кабельного модема или беспроводного маршрутизатора. Как только вы включите элемент, и индикатор на передней панели элемента станет зеленым, все готово.

Теперь, когда у вас есть аппаратная настройка Arduino и Atom, а Element включен и подключен, пришло время настроить все это в Helium Dashboard.

Панель управления и каналы Helium

Во-первых, нам нужно добавить наш атом и элемент в нашу учетную запись на панели управления. Если у вас нет учетной записи, но есть оборудование, напишите нам по адресу [email protected], в противном случае войдите в систему с учетными данными, которые вы получили при покупке оборудования у Helium.

После входа в систему нам нужно сначала активировать наш элемент. Нажав на Элементы слева, затем Добавить в правом верхнем углу приведет вас в нужное место. Введите последние 4 из MAC . адрес и HVV на этикетке на обратной стороне элемента, дайте ему имя и, при желании, добавьте несколько тегов. Нажмите Активировать элемент . чтобы начать.

Затем нам нужно будет повторить тот же процесс для Atom. Снова нажмите Атомы . слева и Добавить и укажите MAC и HVV на этикетке Atom, при желании добавьте теги и нажмите Активировать Atom .

Затем нам нужно создать Azure IoT Hub, который будет действовать как точка приема в Azure для всех ваших устройств Helium Atom. Мы предполагаем, что у вас уже есть учетная запись Azure, в противном случае вам нужно будет ее создать.

После того, как вы вошли в Azure, мы собираемся создать Центр Интернета вещей. Нажмите на + в левом верхнем углу, затем Интернет вещей , затем Центр Интернета вещей :

Вам нужно будет сделать выбор в отношении того, как вы хотите настроить свой Центр Интернета вещей, а затем нажать «Создать». Мы рекомендуем выбрать Закрепить на панели инструментов . внизу, чтобы облегчить поиск в дальнейшем:

После того, как вы закончите и завершите развертывание концентратора (это может занять несколько минут), щелкните его на панели инструментов. Чтобы настроить канал гелия, нам понадобится некоторая информация из концентратора. В Центре Интернета вещей выберите Политики общего доступа . слева выберите RegistryReadWrite , а затем щелкните значок копии рядом с полем Строка подключения - первичный ключ справа. Это скопирует строку подключения в буфер обмена, который мы будем использовать обратно в Helium Dashboard. Будьте осторожны, не передавайте эту строку никому, кому вы не доверяете. (В этом примере мы просто используем временный концентратор.)

Вернувшись к панели мониторинга Helium, теперь нам нужно создать канал, который сопоставляется с только что созданным центром Интернета вещей Azure. Сначала нажмите Каналы . слева и нажмите Центр Интернета вещей Azure ниже Создать новый канал . Мы собираемся вставить строку подключения мы скопировали из Azure, чтобы создать канал на гелии:

Дайте каналу имя и нажмите Создать . . Важно запомнить имя, так как оно понадобится вам в коде Arduino для отправки данных на этот канал.

Эскиз Arduino

После настройки Azure IoT Hub и создания гелиевого канала нам теперь нужен соответствующий Arduino Sketch, который использует библиотеки Helium Arduino и Adafruit GPS для отправки местоположений GPS в Helium, а затем в наш недавно созданный канал Azure.

Во-первых, вам понадобятся как библиотека Helium Arduino, так и библиотека Adafruit GPS, установленная в вашей Arduino IDE. Самый простой способ сделать это - перейти в Эскиз -> Включить библиотеку -> Управление библиотеками . меню в среде IDE и выполните поиск по запросу Helium и Adafruit GPS и нажмите Установить . .

Приведенный ниже эскиз инициализирует Atom, создает канал, соответствующий Azure IoT Hub Канал, который мы создали на предыдущем шаге, собирает данные GPS с платы Adafruit GPS, форматирует их в JSON, а затем отправляет их по сети Helium.

Здесь вы найдете более подробную информацию и руководства по библиотеке Helium Atom Arduino.

  / * * Copyright 2017, Helium Systems, Inc. * Все права защищены. Информацию о лицензии см. В LICENCE.txt * / #include "Arduino.h" #include "avr / dtostrf.h" #include "Helium.h" #include  #include  #include "wiring_private .h "// функция pinPeripheral () #define atom_serial Serial1 // для GPS #define PIN_SERIAL2_RX (34ul) // Номер описания контакта для PIO_SERCOM на D12 #define PIN_SERIAL2_TX (36ul) // Номер описания контакта для PIO_SERCOM на D10 #define PAD_ (UART_TX_PAD_2) // Панель SERCOM 2 #define PAD_SERIAL2_RX (SERCOM_RX_PAD_3) // Панель SERCOM 3 Uart Serial2 (&sercom1, PIN_SERIAL2_RX, PIN_SERIAL2_TX, PAD_SERIAL2_RX2, PADI_SERIAL); } Гелий гелий (&atom_serial); Channel channel (&helium); // данные GPS #define gps_serial Serial2 Adafruit_GPS GPS (&gps_serial); void setup () {pinPeripheral (10, PIO_SERCOM); pinPeripheral (12, PIO_SERCOM); Serial.begin (115200); Serial.println («Запуск»); // Начинаем обмен данными с атомом гелия // Скорость передачи зависит от поддерживаемой платы // и настраивается в Board.h helium.begin (helium_baud_b115200); // Подключаем Атом к сети Helium Serial.print («Подключение -»); int status =helium.connect (); в то время как (статус! =helium_status_OK) {статус =helium.connect (); } Serial.println («Успешно»); // Начинаем общение с каналом. Это нужно // сделать только один раз. // // ПРИМЕЧАНИЕ:убедитесь, что вы создали соответствующий канал в Helium Dashbaord int8_t result; Serial.print («Создание канала -»); status =channel.begin ("Руководство хакера", &результат); if (helium_status_OK ==status &&result ==0) {Serial.println ("Успешно"); } else {Serial.println ("Ошибка"); } задержка (1000); // Запускаем GPS GPS.begin (9600); GPS.sendCommand (PMTK_SET_NMEA_OUTPUT_RMCGGA); GPS.sendCommand (PMTK_SET_NMEA_UPDATE_1HZ); GPS.sendCommand (PGCMD_NOANTENNA); задержка (2000); } uint32_t timer =millis (); недействительный цикл () {char c =GPS.read (); if (GPS.newNMEAreceived ()) {if (! GPS.parse (GPS.lastNMEA ())) return; } если (таймер> миллис ()) таймер =миллис (); если (миллис () - таймер> 2000) {таймер =миллис (); // сбрасываем таймер if (GPS.fix) {char lat [10]; чарлон [10]; данные char [100]; dtostrf (GPS.latitudeDegrees, 4, 4, lat); dtostrf (GPS.longitudeDegrees, 4, 4, lon); // форматируем объект JSON с координатами lat / lon для отправки в Azure sprintf (data, "{\" lat \ ":\"% s \ ", \" lon \ ":\"% s \ "}", lat, lon); // Отправляем данные о местоположении на настроенный канал int8_t result; // ответ от Helium Router Serial.print ("Отправка -"); int status =channel.send (данные, strlen (данные), &результат); // статус - это ответ от последовательного соединения Atom if (helium_status_OK ==status &&result ==0) {Serial.print ("Успешно отправлено"); Serial.println (данные); } else {Serial.println ("Ошибка"); }} else {Serial.println ("Нет исправления GPS!"); }}}  

Установив библиотеки, создайте новый эскиз ( Файл -> Новый из среды Arduino IDE) и вставьте приведенный выше код. Подключите бутерброд Arduino / Atom через USB и нажмите Загрузить . кнопка, которая выглядит как стрелка вправо.

Через несколько секунд вы должны увидеть, как индикаторы Atom начинают мигать красным и синим, а затем переходят в устойчивый красный мигающий узор. Это означает, что теперь Atom подключен к сети Helium. GPS ИСПРАВЛЕНИЕ свет также должен мигать медленным красным узором. Как только это прекратится, модуль GPS определит ваше местоположение и начнет отправлять данные в Helium. Поместите GPS-навигатор рядом с окном или, в идеале, полностью снаружи.

Вы можете проверить Serial Monitor ( Инструменты -> Монитор последовательного порта ) из среды Arduino IDE, чтобы увидеть результат отладки. Вы должны увидеть сообщения, показывающие подключение, создание канала, а затем последовательность Нет исправления GPS! сообщения, пока не будет получено спутниковое исправление.

Проверка правильности отправки данных

Теперь, когда Arduino, Atom и GPS запущены и работают, мы можем вернуться к панели инструментов Helium и убедиться, что данные поступают в канал Azure.

Нажав на Каналы слева, а затем выберите канал Azure, который вы уже создали в Активных каналах Раздел должен привести вас к подробному представлению - прокрутка вниз должна показать вам журнал событий, где вы, надеюсь, увидите что-то вроде скриншота ниже. Здесь показаны временная метка и размер данных, а также отчет о том, были ли они успешно перенаправлены в Azure:

Если вы посмотрите на свой Центр Интернета вещей Azure в Обозревателе устройств навигации, вы также должны увидеть свое устройство Helium Atom, указанное под его MAC-адресом. Нажав на нее, вы также подтвердите, что мы обеспечили безопасность этого устройства автоматически, без какой-либо конфигурации, с помощью сертификата X509 с аппаратной подписью.

Получение данных в Power BI

Предположим, что у вас уже настроена учетная запись Power BI и уже создана рабочая область. (В противном случае перейдите на сайт www.powerbi.com и настройте его.)

После настройки вашей учетной записи Power BI нам потребуется создать задание Azure Stream Analytics, чтобы взять данные из Azure IoT Hub и доставить их в Power BI.

На панели управления Azure нажмите Создать . в левом верхнем углу и найдите Stream Analytics Job , выбрав его, когда он появится. Нажмите Создать . в левом нижнем углу выберите параметры и нажмите "Создать", чтобы настроить его.

После развертывания нам нужно указать Streaming Job использовать IoT Hub в качестве входных данных и Power BI в качестве выходных данных. На странице "Задание потоковой передачи" нажмите Входы . в меню слева, затем Добавить .

Дайте заданию псевдоним (имя), затем выберите IoT Hub . из раскрывающегося списка источника. Выберите соответствующий IoT Hub из раскрывающегося списка IoT Hub, а все остальное оставьте по умолчанию. У вас должно получиться что-то вроде этого:

После создания ввода мы создадим вывод, который подключается к Power BI. На странице "Задание потоковой передачи" нажмите Выходы . в меню слева, а затем Добавить . Мы выберем Power BI из раковины падать. Затем вам нужно будет авторизовать свою учетную запись Power BI и выбрать рабочую область, которую вы хотите использовать. Придумайте имя для таблицы. В итоге вы получите что-то вроде этого:

Последний шаг - создать запрос, который связывает входные данные с выходными. Снова нажмите Запрос . из левого меню. Вы хотите, чтобы ваш запрос в основном был в форме, соответствующей приведенному ниже снимку экрана, в зависимости от того, как вы назвали свои входы и выходы на предыдущем шаге. Это выберет все данные, поступающие из Центра Интернета вещей, и выведет их в рабочую область Power BI.

Нажмите «Сохранить» в левом верхнем углу, и, если вы все правильно назвали, все почти готово. Теперь вернитесь на страницу обзора и нажмите Пуск . в верхней панели навигации, и через несколько минут вы получите потоковую передачу данных в Power BI.

Визуализация в Power BI

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

Перейдите в рабочую область Power BI и нажмите + Создать . в правом верхнем углу и выберите Отчет . Затем выберите набор данных, созданный в задании потоковой передачи Azure, и нажмите Создать . .

Далее мы выберем визуализацию карты на правой панели, она выглядит как белый глобус. Справа вы увидите поля данных, которые мы отправили из Arduino. Перетащите широту в широту и долготу на долготу на панели слева. Вы также можете перетащить EventProcessedUTCTime в всплывающие подсказки, если вы хотите видеть, когда оно было отправлено при наведении курсора мыши. Затем нажмите Сохранить в правом верхнем углу. Вот и все! Теперь у вас будет карта, на которой показано расположение вашего атома гелия, подключенного к Arduino.

Код

  • Atom + Arduino + Adafruit GPS
Atom + Arduino + Adafruit GPS C / C ++
 / * * Copyright 2017, Helium Systems, Inc. * Все права защищены. Информацию о лицензии см. В LICENCE.txt * / # include "Arduino.h" #include "avr / dtostrf.h" #include "Helium.h" #include  #include  #include "wiring_private .h "// функция pinPeripheral () # define atom_serial Serial1 // для GPS # define PIN_SERIAL2_RX (34ul) // Номер описания контакта для PIO_SERCOM на D12 # define PIN_SERIAL2_TX (36ul) // Номер описания Pin для PIO_SERCOM на D10 # define PAD_SERIAL2_TX (UART_TX_PAD_2) // Панель SERCOM 2 # define PAD_SERIAL2_RX (SERCOM_RX_PAD_3) // Панель SERCOM 3Uart Serial2 (&sercom1, PIN_SERIAL2_RX, PIN_SERIAL2_TX, PAD_SERIALT2_RX, PAD_SERIAL_SERIAL; Channel channel (&helium); // данные GPS # define gps_serial Serial2Adafruit_GPS GPS (&gps_serial); void setup () {pinPeripheral (10, PIO_SERCOM); pinPeripheral (12, PIO_SERCOM); Serial.begin (115200); Serial.println («Запуск»); // Начинаем обмен данными с атомом гелия // Скорость передачи зависит от поддерживаемой платы // и настраивается в Board.h helium.begin (helium_baud_b115200); // Подключаем Атом к сети Helium Serial.print («Подключение -»); int status =helium.connect (); в то время как (статус! =helium_status_OK) {статус =helium.connect (); } Serial.println («Успешно»); // Начинаем общение с каналом. Это нужно // сделать только один раз. // // ПРИМЕЧАНИЕ:убедитесь, что вы создали соответствующий канал в Helium Dashbaord int8_t result; Serial.print («Создание канала -»); status =channel.begin ("Руководство хакера", &результат); if (helium_status_OK ==status &&result ==0) {Serial.println ("Успешно"); } else {Serial.println ("Ошибка"); } задержка (1000); // Запускаем GPS GPS.begin (9600); GPS.sendCommand (PMTK_SET_NMEA_OUTPUT_RMCGGA); GPS.sendCommand (PMTK_SET_NMEA_UPDATE_1HZ); GPS.sendCommand (PGCMD_NOANTENNA); задержка (2000);} uint32_t timer =millis (); void loop () {char c =GPS.read (); if (GPS.newNMEAreceived ()) {if (! GPS.parse (GPS.lastNMEA ())) return; } если (таймер> миллис ()) таймер =миллис (); если (миллис () - таймер> 2000) {таймер =миллис (); // сбрасываем таймер if (GPS.fix) {char lat [10]; чарлон [10]; данные char [100]; dtostrf (GPS.latitudeDegrees, 4, 4, lat); dtostrf (GPS.longitudeDegrees, 4, 4, lon); // форматируем объект JSON с координатами lat / lon для отправки в Azure sprintf (data, "{\" lat \ ":\"% s \ ", \" lon \ ":\"% s \ "}", lat, lon); // Отправляем данные о местоположении на настроенный канал int8_t result; // ответ от Helium Router Serial.print ("Отправка -"); int status =channel.send (данные, strlen (данные), &результат); // статус - это ответ от последовательного соединения Atom if (helium_status_OK ==status &&result ==0) {Serial.print ("Успешно отправлено"); Serial.println (данные); } else {Serial.println ("Ошибка"); }} else {Serial.println ("Нет исправления GPS!"); }}} 

Производственный процесс

  1. Система посещаемости с использованием Arduino и RFID с Python
  2. Регистратор данных GPS, пространственный анализ и Azure IoT Hub.
  3. Универсальный пульт дистанционного управления с использованием Arduino, 1Sheeld и Android
  4. Вольтметр своими руками с использованием Arduino и смартфона
  5. Монитор сердечного ритма с использованием Интернета вещей
  6. Использование Интернета вещей для удаленного управления манипулятором
  7. IOT - Smart Jar с использованием ESP8266, Arduino и ультразвукового датчика
  8. Измерение частоты и рабочего цикла с использованием Arduino
  9. Сонар с использованием Arduino и отображение при обработке IDE
  10. Бассейн Azure IoT