Перейти к содержанию

Читаем данные с датчиков (DHT11, Blynk, Aimylogic)

Материал из Wiki yaboard

Вступление

В данной статье рассмотрим вариант получения данных с датчиков посредством голосового запроса Алисе. Для примера будем использовать датчик DHT11 подключенный к NodeMCU и добавленный в проект Blynk.
Данная статья будет являться лишь примером получения данных с датчиков с помощью http get запроса. По данному примеру можно будет "пробросить" датчики, возвращающие ответ в различных форматах.

Собираем простейший датчик

В данном примеру будут использованы следующие компоненты:

  1. NodeMcu
  2. Датчик температуры/влажности DHT11

Собираем простейшую схему, как на рис.1.

Рис. 1. Собираем простейшую схему
Внимание! Для работы с nodemcu в Arduino IDE требуется настройка с платой. Пример настройки можно найти здесь: https://robotclass.ru/articles/node-mcu-arduino-ide-setup/. Также потребуется установка библиотек Blynk - скачать можно здесь: http://help.blynk.cc/en/articles/512105-how-to-install-blynk-library-for-arduino-ide.

Подключаем плату к ПК и прошиваем следующей прошивкой:

#define BLYNK_PRINT Serial
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include "DHT.h"

int custT = 0;
int custH = 0;

char auth[] = "Токен_Blynk";
char ssid[] = "Имя_точки_доступа_Wifi";
char pass[] = "Пароль_Wifi";

#define DHTPIN D1 
#define DHTTYPE DHT11 // DHT 11

DHT dht(DHTPIN, DHTTYPE);

void setup()
{
  Serial.begin(9600);
  Blynk.begin(auth, ssid, pass);
  dht.begin();
}

void loop()
{
  Blynk.run();
  int h = dht.readHumidity(); //получаем влажность
  int t = dht.readTemperature(); //получаем температуру
  if (h != custH){	//если показания отличаются от прошлых - отправляем их на виртуальный пин
    Blynk.virtualWrite(V0, h);
    custH = h;
  }
  if (t != custT){	//если показания отличаются от прошлых - отправляем их на виртуальный пин
    Blynk.virtualWrite(V1, t);
    custT = t;
  }
}

Не забываем изменить параметры:
char auth[] = "Токен_Blynk";
char ssid[] = "Имя_точки_доступа_Wifi";
char pass[] = "Пароль_Wifi";
Подробнее о том, как создать проект в Blynk и получить токен можно узнать ЗДЕСЬ

Читаем данные в Blynk

Проверим, работает ли датчик. Для этого в нашем проекте Blynk добавим 2 виджета:

  1. Нажимаем кнопку со знаком "+" в заголовке проекта.
  2. Выбираем один из виджетов (можно использовать любой из этих: Value Display, Labeled Value, Gauge). Для примера выберу Gauge.
  3. Оба виджета настраиваем выбрав в Source устройство, к которому привязан наш токен, виртуальные пины: V0 - для значений влажности, V1 - для значений температуры.
  4. Запускаем проект и видим текущие показания температуры и влажности. Проверить работу датчика можно дыханием в сторону датчика - показания должны увеличиться.

Создаем навык для Яндекс Диалогов

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

  1. После регистрации мы попадаем на главную страницу, где будут располагаться наши боты. Для создания нового бота (для навыка Алисы) нажимаем кнопку "Создать бота или обзвон".
  2. В следующем окне зададим имя бота (любое), язык и категорию.
  3. Перед нами откроется рабочая область создания сценария, в которой будет предложено создать первый экран. Для начала создадим блок "Текст", чтобы поприветствовать входящего в навык пользователя.
  4. Рекомендую задать что-то похожее на текст, указанный на рисунке, т.к. по требованиям Яндекс приватный навык должен с первого экрана предупреждать о том, что он приватный, а также при запросе "Помощь" (об этом чуть ниже) должна появляться справка о функционале навыка. Без данных требований навык не сможет пройти модерацию.
  5. В этом же экране создадим новый блок "Интенты", где зададим шаблоны фраз, на которые будет откликаться Алиса. В данном случае будет 2 интента (* ~температура * ~балкон * - для того чтобы узнать температуру для примера балкона (предположим, что наш датчик находится на балконе) и * ~влажность * ~балкон * - для того, чтобы узнать влажность балкона).
  6. Чуть ниже создадим новый экран с двумя блоками: "Текст" - где укажем, что будет отвечать Алиса, если фраза не совпадает с шаблонами интентов и "Переход", чтобы вернуться на начальный экран.
  7. Соединим Пункт "Любая другая фраза" с экраном неизвестной фразы нажав на кружочек рядом с данным пунктом и протянув стрелку до соответствующего экрана. Тоже самое можно сделать от пункта "Переход" на экране неизвестной фразы до экрана приветствия. (Теперь если фраза не будет похожей на "температура балкона" или "влажность балкона", Алиса скажет, что такой команды нет и вернется к начальному экрану).
  8. Также в блоке "Интенты" стоит установить флажок "Сделать доступным из любой точки сценария", для того, чтобы наши шаблоны работали в любом месте. Для этого нажимаем кнопку с шестеренкой рядом с названием блока и устанавливаем соответствующий флажок в открывшемся окне.
  9. Осталось только прочитать данные с датчиков и вывести их пользователю. Для этого каждому интенту создадим экран с блоком HTTP-запрос.