Мини-кейс 2: Умная лампа
Умная лампа - RGB-матрица с слайдерами выбора оттенка, насыщенности и яркости.
Перед выполнением прочтите
Информация про модуль RGB LED матрицы от Амперки: http://wiki.amperka.ru/%D0%BF%D1%80%D0%BE%D0%B4%D1%83%D0%BA%D1%82%D1%8B:troyka-rgb-matrix
Информация о библиотеке Adafruit_NeoPixel
:
https://learn.adafruit.com/adafruit-neopixel-uberguide/arduino-library-use
Создание мини-проекта
Сделаем мини-проект с RGB модулем, который управляется через интерфейс RainMaker. Представим, что наш RGB модуль будет умной лампочкой, которая может менять цвет.
Нужно собрать устройство. К
GPIO 17
подключить модуль RGB матрицы Troyka контактомD1
. Распиновка платы на родительской странице "О ESP32". Питание для него от пина3.3v
.Создаём новый файл в Arduino IDE с кодом:
Изучите код, прочитайте комментарии к коду!
Добавьте библиотеку
Adafruit_NeoPixel
. Вы можете это сделать через пункт"Управление библиотками"
или скачать из интернета и добавить как zip библиотеку.В инструментах вы должны выбрать:
Плата: ESP32 Arduino > ESP32 Dev Module;
Partition Scheme: RainMaker.
И выберите порт платы. Загрузите прошивку. Никаких пинов для перевода контроллера в режим прошивки зажимать не нужно.
Далее дайдите в монитор порта, установить скорость
115200
. Выведется информация о том, как подключить плату к сервису. Там должна быть строка с QR-кодом и ссылка. Скопируйте ссылку и вставьте в адресную строку браузера.На этом этапе могут возникнуть две известные проблемы...
Плата пишет что-то на английском, но не выдаёт ссылку, тогда нужно сбросить настройки WI-FI, зажав
BOOT
на 3 секунды и отпустив. * Если плата уже была до этого настроена, тогда она будет выводить после прошивки текст на английском, QR-код уже не выведется. Это нормально, но пользоваться дальше можно!Плата пишет всякие кракозябры, хотя скорость последовательного порта выставлена верно. Вам нужно сбросить настройки прошивки. Для этого зажмите кнопку
BOOT
на плате на 10 секунд. По истечению времени отпустите, плата перезапустит код и в монитор порта текст станет читабельный и выведется ссылка.
Откройте приложение
RainMaker
. В приложении RainMaker нажать на кнопку с иконкойПЛЮС
, запуститься сканер QR-кода.Отсканировать сканером QR-код с страницы с браузера.
В приложении
RainMaker
выбрать точку доступа для устройства, дать пароль и подождать подключения и всяких других настроек.На главной странице
RainMaker
появится или обновится ваш девайс.
Проблема с настрокой точки доступа:
Если необходимо сменить WI-FI точку для устройства, но в приложении не отображает список доступных точек, тогда необходимо на экране нажать на "Join Other Network
" и ввести название точки и пароль к ней самостоятельно.
Дополнительное задание:
Необходимо сделать, чтобы кнопка
BOOT
на плате отключала/включала (меняла состояние) нашу "Умную лампочку". Пример можно подсмотреть в прошлом мини-кейсе. * Важное замечание о том, что когда меняете состояние на устройстве, то ещё нужно в сервисе RainMaker также поменять состояние:Установить для девайса тип "Lightbulb" с картинкой, на которой изображена лампочка. * Подсказка, UI типы вы найдёте тут.
Необходимо для слайдера
Hue
поменять UI типHue Slider
наHue Circle
.Для параметра насыщенности и яркости поменять тип параметра на более подходящий -
Saturarion Slider
иBrightness Slider
.Сделать ещё вариант заливки матрицы с UI типом Dropdown (выпадающий список). Пример использования
Dropdown
есть в стандартном примереRMakerCustomAirCooler
. Первый режим (допустим с названиемFill
) дожен будет у вас закрашивать все светодиоды моментально как это было изначально, а второй (с именемColorWipe
) с помощью функцииColorWipe
будет закрашивать матрицу постепенно. Посмотрите какие функции доступны в библиотеке для управление матрицой.*Подсказка реализации:
Добавьте глобальную переменную modes с определёнными названиями режимов:
Добавьте define со значением режима по умолчанию, например равную 1:
А также добавьте, глобальную переменную, в которую будете записывать значение режима при выборе:
...
Добавьте в функцию
setup
новый параметр:...
В функции - обработчике изменений
write_callback
необходимо добавить обработку этого нового параметра, что если полученное значение == "Fill", тогда установить певый режим, иначе, если значение равно "ColorWipe, тогда установить второй режим:...
В местах кода, где необходимо управлять матрицой (включать/выключать или изменять параметры) необходимо написать логическое условие какой режим будет выполнятся... первый (изначальный) или второй (новый - функция ColorWipe). В силу того, что эти строки будут повторяться, то советую оптимизировать код, создав одну функцию, которую будете вызывать в необходимых местах кода.
Last updated