Программируемая Wi-Fi лампочка-ночник на ESP8266

image

Нет ничего необычного в управлении светодиодами с помощью микроконтроллера. Даже такого странного, как ESP8266. Однако мне хотелось сделать законченный продукт. Что-то, что не было бы похоже на паука из проводов и радиодеталей.

Отмечу, что я — начинающий радиолюбитель, так что наверняка что-то сделал не слишком хорошо. Буду рад, если кто-то подскажет, что не так и почему надо делать иначе.

Существует целый ряд особенностей, связанных с контроллером ESP8622, с транзисторами, с мощными RGB-светодиодами, с 3D-печатью вообще и моделированием в частности и программированием всего этого счастья. Это обзорная статья, где я коротко покажу, что и как получилось, а если вы захотите, то раскрою подробнее запрошенные темы отдельными статьями.

Модуль ESP очень прожорлив. При запуске он забирает до 300 мА, что делает невозможным его питание, к примеру, от Arduino. Ему нужен свой источник питания. Причем, источник питания на 3.3В. Это проблема. В мире полно копеечных источников питания на 5В, но трехвольтовые громоздки и дороги. К счастью, существует такая вещь, как регулятор напряжения AMS1117-3.3.

Питание


Взял цоколь от лампочки, китайскую пятиваттную USB-зарядку, регулятор напряжения со сглаживающим конденсатором, диод Шоттки (на всякий случай) и получил:

image

На 3.3 не очень похоже, но это потому, что стоит пара конденсаторов. Однако, под нагрузкой все нормально.

Контроллер


Мой фаворит — ESP-07, с возможностью подключения внешней антенны и металлическим экраном-теплоотводом.
Прошивка: nodemcu, в первую очередь потому, что там есть поддержка ШИМ (PWM) и возможность менять код на лету.

image

Собранная схема


Затем, закрепил сверху трехваттный RGB-светодиод, подключил к нему транзисторы BC547 (схема с общим эмиттером), блок питания и плату заклеил изолентой и скрепил вместе двусторонним скотчем. С другой стороны платы прикрепил поставил микроконтроллер, подвел питание, добавил сопротивление к каждому каналу светодиода и подключил к 5 вольтам.

image

Корпус


Итоговый выбор — цилиндрический корпус с отверстием снизу под цоколь, канавками для платы и выемкой сверху для крепления украшения. Немного tinkercad-а, два часа печати и результат:

image

Финальный продукт


image

Проверка


Немного JS, немного LUA, немного Perl и…

image

Как это работает


При включении лампочка коннектится к домашней сети и запрашивает у домашнего сервера файлик с lua-скриптом. Если получилось — сохраняет и запускает. Если не получилось — запускает предыдущий сохраненный. Обычно включение занимает около 2-3 секунд.

Подводные камни


Куда же без них?

Во-первых, нельзя использовать транзисторную схему включения с общим коллектором. ESP — удивительно живучая штука, хоть и очень капризная. Он начинает зверски греться от пяти вольт, но после того как остынет — приходит в норму.

Во-вторых, нельзя использовать GPIO0, потому что он на старте получается замкнут на землю и ESP входит в режим прошивки. И нельзя использовать GPIO2, потому что если он на старте «на земле», то Wi-Fi модуль не стартует. GPIO15 тоже лучше не трогать. Мой выбор: 4,5,12.

В-третьих, нужно выставлять максимальную скорость для обмена данными, иначе при получении данных программный ШИМ начинает заметно мерцать.

В-четвертых, ABS-пластик горюч, это надо учитывать, помня о китайском блоке питания.

В пятых, в следующей версии нужно цилиндр делать более узким у основания, подрезав плату. Потому как не все патроны позволяют вкрутить лампу с таким широким основанием. Кроме того — можно было сантиметр высоты сэкономить.

Неисправимые улучшения


Планирую добавить midi-пищалку для всяких праздников, приложение под Андроид, чтобы выбирать цвет не в браузере, автоматический режим в котором бы лампа получала прогноз погоды и выбирала свой цвет в зависимости от результата и, наверное, следующий вариант стоит собирать, протравив плату. Интересные предложения всячески приветствуются.
Поделиться публикацией
Комментарии 13
    0
    ШИМ в ночнике не вредно? Может лучшее решение несколько слабых светодиодов и регулировать яркость их включением/отключением?
      +1
      Не уверен насчет вреда, но низкочастотный ШИМ меня раздражает тем, что при взгляде мельком объект оставляет, как бы, шлейф из своих копий. У ESP что-то среднее — частота ШИМ примерно килогерц, так что выше 30% duty мерцание незаметно. А вот если поставить, скажем, 1% яркости, то шлейф становится сильно заметен.

      В принципе, это можно решить добавлением конденсаторов. Что-то порядка 1000мкФ @10В на каждый канал сгладят все где-то до 5% яркости. А можно сразу добавить Arduino Pro Mini у которой частота ШИМ около 63 килогерц. Этот вариант мне нравится еще тем, что серьезно все упрощает — выводов для ШИМ куча и нормальный I2C для датчиков.

      Что же до схемы с включением-отключением, то у ESP катастрофически мало пинов. А добавлять в схему минимум три микросхемы для сдвига регистра, имхо, обойдется дороже по деньгам и месту, чем один китайский Arduino.
      0
      Поделитесь кодом?
      У меня вполне с транзисторным ключем работает.
        +1
        Кодом для nodemcu?

        1. Коннектится по WiFi к сети, запрашивает страницу с адресом esp[nodeIP].lua с 192.168.1.1
        init.lua

        2. Закачанный скрипт, собственно.

        192.168.1.33.lua

        Дальше чип обрабатывает запросы вида http://192.168.1.33?led=1000,1000,1000

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

      Боже, что вы несёте! Я недавно купил в ближайшем радиомагазине линейный стабилизатор на 3,3В с конденсаторами. Всё удовольствие 24 рубля.
        +1
        Раскройте тему чуть подробнее, пожалуйста. Он понижает с 220В? Какую выходную мощность обеспечивает?
          0
          Он понижает с 4,7-15 Вольт постоянного тока. А их уже можно взять с любого бп.
          Выходной ток до 800mA, чего ESP8266 хватит за глаза.
            +1
            У меня этим же занимается AMS1117-3.3 с танталовым конденсатором на 22мкФ, но я сетовал на то, что нет вменяемых готовых миниатюрных решений. Приходится расковыривать блоки питания на 5В (например). А мне бы очень пригодился уже готовый дешевый и компактный блок питания на 3.3В, способный выдавать хотя бы 10 ватт. Вам такие не попадались?
              0
              А-а, не факт что хватит. 800мА это при минимальной разнице между входным и выходным напряжениями. Любой линейный преобразователь — это, упрощённо говоря, резисторный делитель. И греется он соответствующе. Но с 5и вольт вполне потянет, тут Вы правы. Однако именно линейный преобразователь автор и использовал, так что теряется смысл Вашего замечания.

              2Hellsy22: работа замечательная, так держать! От себя добавлю что если делать прямо совсем по феншую — лучше заменить линейник 3.3 вольта на импульсный преобразователь (да, обвеса побольше, но всё не так страшно как кажется по началу) и в качестве управляющего МК (раз уж вы хотите дополнительные датчики вешать и частота ШИМ нужна повыше) использовать, например, stm8. Ну и китайский бп лучше заменить на что-нибудь более повторимое и приличное. =)
          +1
          В мире полно копеечных источников питания на 5В, но трехвольтовые громоздки и дороги.

          Глянь такой.
          ru.aliexpress.com/item/ac-dc-power-supplies-110V-220V-265V-to-3-3V-0-6a-ac-dc-supply-power/32315023686.html
          И такой ru.aliexpress.com/item/ac-dc-3-3v-supply-power-module-110v-220v-264v-to-3-3v-0-9a-small/1976378645.html
          Хинт — в поиске Ali 3,3 не равно 3.3 — ищи с точкой.
          10Вт и 3.3В — это миниатюрных не найдешь, размер определяется больше током, а не напряжением. Тут 3А получается, это уже много.
            0
            В-третьих, нужно выставлять максимальную скорость для обмена данными, иначе при получении данных программный ШИМ начинает заметно мерцать.

            Какая скорость имеется в виду и где она выставляется?
              0
              Скорость serial. Похоже, что микроконтроллер обменивается с Wi-Fi модулем по тому же порту. И пока идет передача данных — все остальное висит.

              Выставляется в nodemcu она так: uart.setup(0,921600,8,0,1,0)

            Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

            Самое читаемое