Блютуз лампочка своими руками

Управляем светодиодами с помощью Web Bluetooth API и Arduino

— Чайники, весы, игрушки, лампочки, кофемашины… В эти и другие устройства встраивают bluetooth-модули.
— Зачем?
— Чтобы дать пользователю управлять своими устройствами через приложение. К примеру, управлять освещением в комнате.
— Ой, а можно ли собрать какое-то своё простое устройство и управлять им прямо через браузер?
— Да! И эта статья как раз об этом.

Немного теории

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

Bluetooth

Стандарт беспроводной радиосвязи, связывающий на коротком расстоянии различные типы устройств. Для управления железками через Web Bluetooth API нам потребуется Bluetooth v4.0.

The Generic Attributes — постоянно транслируемое дерево возможностей bluetooth-устройства.

Сервисы

Внутри bluetooth-устройства есть сервисы. Сам по себе сервис — это коллекция характеристик и связей с другими сервисами. У каждого сервиса есть свои UID и имя. Зачастую будут попадаться “Unknown services”. Это связано с тем, что количество устройств и вариантов их использования велико.

Характеристики

Внутри каждого сервиса есть характеристики, в которые можно писать, считывать их, а также подписаться на них. Характеристика также имеет свой UID.

Задача

В качестве задачи я выбрал реализацию сайта, который может:

  • Зажигать светодиоды разными цветами и гасить их.
  • Заставлять светодиоды переливаться разными цветами.

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

Компоненты

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

  • Arduino.
  • Bluetooth-модуль v4.0 (HM-10 в моём случае).
  • Два трёхцветных светодиода.
  • Макетная плата.
  • Соединительные провода.
  • Резисторы.

Данный список не является строгим для реализации. Я уверен, что можно заменить Arduino чем-то другим и выбрать другой bluetooth-модуль. Но в статье будет рассматриваться взаимодействие именно с этими компонентами.

Как это должно работать

Вкратце суть такова: мы подключаемся к bluetooth-модулю и передаём некий код (от 1 до 4 включительно). Если код валиден, то зажигается один из трёх цветов или же светодиоды начинают мигать всеми возможными цветами (красный, зелёный, синий) в течение какого-то времени.

Приготовления

Для начала необходимо собрать рабочую схему и загрузить Arduino-скетч. Ниже я даю схему (рис. 1) и код скетча, которые у меня получились.

Рис. 1 (Схема для сборки)

Последнее приготовление

Итак, мы загрузили скетч, подключили схему к питанию. Что дальше? Для работы с Web Bluetooth API нам необходимо знать имя нашего устройства, и к какому сервису мы хотим получить доступ. Для этого можно воспользоваться приложением “nRF Connect”.

Включаем приложение и видим список bluetooth-устройств рядом с нами (рис. 2).

Рис. 2 (Список устройств, которое нашло приложение)

Устройство с именем “CC41-A” меня заинтересовало и не зря.

После подключения к устройству нам становится доступен список его сервисов (рис. 3). Вряд ли мы найдём что-то интересное в “Device information”, так что смело жмём в “Unknown service”.

Рис. 3 (Список сервисов устройства)

На скриншоте ниже (рис. 4) можно заметить самое главное для нас: запись в характеристику и её чтение.

Когда я решал задачу, описанную выше, то попробовал отправить в характеристику значение «2». В результате чего моя пара светодиодов начала гореть зелёным цветом. Почти успех. Теперь надо сделать тоже самое, но не через мобильное приложение, а через браузер.

Рис. 4 (Unknown характеристика)

Вот список данных, которые мы получили из приложения для продолжения выполнения задачи:

  1. Имя устройства.
  2. UID сервиса.
  3. UID характеристики.

Реализация в web

Прежде чем начать писать JavaScript-код, стоит оговорить несколько моментов:

  1. API является экспериментальным.
  2. Работает в Chrome и Samsung Internet.
  3. Необходимо подключение через HTTPS.
  4. Я не буду приводить примеры HTML и CSS-кода, так как в рамках данной статьи в них нет ничего интересного, но оставлю ссылку на репозиторий и сайт в конце статьи.
Читайте также:  Как сделать теплицу своими руками бюджетно

JavaScript

Работа с Web Bluetooth API построена на Promise. Ниже я буду приводить поэтапные примеры кода. Полный исходный код можно будет найти в репозитории, на который будет оставлена ссылка.

Для начала нам необходимо подключиться к устройству. Мы запрашиваем устройства и в фильтре передаём имя устройства и UID сервиса, с которыми будем работать. Если не указать сервис заранее, то в дальнейшем с ним нельзя будет взаимодействовать.

После того как мы нажмём на кнопку “Connect”, у нас откроется окно (рис. 5), в котором необходимо выбрать устройство и нажать на кнопку подключения.

Рис. 5 (Окно с доступным к подключению устройством)

При подключении возвращается Promise, содержащий “device”, к которому можно подключиться. Окей, давайте запишем его в переменную и создадим соединение.

После этого нам возвращается Promise, содержащий “server”. Затем мы у “server” запрашиваем “service”, передавая туда UID сервиса (который мы подсмотрели через приложение). Затем нам возвращается Promise, содержащий “service”, у которого мы запрашиваем “characteristic”, передавая её UID (который мы тоже подсмотрели через приложение).

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

В обработчиках кликов по кнопкам содержится следующий код:

В характеристику необходимо передавать массив uint8, поэтому для преобразования кода, который будет передан в неё, необходимо использовать Uint8Array.

По задумке, код 1 заставляет светодиоды мигать тремя цветами и затем гаснуть. Но как погасить светодиод, если в него был передан код 3 и светодиод всё ещё горит? Или включить другой цвет?

Я считываю значение, лежащее в характеристике, преобразую его с помощью getUint8 и, если код совпадает, отправляю любое невалидное значение (например 0). Если же значение валидное, то преобразую его в массив unit8 и записываю в характеристику.

Для окончательного решения поставленной задачи необходимо всего лишь научиться отключаться от устройства. У нас уже есть eventListener на кнопке “Disconnect”, в котором происходит отключение от bluetooth-устройства, снимаются eventListeners, кнопки управления прячутся, а в переменные записывается undefined.

Мы создали простую web-страницу, с помощью которой можно подключаться к bluetooth-устройству и управлять им. Как видите, это довольно просто. А устройства, которые вы можете собирать и управлять таким образом, ограничены лишь вашей фантазией!

Источник

Как сделать умный светильник своими руками. Лучше, чем Xiaomi в магазине

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

В данной нише представлено сразу несколько удачных моделей от Xiaomi и суб-брендов компании.

Модели имеют свои преимущества, но и недостатков у гаджетов хватает.

Обычно при хорошей начинке страдает программная часть. Разработчики не раскрывают весь потенциал железа, не добавляют красивые эффекты или полезные фишки.

Китайские производители выпустили уже несколько поколений умных ламп, а их возможности находятся на уровне первых моделей 7-летней давности.

Предлагаем собрать свой умный светильник с кучей настроек и крутых фишек. Попытаемся повторить популярный проект Алекса Гайвера.

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

Какие компоненты потребуются

Все необходимые компоненты можно разделить на электронную начинку и корпус. Всю необходимую электронику можно заказать на AliExpress:

▶ диодная матрица WS2812B 16х16 – от 886 рублей

▶ блок питания 5В/3А – 271 рубль

▶ модуль управления Wemos D1 mini от 124 рублей или NodeMcu v2/V3 – от 153 рублей

Корпус и элементы каркаса приобретаются или заказываются в любом строительном магазине.

▶ пластиковая труба и заглушка: диаметр 50мм – длина 250мм, диаметр 40мм – длина 100-150мм, заглушка диаметр 40мм. В любом строительном магазине все вместе обойдется примерно в 100 рублей.

Читайте также:  Как прошить мозги калина своими руками

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

Бюджет проектадо 2000 рублей. Это на 500 рублей дешевле самого доступного умного ночника от Xiaomi.

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

Как прошить умную начинку

На сайте проекта (в очередной раз говорим “Спасибо” Алексу Гайверу) есть несколько вариантов прошивки для будущей лампы:

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

Для начала загрузим прошивку в “мозги” лампы. Ими будет выступать одни из модулей Wemos D1 mini или NodeMcu v2/V3. Платы практически идентичные по своим возможностям и стоимости. Выбирайте любую, возможно, у вас остался такой модуль от других самодельных проектов.

1. На Mac или Windows скачиваем и устанавливаем среду разработки Arduino IDE.

2. Скачиваем и устанавливаем библиотеки Java Runtime Environment для работы приложения.

3. Скачиваем и устанавливаем кекст (драйвер) для работы с китайскими аналогами платы Arduino и производных от нее модулей. Для этого переходим на GitHub и загружаем последнюю версию.

4. Скачиваем архив проекта со страницы Алекса Гайвера и распаковываем его на компьютере.

5. В папке с проектом находим папку libraries и копируем ее содержимое в /Documents/Arduino/libraries.

6. В архиве находим файл прошивки GyverLamp_v1.5.5.ino (или более свежую версию) и открываем его в Arduino IDE.

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

8. В Arduino IDE переходим в меню Arduino – Preferences… и вставляем скопированную ссылку в поле Дополнительные ссылки для менеджера плат.

9. Открываем меню Инструменты – Плата – Менеджер плат… и устанавливаем плагин ESP8266 (рекомендуется выбрать версию 2.5.2).

10. В меню Инструменты – Плата выбираем используемую плату Wemos D1 mini или NodeMcu.

11. Если плата подключена к компьютеру и драйвер (кекст) установлен, в меню Инструменты – Порт увидите новое устройство. Его и нужно выбрать перед прошивкой.

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

Как спаять всю электронику


Тестовая сборка компонентов на макетной плате

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

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


Схема сборки компонентов при использовании Wemos mini

Схема предельно простая и понятная. Привожу оригинал с сайта автора.

Даже люди без опыта пайки без труда справятся со сборкой данного проекта.


Схема сборки компонентов при использовании NodeMCU

Не торопитесь припаивать матрицу, ведь идущие к ней проводки потребуется проложить через другие элементы конструкции.

Лучше всего предусмотреть несколько коннекторов, чтобы иметь возможность отсоединить матрицу для сборки или блок управления для перепрошивки.


Проверка работоспособности

Есть возможность сделать светильник без сенсорной кнопки, управлять им можно будет через приложение. В этом случае придется внести некоторые правки в прошивку. Специальные строки, которые нужно закомментировать помечены в каждом варианте ПО для лампы.

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

Когда электронная начинка будет готова, нужно будет собрать для нее корпус.

Как вы поняли, основа лампы – стеклянный или пластиковый плафон. Лучше всего подойдет матовое стекло с хорошим рассеивающим эффектом. Если плафон прозрачный или плохо рассеивает свет, можно приклеить на внутреннюю часть слой пекарской или пергаментной бумаги.

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

Читайте также:  Выдвижной стол под столешницей своими руками

Верхний торец трубы можно закрыть пробкой того-же диаметра или заглушкой меньшего размера. Все зависит от диаметра отверстия в используемом плафоне.


Важный момент. Для лучшей подачи питания следует соединить соответствующие контакты на обратной стороне матрицы

Если выберите плафон по ссылке выше, в него идеально впишется труба диаметром 40мм, в моем случае пришлось наматывать несколько слоев изоленты, чтобы пробка не болталась.

Для основания нет единого решения, все опять же будет зависеть от используемого плафона. У одних нижний торец может идеально закрыться заглушкой для трубы диаметром 100мм, у других найдется подходящая пластиковая емкость, из которой придется вырезать дно, а третьи просто напечатают заглушку на 3D-принтере.


Огромная самодельная диодная лампочка

Теперь нужно намотать матрицу на трубу, заранее просверлив в ней отверстие для проводов, и собрать конструкцию воедино. Сенсорную кнопку нужно будет приклеить термопистолетом ко внутренней стороне верхней пробки, аналогично можно связать основание с днищем.

Последним сложным решением будет подвод питания.

Можно просто припаять кабель от адаптера и проделать для него отверстие в днище. При наличии бормашины лучше просверлить отверстие в самом плафоне.


Просверлил отверстие под штекер питания при помощи бормашины

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

Первый запуск и настройка Wi-Fi

Я использовал прошивку от gunner47, для настройки других прошивок читайте их описание на странице разработчика.

1. Подаем питание на лампу, а на смартфоне находим появившуюся точку доступа LedLamp с паролем 31415926 (имя точки доступа и пароль настраивается в прошивке)

2. Подключаемся и ждем появление окна авторизации.

3. Выбираем пункт Configure WiFi и подключаемся к домашней сети.

4. После перезагрузки лампы находим ее в веб-интерфейсе или приложении своего роутера, чтобы узнать полученный IP-адрес.

5. Устанавливаем приложение Arduino Lamp из App Store (для других прошивок нужно использовать другие приложения).

6. Вводим IP-адрес лампы и подключаемся.

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

Что умеет такой умный светильник

Получившийся светильник имеет такие интересные фишки.

Во-первых, это яркий ночник с большим количеством настраиваемых эффектов. В зависимости от прошивки, в светильник можно загрузить до 60 эффектов. Каждый эффект имеет настройки яркости, скорости отображения и цвета.

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

В-третьих, в прошивке добавлен классный режим для комфортного пробуждения по утрам.

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

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

В-пятых, при использовании прошивки от Whilser ночник можно подключить к самым распространённым системам управления умным домом. Ночник можно интегрировать в Home Assistant, Apple Home Kit, или управлять устройством при помощи голосового ассистента Алиса.

При этом у гаджета несколько десятков параметров, которые поддаются точной настройке в прошивке. Можно менять абсолютно любую мелочь, которая вас не устраивает.

Если сравнивать с умными лампами от Xiaomi, то последние не имеют гибких настроек, не все умеют подключаться к Home Kit или умному дому от Яндекс из коробки и даже близко не дотягивают до самодельного ночника по количеству отображаемых эффектов.

На уровне железа лампы Xiaomi могут выдавать подобные варианты свечения, но программно этого не предусмотрено. В китайском ночнике можно лишь изменить цвет, яркость или включить циклическую смену оттенка.

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

Источник

Оцените статью