Умный дом на базе ESP32-DevKitC
Умный дом на базе ESP32

Умный дом на базе ESP32-DevKitC V4

Работа с системами IoT - мое хобби. На этой странице нет рекламы. По поводу сотрудничества, реализации совместных проектов или приглашения меня на работу, пишите мне на почту или через форму обратной связи.


  • Espressif HomeKit SDK предлагает готовые решения для Applt HomeKit, которые можно интегрировать для управления светом, дверьми, термостатами и множеством различных устройств с Ваших iPod, iPhone или Apple Watch.
  • ESP32-DevKitC V4: ESP32-WROOM-32E Ссылки: 1, 2, 3, 4
  • FreeRTOS - Real-time operating system for microcontrollers.

Создание ESP32 Web Server (ESP-IDF), отражающего данные о температуре с двух датчиков DS18B20.

    Особенности моей реализации:
  • Доступно для скачивания на GitHub: ESP32-ESP-IDF-HTTP-Server-DS18B20
                cd ~/esp
                git clone --recursive https://github.com/TimofeyPro/ESP32-ESP-IDF-HTTP-Server-DS18B20.git
  • Протестировано на ESP32-DevKitC V4: ESP32-WROOM-32E, который работает как HTTP Server. Код реализован на версии ESP-IDF v5.0.1. За основу взят стандартный пример веб сервера «Simple HTTPD Server Example».
            cd ~/esp
            cp -r $IDF_PATH/examples/protocols/http_server/simple .
  • Библиотека Espressif «RMT Transmit & Receive Example -- 1-Wire bus» с датчиками DS18B20 стабильно пока не работает: (Example Onewire DS18B20 does not work). Поэтому решение в части получения данных с датчика взято у feelfreelinux.
  • На экран мобильного телефона по адресу «http://yourIP/sensor» выводятся показания температуры с двух датчиков + их 64-ех разрядный серийный номер, который используется для адресации датчиков на 1-Wire шине; MAC адрес контроллера и системное время контроллера (время выводится на момент обновления браузера).
  • Данное решение синхронизирует системное время контроллера с SNTP (Simple Network Time Protocol) сервером pool.ntp.org через WiFI, используя стандартный пример: using LwIP SNTP module and time functions
            cd ~/esp
            cp -r $IDF_PATH/examples/protocols/sntp .
DS18B20 – высокоточный цифровой датчик температуры Предоcтавление доступа к контроллеру для прошивки (to flash the binaries) из ESP-IDF (Espressif IoT Development Framework) в Ubuntu:
        ls /dev/ttyUSB0
        sudo chmod a+rw /dev/ttyUSB0
Добавление инструментов ESP-IDF в переменную окружения PATH для использования из командной строки:
        . $HOME/esp/esp-idf/export.sh
Настройка, создание загрузчика, прошивка и вывод данных в консоль:
        idf.py menuconfig
        idf.py build
        idf.py -p /dev/ttyUSB0 flash
        idf.py -p /dev/ttyUSB0 monitor
        idf.py -p /dev/ttyUSB0 flash monitor

DS18B20 – высокоточный цифровой датчик температуры в герметичном исполнении черного цвета. Я тестировал на своих датчиках со стандартной длтной в 3 метра!!! Ссылка на библиотеку DallasTemperature.h, для работы которой также понадобится библиотека OneWire.h.

    Выходы датчика температуры:
  • черный (GND) - подключается напрямую к контроллеру
  • красный (VCC, подключается к питанию 3.3V на контроллере)
  • желтый (данные, DAT; подключается к любому цифровому пину; я успешно тестировал на 17ом пине ESP32­-WROOM­-32E. Пин (желтый провод) должен быть подтянут к питанию (красный провод) резистором 4.7кОм. Резистор на 4.7кОм можно заменить двумя резисторами на 10 кОм, подключенными параллельно. На один пин можно подключить несколько датчиков DS18B20.
    Основные характеристики DS18B20:
  • Диапазон: -55.. 125 °C. Точность: 0.5 °C.
  • Разрешение: 9.. 12 бит (0.48.. 0.06 °C). Период выдачи результата: 750 мс при точности 12 бит; 94 мс при точности 9 бит.
  • Интерфейс связи: 1-Wire (OneWire). Питание в диапозоне: 3V - 5.5V

Создание точки доступа (Access Point) на ESP32 (протестировано на ESP-IDF v5.0.1)

Копируем в свою рабочую директорию стандартный пример точки доступа (AP) «Wi-Fi SoftAP Example».

    cd ~/esp
    cp -r $IDF_PATH/examples/wifi/getting_started/softAP .

Для хранения настроек WiFi запускаем работу библиотеки «nvs_flash.h» по работе с знергонезависимым хранилищем данных в памяти контроллера (Non-Volatile Storage, NVS) используя функцию «nvs_flash_init».

«ESP_ERROR_CHECK(esp_netif_init());» - запускаем библиотеку ESP-NETIF, использующую lwIP (Lightweight TCP/IP stack). Все фазы запуска WiFi представлены здесь.

«ESP_ERROR_CHECK(esp_event_loop_create_default());» - запускаем Event Loop Library, которая позволяет компонентам объявлять события (declare events), для которых другие компоненты могут регистрировать обработчики (handlers) — код, который будет выполняться при возникновении этих событий.

«esp_netif_create_default_wifi_ap();» - создание экземпляра сетевого интерфейса, связывающего WiFi driver и TCP/IP stack.

«esp_wifi_init()» - create WiFi driver task и запустить драйвер WiFi.

«esp_event_handler_instance_register(WIFI_EVENT, ...)» - начинаем «прослушивать» события WiFi ( a callback function that listen for WiFi events).

Настройка параметров WiFi: «esp_wifi_set_mode(WIFI_MODE_AP)» и «esp_wifi_set_config()».

После запуска драйвера WiFi и настройки параметров WiFi нужно запустить WiFi: «esp_wifi_start()». Теперь ESP32 настроен и начал работать как точка доступа (Access Point, AP), ожидающая подключения клиентов. Порядок обработки событий Wi-Fi описан здесь.


Адресная лента WS2812b 144 led - это 144 светодиода на каждый квадратный метр; ширина ленты - 12мм; рабочая температура: от -20°C до +50°C. Эту ленту можно разрезать кратно 1 диоду. Входное напряжение - 5V постоянного тока; мощность - 43,2 Вт/метр. Это означает, что на ленту 2 метра нужен блок питания - 100Вт; на 5 метров - 250Вт, на 6 метров уже желательно 300Вт. Расчитаем максимальную силу тока (I, амперы) для шестиметровой адресной ленты WS2812b на 144 светодиодов на метр, используя отношение мощности (P, Вт) к напряжению (U, 5 вольт), получаем:
$I$ = $\frac{P}{U}$ = $ \frac{43.2 * 6}{5V}$ = $ \frac{259.2}{5V}$ = 51.84 ампер.
Альтернативно, исходя из того, что потребляемый ток на один светодиод составляет до 60мА (при максимальной яркости), получаем 60*144*6/1000=51.84 ампер.

Закон Ома

Библиотека для управления лентой - FastLED Ccылки: 1.
LED Strip Driver - Driver for Addressable LED Strip (WS2812, etc).

jst разъем


ESP-IDF v5.0 библиотека режима станции (STA) - режим, в котором контроллер не создает собственную сеть, а подключается к любой существующей Wi-Fi сети, например, к существующей локальной сети или к другому устройству, работающему в режиме точки доступа (AP). Роутер от просто точки доступа отличается тем, что трафик, идущий от станций, подключенных к нему, он транслирует во внешнюю сеть и наоборот. Например, данный режим может использоваться для получения точного времени с NTP-сервера(ов) посредством протокола SNTP (Simple Network Time Protocol) в целях синхронизации с системным временем ESP32. Вот пример реализации LwIP SNTP библиотеки для ESP32. Ключевой же функцией данного режима является передача данных MQTT-брокеру.


Модуль питания MB102 (Breadboard Power Supply MB102) на 3,3В или 5В постоянного тока (входящее напряжение: 7-12V), представляющий собой стабилизатор постоянного напряжения, для макетной платы MB-102 на 830 точек. Стабилизацию напряжений выполняют две микросхемы, включенные последовательно: AMS1117-5.0 и AMS1117-3.3 Микросхемы имеют защиту от перегрузки по току и перегрева.

При установке модуля стабилизатора на макетную плату аккуратно соблюдайте полярность подачи питания. Правильная установка модуля возможна только с одной стороны, но из-за совпадения отверстий можно ошибочно поставить стабилизатор на другую сторону макетной платы. На выступах платы модуля возле контактных площадок штырей соединителей обращенных вниз нанесена маркировка “+” и “–“. Установить надо так, чтобы знак “+” соответствовал красной полосе, а “–“ синей. Так модуль питания MB102 обеспечивает одновременную подачу энергии на верхнюю и нижнюю пары шин питания макетной платы.

Ближе к середине платы стабилизатора расположена вилка из восьми контактов. Устанавливать на нее перемычки нельзя. Вилка обеспечивает подключение жгута проводов питания устройств, расположенных вне макетной платы. На контактах питания USB соединителя, имеющего тип А, напряжение 5 В для снабжения питанием соответствующих приборов через USB кабель. Напряжение на стабилизатор подается через круглый соединитель. Для этого используется штекер DJK-02A, его контактная часть имеет размеры диаметр 2.1 x 5.1 мм, центральный контакт – плюс. Для предотвращения неполадок в случае ошибки полярности в этом разъеме далее входная цепь модуля содержит диод.

USB это один из выходов устройства. Запрещается использовать разъем USB в качестве входа для подключения модуля к питанию. Это приведет к порче микросхемы стабилизатора 5 В и порта USB.


    Личная памятка по Espressif IoT Development Framework:
  • Первичная насторойка и тестирование ESP-IDF
  • Подключение библиотеки логирования (ESP32 Logging library): #include "esp_log.h". Определение переменной «TAG» для использования стандартных макросов с разными уровнями детализации событий: static const char* TAG = "MyModule"; Детали: 1.
  • Различия между «printf» (язык С) и «std::cout» (язык C++).
  • Ошибка «***ERROR*** A stack overflow in task main has been detected» в подавляющем большинстве случаев означает, что Вы накосячили в коде. Читайте «Reducing Stack Sizes» и только будучи увереными, что Вам это действительно нужно, увеличьте значение в «menuconfig -> Component Config -> ESP System settings -> Main task stack size».
  • При ошибке «Detected size(4096k) larger than the size in the binary image header(2048k)» просто меняем значение в «menuconfig -> Serial flasher config -> Flash size».