Код для поиска

ESP32 Урок 48/55 — Удалённый мониторинг температуры и управление светодиодом через MQTT | Набор SunFounder ESP32 IoT

ESP32 Урок 48/55 — Удалённый мониторинг температуры и управление светодиодом через MQTT | Набор SunFounder ESP32 IoT

В этом руководстве мы рассмотрим, как использовать модуль ESP32 вместе с расширительной платой SunFounder для удаленного мониторинга температуры и влажности с помощью платформы Adafruit IO. Кроме того, мы реализуем функцию управления светодиодом через веб-интерфейс. По завершении этого проекта вы сможете просматривать данные о температуре и влажности в реальном времени, а также включать и выключать светодиод из вашего браузера.

Этот проект использует протокол MQTT для эффективной связи между ESP32 и сервисом Adafruit IO. MQTT является легковесным и хорошо подходит для IoT-приложений, позволяя нам легко публиковать данные с датчиков и подписываться на команды управления светодиодом. Для дальнейшего пояснения кода и подключения обязательно посмотрите видео, сопровождающее это руководство (на видео в 00:00).

Объяснение аппаратного обеспечения

Основными компонентами этого проекта являются микроконтроллер ESP32, датчик температуры и влажности DHT11 и светодиод. ESP32 — это мощный микроконтроллер со встроенными возможностями Wi-Fi и Bluetooth, что делает его идеальным выбором для IoT-проектов. Он может выполнять несколько задач и легко подключаться к интернету.

Датчик DHT11 отвечает за измерение температуры и влажности. Он выдает цифровые сигналы, которые могут быть прочитаны ESP32. Светодиод служит индикатором и может управляться удаленно, чтобы продемонстрировать эффективность протокола MQTT в управлении устройствами через интернет.

Детали из технического описания

Производитель Adafruit
Номер детали DHT11
Логическое/IO напряжение 3,3 В
Напряжение питания 3,3 В
Выходной ток (на канал) 20 мА
Пиковый ток (на канал) 50 мА
Рекомендации по частоте ШИМ Н/Д
Пороговые значения входной логики 0,3 В (низкий), 0,7 В (высокий)
Падение напряжения / RDS(on) / насыщение Н/Д
Тепловые пределы от 0 до 50 °C
Корпус 3-контактный
Примечания / варианты Используйте DHT22 для более высокой точности.

 

  • Убедитесь в правильности подключения, чтобы избежать повреждений.
  • Используйте резистор на 220 Ом со светодиодом для ограничения тока.
  • При необходимости используйте подтягивающие резисторы для линии данных DHT11.
  • Проверьте учетные данные Wi-Fi на чувствительность к регистру.
  • Следите за последовательным выводом для отладки проблем с подключением.
  • Держите темы MQTT уникальными, чтобы избежать конфликтов.
  • Проверяйте показания датчика, чтобы убедиться в их корректности.
  • Будьте осторожны со временем отклика DHT11; для стабилизации показаний может потребоваться время.

LED = управление светодиодом; temperature = публикация данных о температуре; humidity = публикация данных о влажности.

Инструкции по подключению

Для подключения компонентов начните с датчика DHT11. Подключите левый контакт DHT11 к шине питания 3,3 В на макетной плате с помощью красного провода. Средний контакт DHT11 должен быть подключен к контакту 13 на ESP32 с помощью желтого провода. Наконец, подключите правый контакт DHT11 к шине заземления с помощью синего провода.

Далее, для светодиода подключите анод (более длинную ножку) к контакту 15 ESP32 через резистор на 220 Ом. Подключите катод (более короткую ножку) непосредственно к шине заземления на макетной плате. Убедитесь, что все соединения надежны, и перепроверьте наличие ослабленных проводов.

Настройка панели управления

  1. Посетите Adafruit IO, затем нажмите на Start for free, чтобы создать бесплатную учетную запись.

    ../../_images/sp230516_102503.png
  2. Заполните форму, чтобы создать учетную запись.

    ../../_images/sp230516_102629.png
  3. После создания учетной записи Adafruit вам нужно будет снова открыть Adafruit IO. Нажмите на Dashboards, затем нажмите на New Dashboard.

    ../../_images/sp230516_103347.png
  4. Создайте New Dashboard.

    ../../_images/sp230516_103744.png
  5. Войдите в только что созданный Dashboard и создайте новый блок.

    ../../_images/sp230516_104234.png
  6. Создайте 1 блок Toggle.

    ../../_images/sp230516_105727.png
  7. Далее вам нужно будет создать здесь новый фид. Этот переключатель будет использоваться для управления светодиодом, и мы назовем этот фид “LED”.

    ../../_images/sp230516_105641.png
  8. Отметьте фид LED, затем перейдите к следующему шагу.

    ../../_images/sp230516_105925.png
  9. Завершите настройки блока (в основном Block Title, On Text и Off Text), затем нажмите кнопку Create block в правом нижнем углу, чтобы завершить.

    ../../_images/sp230516_110124.png
  10. Нам также нужно создать два Text Blocks далее. Они будут использоваться для отображения температуры и влажности. Итак, создайте два фида с именами temperature и humidity.

    ../../_images/sp230516_110657.png
  11. После создания ваш Dashboard должен выглядеть примерно так:

    ../../_images/sp230516_111134.png
  12. Вы можете настроить макет, используя опцию Edit Layout на Dashboard.

    ../../_images/sp230516_111240.png
  13. Нажмите на API KEY, и вы увидите отображаемые ваше имя пользователя и API KEY. Запишите их, так как они понадобятся вам для вашего кода.

    ../../_images/sp230516_111641.png

 

Примеры кода и пояснения

Код начинается с включения необходимых библиотек, настройки учетных данных Wi-Fi и определения параметров MQTT. Ключевые идентификаторы, такие как AIO_USERNAME и AIO_KEY, используются для аутентификации в сервисе Adafruit IO.

#define AIO_USERNAME "YourUsername"
#define AIO_KEY "YourKey"

Эти строки определяют ваше имя пользователя и ключ Adafruit IO, которые необходимы для подключения к брокеру MQTT. Убедитесь, что эти значения точны, чтобы установить успешное соединение.

В функции setup() инициализируется подключение к Wi-Fi, а клиент MQTT настраивается с корневым сертификатом CA для безопасной связи.

WiFi.begin(WLAN_SSID, WLAN_PASS);
client.setCACert(adafruitio_root_ca);

Этот код подключает ESP32 к указанной сети Wi-Fi и устанавливает корневой CA для безопасных подключений MQTT. Правильная обработка этих подключений имеет решающее значение для надежной передачи данных.

Наконец, функция loop() управляет подключением MQTT и публикует показания температуры и влажности через регулярные промежутки времени.

mqtt.processPackets(5000);

Эта строка позволяет ESP32 обрабатывать входящие сообщения для подписанных тем, гарантируя, что устройство остается отзывчивым на команды, отправленные с веб-интерфейса.

Для полного кода обратитесь к полной программе, загруженной ниже статьи.

Демонстрация / Что ожидать

После успешной настройки вы должны увидеть обновления температуры и влажности в реальном времени на вашей панели Adafruit IO. Вы также можете включать и выключать светодиод через веб-интерфейс. Если светодиод не реагирует должным образом, проверьте подключение и убедитесь, что имена тем MQTT совпадают с теми, что определены в коде.

Имейте в виду, что некоторые ошибки подключения MQTT могут возникать из-за истёкших сертификатов. Убедитесь, что в вашем коде есть последний корневой сертификат CA, чтобы избежать этих проблем (в видео на 15:30).

Временные метки видео

  • 00:00 Начало
  • 1:50 Введение в проект
  • 3:16 Что такое MQTT
  • 6:36 Настройка Adafruit IO
  • 11:13 Подключение
  • 13:38 Объяснение кода Arduino
  • 22:03 Выбор платы ESP32 и COM-порта
  • 23:44 Демонстрация проекта
  • 27:05 Обновление панели
849-ESP32 Tutorial 48/55- Arduino code for Remote Temperature Monitoring and LED control MQTT
Язык: C++
/*
 * Библиотека Adafruit MQTT для ESP32 Пример Adafruit IO SSL/TLS
 * 
 * Используйте последнюю версию ядра Arduino для ESP32:
 * https://github.com/espressif/arduino-esp32
 * 
 * Отлично работает с платами Adafruit Huzzah32 Feather и Breakout Board:
 * https://www.adafruit.com/product/3405
 * https://www.adafruit.com/products/4172
 * 
 * Adafruit инвестирует время и ресурсы в предоставление этого исходного кода с открытым доступом, пожалуйста, поддержите Adafruit и оборудование с открытым исходным кодом, покупая продукты от Adafruit!
 * 
 * Автор: Тони ДиКола для Adafruit Industries. 
 * Изменено: Брентом Рубеллом для Adafruit Industries. 
 * Лицензия MIT, весь текст выше должен быть включен в любое перераспределение. 
 * 
 * /// реф: https://www.electronicwings.com/esp32/esp32-mqtt-client
 */
#include <WiFi.h>
#include "WiFiClientSecure.h"
#include "Adafruit_MQTT.h"
#include "Adafruit_MQTT_Client.h"

/*
 * Точка доступа WiFi *********************************/
 * 
 * #define WLAN_SSID "SSID"
 * #define WLAN_PASS "PASSWORD"
 * 
 * /************************* Настройка Adafruit.io
 */

#define AIO_SERVER "io.adafruit.com"

 // Используя порт 8883 для MQTTS
#define AIO_SERVERPORT 8883

 // Настройка учетной записи Adafruit IO
 // (для получения этих значений посетите https://io.adafruit.com и нажмите на Активный ключ)
 // #define AIO_USERNAME "ВАШЕ_ИМЯ_ПОЛЬЗОВАТЕЛЯ_ADAFRUIT_IO"
 // #define AIO_KEY "ВАШ_КЛЮЧ_ADAFRUIT_IO"

#define AIO_USERNAME "JimmyKernel"
#define AIO_KEY "aio_Mxiv12i74b5jKfKNSKLYjlhPmoHC"

/*
 * Глобальное состояние (вам не нужно это изменять!) ******************/
 * 
 * // WiFiFlientSecure для поддержки SSL/TLS
 * WiFiClientSecure client;
 * 
 * // Настройка класса MQTT-клиента, передавая WiFi-клиент и детали сервера и входа MQTT.
 * Adafruit_MQTT_Client mqtt(&client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);
 * 
 * // корневой CA io.adafruit.com
 * const char* adafruitio_root_ca = \
 *  "-----BEGIN CERTIFICATE-----\n"
 *  "MIIEjTCCA3WgAwIBAgIQDQd4KhM/xvmlcpbhMf/ReTANBgkqhkiG9w0BAQsFADBh\n"
 *  "MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3\n"
 *  "d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBH\n"
 *  "MjAeFw0xNzExMDIxMjIzMzdaFw0yNzExMDIxMjIzMzdaMGAxCzAJBgNVBAYTAlVT\n"
 *  "MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j\n"
 *  "b20xHzAdBgNVBAMTFkdlb1RydXN0IFRMUyBSU0EgQ0EgRzEwggEiMA0GCSqGSIb3\n"
 *  "DQEBAQUAA4IBDwAwggEKAoIBAQC+F+jsvikKy/65LWEx/TMkCDIuWegh1Ngwvm4Q\n"
 *  "yISgP7oU5d79eoySG3vOhC3w/3jEMuipoH1fBtp7m0tTpsYbAhch4XA7rfuD6whU\n"
 *  "gajeErLVxoiWMPkC/DnUvbgi74BJmdBiuGHQSd7LwsuXpTEGG9fYXcbTVN5SATYq\n"
 *  "DfbexbYxTMwVJWoVb6lrBEgM3gBBqiiAiy800xu1Nq07JdCIQkBsNpFtZbIZhsDS\n"
 *  "fzlGWP4wEmBQ3O67c+ZXkFr2DcrXBEtHam80Gp2SNhou2U5U7UesDL/xgLK6/0d7\n"
 *  "6TnEVMSUVJkZ8VeZr+IUIlvoLrtjLbqugb0T3OYXW+CQU0kBAgMBAAGjggFAMIIB\n"
 *  "PDAdBgNVHQ4EFgQUlE/UXYvkpOKmgP792PkA76O+AlcwHwYDVR0jBBgwFoAUTiJU\n"
 *  "IBiV5uNu5g/6+rkS7QYXjzkwDgYDVR0PAQH/BAQDAgGGMB0GA1UdJQQWMBQGCCsG\n"
 *  "AQUFBwMBBggrBgEFBQcDAjASBgNVHRMBAf8ECDAGAQH/AgEAMDQGCCsGAQUFBwEB\n"
 *  "BCgwJjAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNlcnQuY29tMEIGA1Ud\n"
 *  "HwQ7MDkwN6A1oDOGMWh0dHA6Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEds\n"
 *  "b2JhbFJvb3RHMi5jcmwwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUHAgEW\n"
 *  "HGh0dHBzOi8vd3d3LmRpZ2ljZXJ0LmNvbS9DUFMwDQYJKoZIhvcNAQELBQADggEB\n"
 *  "AIIcBDqC6cWpyGUSXAjjAcYwsK4iiGF7KweG97i1RJz1kwZhRoo6orU1JtBYnjzB\n"
 *  "c4+/sXmnHJk3mlPyL1xuIAt9sMeC7+vreRIF5wFBC0MCN5sbHwhNN1JzKbifNeP5\n"
 *  "ozpZdQFmkCo+neBiKR6HqIA+LMTMCMMuv2khGGuPHmtDze4GmEGZtYLyF8EQpa5Y\n"
 *  "jPuV6k2Cr/N3XxFpT3hRpt/3usU/Zb9wfKPtWpoznZ4/44c1p9rzFcZYrWkj3A+7\n"
 *  "TNBJE0GmP2fhXhP1D/XVfIW/h0yCJGEiV9Glm/uGOa3DXHlmbAcxSyCRraG+ZBkA\n"
 *  "7h4SeM6Y8l/7MBRpPCz6l8Y=\n"
 *  "-----END CERTIFICATE-----\n";
 * 
 * /****************************** Ленты
 */

 // Настройте ленту под названием 'test' для публикации и 'test2' для подписки.
 // Обратите внимание, что пути MQTT для AIO имеют следующий формат: <имя пользователя>/feeds/<имя корма>
Adafruit_MQTT_Subscribe LED = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/feeds/LED");
Adafruit_MQTT_Publish humidity = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/humidity");
Adafruit_MQTT_Publish temperature = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/temperature");

850-ESP32 Tutorial 48/55- Basic Adafruit MQTT code (watch video)
Язык: C++
/*
 * Adafruit MQTT Базовый урок 1
 * Смотрите видеоинструкцию по этому коду на YouTube https://youtu.be/M9BQweAsHJM
 * Страница ресурсов для этого урока и кода:
 * 📚⬇️ Скачайте и перейдите на страницу ресурсов https://robojax.com/RJT670
 * Учебник от https://youTube.com/@robojax
 * 
 * Библиотека Adafruit MQTT ESP32 Adafruit IO пример SSL/TLS
 * 
 * Используйте последнюю версию ядра Arduino для ESP32:
 * https://github.com/espressif/arduino-esp32
 * 
 * Отлично работает с Adafruit Huzzah32 Feather и Breakout Board:
 * https://www.adafruit.com/product/3405
 * https://www.adafruit.com/products/4172
 * 
 * Adafruit тратит время и ресурсы на предоставление этого открытого исходного кода,
 * пожалуйста, поддержите Adafruit и открытое аппаратное обеспечение, покупая
 * продукты от Adafruit!
 * 
 * Написано Тони Диколой для Adafruit Industries.
 * Изменено Брендом Рубелем для Adafruit Industries
 * Лицензия MIT, весь текст выше должен быть включен в любое перераспределение
 * /
 * 
 * /// ссылки: https://www.electronicwings.com/esp32/esp32-mqtt-client
 */
#include <WiFi.h>
#include "WiFiClientSecure.h"
#include "Adafruit_MQTT.h"
#include "Adafruit_MQTT_Client.h"

/*
 * Точка доступа WiFi *********************************/
 * 
 * #define WLAN_SSID "dars"
 * #define WLAN_PASS "5152535455"
 * 
 * /************************* Настройка Adafruit.io
 */

#define AIO_SERVER "io.adafruit.com"

 // Использование порта 8883 для MQTTS
#define AIO_SERVERPORT 8883

 // Конфигурация аккаунта Adafruit IO
 // (для получения этих значений посетите https://io.adafruit.com и нажмите на Active Key)
 // #define AIO_USERNAME "ВАШЕ_ИМЯ_ПОЛЬЗОВАТЕЛЯ_ADAFRUIT_IO"
 // #define AIO_KEY "ВАШ_АДАФРУИТ_IO_КЛЮЧ"

#define AIO_USERNAME "robojax"
#define AIO_KEY "aio_wCyL33EVKLcGoAotGNEQ4dGQYOLZ"

/*
 * Глобальное состояние (вам не нужно это менять!) ******************/
 * 
 * // WiFiFlientSecure для поддержки SSL/TLS
 * WiFiClientSecure клиент;
 * 
 * // Настройка класса MQTT клиента, передавая WiFi клиент и детали сервера и входа MQTT.
 * Adafruit_MQTT_Client mqtt(&клиент, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);
 * 
 * // корневой CA io.adafruit.com
 * const char* adafruitio_root_ca =
 *  "-----BEGIN CERTIFICATE-----\n"
 *  "MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh\n"
 *  "MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3\n"
 *  "d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD\n"
 *  "QTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT\n"
 *  "MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j\n"
 *  "b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG\n"
 *  "9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB\n"
 *  "CSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97\n"
 *  "nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt\n"
 *  "43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P\n"
 *  "T19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4\n"
 *  "gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO\n"
 *  "BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR\n"
 *  "TLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw\n"
 *  "DQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr\n"
 *  "hMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg\n"
 *  "06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF\n"
 *  "PnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls\n"
 *  "YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk\n"
 *  "CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=\n"
 *  "-----END CERTIFICATE-----\n";
 */

 // Настройте ленту под названием 'test' для публикации и 'test2' для подписки.
 // Обратите внимание, что пути MQTT для AIO имеют следующий формат: <имя_пользователя>/feeds/<имя_канала>
Adafruit_MQTT_Subscribe LED = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/feeds/LED");
 // Adafruit_MQTT_Publish влажность = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/humidity");
 // Adafruit_MQTT_Publish температура = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/температура");

Файлы📁

Нет доступных файлов.