Оглавление:

Подключение датчика DHT11 / DHT22 к облаку с помощью платы на базе ESP8266: 9 шагов
Подключение датчика DHT11 / DHT22 к облаку с помощью платы на базе ESP8266: 9 шагов

Видео: Подключение датчика DHT11 / DHT22 к облаку с помощью платы на базе ESP8266: 9 шагов

Видео: Подключение датчика DHT11 / DHT22 к облаку с помощью платы на базе ESP8266: 9 шагов
Видео: esp датчик температуры Подключаем DHT к ESP8266 2024, Июнь
Anonim
Подключение датчика DHT11 / DHT22 к облаку с помощью платы на базе ESP8266
Подключение датчика DHT11 / DHT22 к облаку с помощью платы на базе ESP8266

В предыдущей статье я подключил свою плату NodeMCU на базе ESP8266 к сервису Cloud4RPi. Пришло время для настоящего проекта!

Запасы

Требования к оборудованию:

  • Любая плата на базе микросхемы ESP8266 (например, NodeMCU)
  • Датчик DHT11 или DHT22

Программное обеспечение и услуги:

  • Библиотека датчиков DHT от Adafruit - v1.3.7
  • Унифицированный датчик Adafruit - v1.0.3
  • cloud4rpi-esp-arduino - v0.1.0
  • Cloud4RPI - облачная панель управления для устройств IoT
  • PlatformIO IDE для VSCode

Шаг 1: Измерьте температуру и влажность

Измерьте температуру и влажность
Измерьте температуру и влажность

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

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

Согласно их репозиторию GitHub, мы также должны добавить пакет Adafruit Unified Sensor.

Шаг 2. Создайте и настройте проект

Создать и настроить проект
Создать и настроить проект

Я уже описывал, как создать проект PlatformIO и установить библиотеки в первой части. Мой проект называется «MyNodeMCU». Структура показана выше.

Этот проект представляет собой немного измененный пример Cloud4RPi. Я решил хранить токен устройства и учетные данные Wi-Fi в файле конфигурации вместо кода.

Файл platform.io выглядит следующим образом:

[platformio] default_envs = nodemcuv2 [env: nodemcuv2] platform = espressif8266 framework = arduino board = nodemcuv2

Шаг 3. Установите библиотеки

Установить библиотеки
Установить библиотеки

Установка библиотек довольно проста. Вы можете сделать это из графического интерфейса IDE или добавив имена необходимых библиотек в раздел lib_deps файла platform.io:

; … Lib_deps = cloud4rpi-esp-arduino Библиотека датчиков DHT для унифицированного датчика Adafruit build_flags = -D MQTT_MAX_PACKET_SIZE = 1024 -D MQTT_MAX_TRANSFER_SIZE = 128 -D CLOUD4RPI_DEBUG = 0 -D CLOUD4RPI_DEBUG = 0 -D CLOUD4RPI_DEBUG = 0 -D SSID_NAME_ / "_PASS_WI_ID_YB_ID_IN_D_WI_ID_IN_IN_IN_IN_IN_IN_IN_IN_IN_IN_IN_IN_IN_D_W_ID_IN_S_W_ID_IN_D_W_ID_IN_ _ D CLOUD4RPI_TOKEN = / "_ ВАШЕ_УСТРОЙСТВО_ТОКЕН _ \"

Добавленные библиотеки будут автоматически установлены во вложенную папку проекта.

Заголовок main.cpp выглядит следующим образом:

#include #include #include #include "DHT.h"

Шаг 4: Подключите датчик DHT11

Adafruit предоставляет DHTtester.ino пример подключения датчика.

Этот код инициализирует датчик и определяет структуру для хранения результата измерения (в случае успеха):

#define DHTPIN 2 // Цифровой вывод, подключенный к датчику DHT # define DHTTYPE DHT11 // DHT 11 //… DHT dht (DHTPIN, DHTTYPE); dht.begin (); //… struct DHT_Result {float h; float t; }; DHT_Result dhtResult;

Следующая функция показывает, как считывать данные датчика и сохранять их в структуре данных, описанной выше.

недействительными readSensors () {float h = dht.readHumidity (); // Считываем температуру в градусах Цельсия (по умолчанию) float t = dht.readTemperature ();

// Проверяем, нет ли сбоев при чтении, и выходим

if (isnan (h) || isnan (t)) {Serial.println (F («Не удалось прочитать с датчика DHT!»)); возвращение; } dhtResult.h = h; dhtResult.t = t; }

Шаг 5: отправка данных в облако

Когда у нас есть эти данные, следующим шагом будет их отправка в сервис Cloud4RPi.

Страница Cloud4RPi для Arduino описывает библиотечный API, который представляет собой набор методов, используемых для:

  • создавать, читать и обновлять переменные,
  • отправлять значения переменных в облако по протоколу MQTT.

Библиотека поддерживает три типа переменных: Bool, Numeric и String.

Рабочий процесс библиотеки начинается с создания экземпляра API с использованием токена устройства с веб-сайта cloud4rpi.io (подробности см. В части 1 статьи).

#if defined (CLOUD4RPI_TOKEN) Cloud4RPi c4r (CLOUD4RPI_TOKEN); #else Cloud4RPi c4r ("!!! _ NO_DEVICE_TOKEN _ !!!"); #endif

Затем объявите переменные для показаний DHT11:

c4r.declareNumericVariable ("DHT11_Temp"); c4r.declareNumericVariable ("DHT11_Hum");

Затем получите данные с датчика, сохраните их в переменных и опубликуйте данные в Cloud4RPi:

c4r.setVariable ("DHT11_Temp", dhtResult.t); c4r.setVariable ("DHT11_Hum", dhtResult.h); c4r.publishData ();

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

Шаг 6: Диагностика

Cloud4RPi поддерживает диагностические данные вместе со значениями переменных. Я использовал время безотказной работы, мощность сигнала Wi-Fi и IP-адрес в качестве диагностических данных:

c4r.declareDiagVariable ("IP_Address"); c4r.declareDiagVariable ("RSSI"); // Уровень сигнала WiFi c4r.declareDiagVariable ("Время работы");

Примечание. Миллис-функция, которую я использую для получения значения времени безотказной работы, сбрасывается до нуля каждые ~ 50 дней. Этого более чем достаточно для моего проекта.

Следующий код устанавливает значения диагностических переменных:

c4r.setDiagVariable ("RSSI", (String) WiFi. RSSI () + "dBm"); c4r.setDiagVariable ("IP_Address", WiFi.localIP (). toString ()); c4r.setDiagVariable ("Время работы", uptimeHumanReadable (currentMillis)); c4r.publishDiag ();

Функция uptimeHumanReadable преобразует миллисекунды в удобную форму:

Строка uptimeHumanReadable (длинные миллисекунды без знака) {static char uptimeStr [32]; беззнаковые длинные секунды = миллисекунды / 1000; беззнаковые длинные минуты = секунд / 60; беззнаковое int часы = мин / 60; беззнаковое целое число дней = часы / 24; сек - = мин * 60; мин - = часы * 60; часы - = дней * 24; sprintf (uptimeStr, "% d дней% 2.2d:% 2.2d:% 2.2d", (байтовые) дни, (байтовые) часы, (байтовые) минуты, (байтовые) секунды); возврат строки (uptimeStr); }

Функция выводит такую строку 5 days 10:23:14 вместо странного большого числа.

Шаг 7: запуск и отладка проекта

Запустить и отладить проект
Запустить и отладить проект

После компиляции созданного кода и его прошивки в NodeMCU устройство подключается к облачной службе и начинает отправку данных.

Вы можете повысить уровень детализации журнала, установив для переменной препроцессора CLOUD4RPI_DEBUG значение 1 (добавьте -D CLOUD4RPI_DEBUG = 1 в раздел build_flags в файле platform.io).

Затем откройте сайт cloud4rpi.io и обратите внимание на новое устройство в сети. Откройте его, чтобы увидеть все значения переменных, полученные от устройства: датчик и диагностика.

Шаг 8: Конфигурация приборной панели

Конфигурация приборной панели
Конфигурация приборной панели

На этом этапе подключение для передачи данных в облако работает. Теперь давайте настроим визуальное представление данных.

Я использовал пользовательский интерфейс конфигурации Dashboard, чтобы создать следующую панель.

Панелью управления можно делиться, поэтому я сразу же делюсь ею со своим другом.

Шаг 9: Заключение

Заключение
Заключение

Полный код проекта доступен в gist.

На этом пока все!

Вопросы и предложения приветствуются в комментариях.

Рекомендуемые: