IoT Prime — Эксперимент 04: Подключение к Arduino Cloud

Введение

До сих пор вы видели, как считывать данные с датчиков, отправлять их состояние на компьютер или сохранять локально в файлы, а также открывать эти файлы для построения графиков исторических данных. Однако невозможно было строить графики в реальном времени с платой, не подключённой к компьютеру. Это упражнение познакомит вас с одним из возможных сценариев того, как это сделать. Вы подключите свою MKR1010 к Arduino Cloud и отобразите данные о температуре и влажности.

Примечание

Для выполнения этого эксперимента необходимо иметь учётную запись Arduino Create, которая даст вам доступ к онлайн-инструменту компиляции и к панели управления Arduino Cloud Dashboard. Получите бесплатную учётную запись здесь.

Цели обучения

В этом упражнении вы:

  • Узнаете об Arduino Cloud

  • Подключите датчики к панели управления Cloud

Используемые компоненты

MKR1010

Arduino MKR1010 (читается «мэйкер тен тен») — это плата микроконтроллера с чипом, который позволяет устанавливать беспроводное соединение WiFi или Bluetooth с другими платами или компьютерами. Мы увидим некоторые из этих возможностей в действии в этой серии упражнений.

Начало работы с платой

Вы можете узнать, как подключить эту плату к компьютеру, ознакомившись с Руководством по началу работы. Вы можете использовать это руководство для установки офлайн-версии Arduino IDE, которая будет работать на вашем компьютере, и для того, чтобы научиться устранять возможные проблемы при написании первых программ. Вы также можете начать использовать онлайн-версию редактора кода Arduino, которую найдёте по адресу: https://create.arduino.cc. Обратите внимание, что для использования онлайн-редактора необходимо стать зарегистрированным пользователем Arduino.

MKR ENV Shield

Shield (плата расширения) — это плата, которую вы добавляете к плате микроконтроллера Arduino для расширения функциональности. ENV Shield оснащён следующими датчиками:

  • Температура

  • Влажность

  • Атмосферное давление

  • Освещённость (Lux)

  • УФ-излучение A и B

Различные датчики взаимодействуют с MKR1010 по протоколам SPI или I2C — стандартным механизмам связи внутри электронных плат.

ENV Shield оснащён слотом для карты microSD. Он может использоваться для локального хранения данных, собранных датчиками. Это может быть полезно при проектировании систем, которые могут быть не подключены к сети, или когда сбор данных происходит с такой скоростью, что невозможно передать все данные по сети из-за ограничений пропускной способности.

Библиотека ENV Shield

Эти новые возможности поставляются с соответствующим программным обеспечением, которое необходимо установить. Программное обеспечение, позволяющее использовать определённый shield, мы называем библиотекой. Следуйте этому пошаговому руководству по установке любой библиотеки, выберите нужную библиотеку ENV Shield, введя её название в поле поиска — это даст вам доступ к различным датчикам на плате расширения.

MKR Relay Proto Shield

MKR Relay Proto Shield — это плата, предоставляющая вашей плате MKR1010 два реле — электромеханических переключателя, которые можно использовать для управления любыми электрическими устройствами, активируемыми переключателем вкл/выкл: лампами, вентиляторами, водяными насосами, электродвигателями, обогревателями и т. д. Активация реле так же проста, как активация одного из управляющих пинов — это позволит электричеству протекать.

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

Сборка плат

Мы рекомендуем собрать три платы вместе уже сейчас и оставить их в таком виде на протяжении всего курса. Конфигурация сборки проста в монтаже и обеспечивает надёжное крепление компонентов.

MKR1010 + ENV и Relay Shields

Рисунок 1: MKR1010 + ENV и Relay Shields

Собираемые данные

В данном случае мы будем собирать данные с датчиков температуры и влажности. Вы видели специфику этих датчиков в экспериментах 1 и 2 из этой серии. Однако на этот раз мы отправим данные в Arduino Cloud, где данные будут отображаться в виде графиков, доступных на панели управления.

ENV Shield с выделенными датчиками, используемыми в этом эксперименте

Рисунок 2: ENV Shield с выделенными датчиками, используемыми в этом эксперименте

Как потребляются данные

Как упоминалось ранее, данные будут отображаться в реальном времени на вашей панели управления Arduino Dashboard. Если вы заинтересованы в сохранении данных в файлы, вы можете рассмотреть двойную стратегию, как объяснялось в эксперименте 3, где данные могут храниться на SD-карте локально на плате, в то время как они также отправляются в Cloud через беспроводную связь.

Схема

В этом проекте схема предельно проста — поскольку мы будем использовать только датчики ENV Shield, нет необходимости использовать макетную плату.

Иллюстрация печатной платы

Рисунок 3: Иллюстрация печатной платы

Фотография конструкции

MKR1010 с shields

Рисунок 4: MKR1010 с shields

Пошаговое написание кода

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

Перейдите к значку Arduino Cloud

Перейдите на https://create.arduino.cc, убедитесь, что вы создали учётную запись, прежде чем продолжить этот эксперимент.

Панель управления Arduino Create с выделенным значком IoT

Рисунок 5: Панель управления Arduino Create с выделенным значком IoT

Находясь на панели управления, выберите значок Arduino Cloud.

Страница «Your Things» в Arduino Cloud

Рисунок 6: Страница «Your Things» в Arduino Cloud

На этой странице вы увидите, что можете создавать новые Things (вещи) — так мы называем устройства, которые вы можете подключить к интернету. Things представляют, например, вашу MKR1010 или любую другую плату с возможностью подключения. Кроме того, каждая из плат может иметь различные параметры. Это переменные, которые будут доступны не только в коде на плате, но и в Cloud благодаря библиотеке Arduino Cloud. Если вы заинтересованы в изучении процесса настройки нового Thing, пройдите пошаговое руководство, ссылка на которое находится на этой странице.

Создание нового Thing

Если вы решили пропустить пошаговое руководство, вы можете создать Thing вручную, нажав «New Thing». Обратите внимание, что бесплатные учётные записи Arduino IoT позволяют создать только один Thing. Если вы хотите иметь больше одного, вам нужно будет перейти на платный тариф Arduino Cloud. Пока мы работаем только с одним Thing, поэтому бесплатный тариф подойдёт для этого эксперимента.

Интерфейс создания нового Thing

Рисунок 7: Интерфейс создания нового Thing

После того как вы выбрали, с какой платой работаете (MKR1010), окно объяснит процесс установки Arduino Create Agent — программного обеспечения, необходимого для связи вашей платы с компьютером через USB-кабель. Если вы уже установили клиент ранее, этот процесс пройдёт быстро и откроет интерфейс, предлагающий дать имя плате.

Интерфейс для присвоения имени плате

Рисунок 8: Интерфейс для присвоения имени плате

После именования платы вам будет предложено настроить крипто-чип платы. Это процесс, который необходимо пройти. Крипто-чип на платах MKR позволяет уникально идентифицировать платы в инфраструктуре Arduino. Этот процесс займёт пару минут. После завершения интерфейс предложит вам вернуться к настройке IoT.

Настройка крипто-чипа

Рисунок 9: Настройка крипто-чипа

В следующем диалоговом окне введите имя для Thing. Если вы установили интерфейс Arduino Create ранее и зарегистрировали свою плату, пользовательский интерфейс предоставит вам возможность выбрать эту плату в выпадающем списке. В качестве альтернативы вы можете зарегистрировать плату на этом этапе. Поскольку ENV Shield предполагает создание своего рода метеостанции, возможным именем для Thing будет WeatherStation.

Поле имени Thing и выпадающий список

Рисунок 10: Поле имени Thing и выпадающий список

Регистрация свойств

После регистрации Thing интерфейс предложит вам возможность добавить к нему свойства. Свойства представляют переменные в коде Arduino, которые также будут доступны для чтения в Cloud. Мы отобразим две переменные / свойства: температуру и влажность. Вам нужно будет выполнить процесс дважды. Определение этих свойств включает:

  • Name (Имя): возьмите Temperature для одного свойства и Humidity для другого

  • Variable Name (Имя переменной): будет автоматически сгенерировано таким же, как имя свойства, но в нижнем регистре

  • Variable type (Тип переменной): в нашем случае нужны переменные типа float

  • Поля для минимального (Min) и максимального (Max) значений развернутся. Вы должны взять пределы, указанные в даташитах, представленных в экспериментах 1 и 2. Для температуры диапазон составляет от -40 °C до 120 °C, а для влажности — от 3,5% отн. вл. до 80% отн. вл.

  • Это переменные «Read Only» (только для чтения), так как они являются входными данными системы

  • Мы будем обновлять данные регулярно, что означает необходимость определить, как часто данные будут отправляться в Cloud в текстовом поле «Every». Установите 10 секунд

  • Установите флажок «Show history visualization», что даст вам возможность видеть данные в виде графика на панели управления

Скриншот свойства Temperature

Рисунок 11: Скриншот свойства Temperature

Скриншот свойства Humidity

Рисунок 12: Скриншот свойства Humidity

Создание скетча

После добавления свойств нажмите кнопку «Edit Sketch», которая откроет редактор кода с автоматически сгенерированным скетчем. Он включает библиотеки, необходимые для работы облачной связи. Вам нужно будет добавить библиотеки для ENV Shield, SSID и пароль для подключения к вашей сети WiFi, а также код, который вы будете использовать для обновления переменных в программе.

Редактор

Рисунок 13: Редактор

Сначала перейдите на вкладку «Secret» и отредактируйте свойства вашей сети.

Вкладка сетевого подключения

Рисунок 14: Вкладка сетевого подключения

Затем вернитесь на главную вкладку и импортируйте библиотеку ENV Shield.

Добавление строки

Рисунок 15: Добавление строки

Наконец, перейдите в часть loop программы, которая содержит только обновление переменной Arduino Cloud, и добавьте код для проверки работы shield, чтения двух датчиков и отправки их в последовательный порт. Обратите внимание, что переменные temperature и humidity предопределены на вкладке «thingProperties.h».

Дополнения к loop

Рисунок 16: Дополнения к loop

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

// Arduino_MKRENV - Version: Latest

/*
  Sketch generated by the Arduino Cloud Thing "WeatherStation"
  https://create.arduino.cc/cloud/things/XXXXXXX-XXXXX-XXXXX-XXXX <-- this code will be different for your program

  Arduino Cloud Properties description

  The following variables are automatically generated and updated when changes are made to the Thing properties

  float temperature;
  float humidity;

  Properties which are marked as READ/WRITE in the Cloud Thing will also have functions
  which are called when their values are changed from the Dashboard.
  These functions are generated with the Thing and added at the end of this sketch.
*/

#include <Arduino_MKRENV.h>
#include "thingProperties.h"

void setup() {
  // Initialize serial and wait for port to open:
  Serial.begin(9600);

  // This delay gives the chance to wait for a Serial Monitor without blocking if none is found
  delay(1500);

  // Defined in thingProperties.h
  initProperties();

  // Connect to Arduino Cloud
  ArduinoCloud.begin(ArduinoIoTPreferredConnection);

  /*
     The following function allows you to obtain more information
     related to the state of network and IoT Cloud connection and errors
     the higher number the more granular information you'll get.
     The default is 0 (only errors).
     Maximum is 4
  */
  setDebugMessageLevel(2);
  ArduinoCloud.printDebugInfo();

  //timer = millis();
}

void loop() {
  ArduinoCloud.update();
  // Your code here

    if (!ENV.begin()) {
      Serial.println("Failed to initialize MKR ENV shield!");
      while (1);
    }

    temperature = ENV.readTemperature();
    humidity = ENV.readHumidity();

    // print each of the sensor values
    Serial.print("Temperature = ");
    Serial.print(temperature);
    Serial.println(" °C");

    Serial.print("Humidity    = ");
    Serial.print(humidity);
    Serial.println(" %");
}

Рисунок 17: Листинг кода, главная вкладка

С другой стороны, имейте в виду, что в «thingProperties.h» есть данные, которые вы не должны трогать, так как они генерируются платформой. Каждый раз, когда вы добавляете новый Thing, он получает определённый номер, который связывает устройство с Cloud. В частности, ThingID — это уникальный номер, который должен использоваться только для одного устройства, созданного через мастер настройки. Этот номер в сочетании с крипто-чипом на вашей плате создаёт уникальный способ идентификации платы в платформе, что делает связь безопасной как для вас, так и для нашей инфраструктуры.

Отображение данных

В этом примере вы отправляете данные с платы в Arduino Cloud и строите графики с помощью виджетов на панели управления Cloud. Добавив свойства к Thing, как описано ранее в этом эксперименте, вы включили их для почти автоматического построения графиков.

Начните с загрузки кода на плату, как обычно, с помощью онлайн-редактора.

Загрузка кода

Рисунок 18: Загрузка кода

После загрузки кода нажмите значок Serial Monitor. Вы увидите, как плата подключается к вашему интернет-соединению, затем к Arduino Cloud, и затем начнёт выводить данные, получаемые с датчиков, каждые десять секунд.

Вид Serial Monitor

Рисунок 19: Вид Serial Monitor

Переключите вид на Cloud, нажав кнопку справа от выпадающего списка плат в редакторе. Оказавшись в облачном виде вашей учётной записи Arduino Create, нажмите на вкладку Dashboard, и вы увидите поступающую информацию. По умолчанию данные отображаются крупными числами в различных виджетах окна.

Последняя версия данных, поступающих в Cloud

Рисунок 20: Последняя версия данных, поступающих в Cloud

Наконец, нажмите на значок графика, как показано далее:

Значок графика

Рисунок 21: Значок графика

Вид данных теперь будет преобразован в график. Данные будут отображаться до тех пор, пока браузер работает.

Построение графика данных в Cloud

Рисунок 22: Построение графика данных в Cloud

Задание

Теперь вы создали панель управления, отображающую информацию с двух различных датчиков — можете ли вы добавить все остальные датчики на плате расширения? Как только вы это сделаете, вы создадите удалённую метеостанцию. Пока есть WiFi, ваша плата сможет отправлять данные напрямую в Arduino Cloud, и вы сможете просматривать их со своего компьютера.

SD-карта позволяет собирать данные быстрее, чем Cloud — можете ли вы модифицировать код, чтобы включить возможность записи данных на SD-карту, а не только отправлять их в интернет?

Подведение итогов

Этот эксперимент провёл вас через процесс подключения устройств, которые мы называем Things, к Arduino Cloud и представления данных, которые они отправляют — мы называем их Properties — непосредственно на вашей пользовательской панели управления. Возможно представить множество различных комбинаций данных. Arduino Cloud поможет вам сгенерировать каркасный код, необходимый для создания встраиваемого приложения, которое будет работать внутри вашей платы Arduino и отправлять данные в Cloud.

После того как вы физически подключили датчики и исполнительные механизмы к своей плате, вам просто нужно зарегистрировать их в Cloud, а затем работать над модификацией шаблонного кода, предоставленного вам Arduino Create — онлайн-редактором Arduino.

На этом завершается серия вводных руководств к IoT Prime Bundle от Arduino. Смотрите больше проектов с использованием этих компонентов на Arduino Project Hub.