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 Ом. Подключите катод (более короткую ножку) непосредственно к шине заземления на макетной плате. Убедитесь, что все соединения надежны, и перепроверьте наличие ослабленных проводов.
Настройка панели управления
-
Посетите Adafruit IO, затем нажмите на Start for free, чтобы создать бесплатную учетную запись.

-
Заполните форму, чтобы создать учетную запись.

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

-
Создайте New Dashboard.

-
Войдите в только что созданный Dashboard и создайте новый блок.

-
Создайте 1 блок Toggle.

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

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

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

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

-
После создания ваш Dashboard должен выглядеть примерно так:

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

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

Примеры кода и пояснения
Код начинается с включения необходимых библиотек, настройки учетных данных 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 Обновление панели
/*
* Библиотека 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");
/*
* 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/температура");
Common Course Links
Common Course Files
Ресурсы и ссылки
-
Документация
Файлы📁
Нет доступных файлов.