Будильник-рассвет: DS3231 будит светом NeoPixel
За полчаса до звонка лента медленно разгорается от тёмно-красного к тёплому белому — просыпаться на свет легче, чем на звук. В показательном режиме будильник ставится на 20 секунд после включения, а рассвет длится 15.
Что на схеме
Плата ESP32 DevKit v1, к ней подключены:
- Часы реального времени DS3231 (I2C) —
rtc1 - Лента NeoPixel (WS2812B) —
np1, 8 светодиодов - Пьезоизлучатель —
bz1
Задействованы выводы платы: 3V3, GND, D21, D22, D5, D25. Всего соединений на схеме: 9.
Библиотеки
Пример собирается с библиотеками:
- RTClib
- Adafruit BusIO
- Adafruit NeoPixel
Они уже установлены на сервере сборки — отмечать их в проекте вручную не нужно, список приезжает вместе с примером.
Как это устроено в коде
Основное, чем пользуется скетч:
RTClib— работа с часами реального времениAdafruit_NeoPixel— адресная лента: цвет каждого светодиода отдельноDS3231— точные часы с собственным термокомпенсированным генераторомSerial.begin()— открывает монитор порта на заданной скоростиledcSetup()— настраивает канал аппаратного ШИМ: частота и разрядностьledcAttachPin()— привязывает вывод к каналу ШИМSerial.println()— печатает строку в монитор портаdelay()— пауза, на время которой ядро занято ожиданиемSerial.printf()— печатает в монитор порта с форматированиемledcWriteTone()— задаёт частоту ШИМ, то есть высоту звукаmillis()— миллисекунды с запуска: на них строят работу без остановки
В скетче 73 строки; свои функции: skyColor(), if(); подключено заголовков: 2. Сам скетч открыт на соседней вкладке — его можно менять и запускать заново.
Что попробовать изменить
- Поменяйте период в константе и посмотрите на анализаторе, как меняется картина на выводе.
- Поменяйте частоту и разрядность ШИМ: на слух и на глаз разница заметна не там, где её ждёшь.
- Добавьте свои
Serial.println()в интересных местах — монитор порта здесь и есть отладчик. - Перенесите деталь на другой вывод — на схеме и в коде — и убедитесь, что пример работает так же.
Смотрите также
- Часы: поставить время и читать — Первое, с чего начинается любой скетч с часами: проверить, шли ли они, и поставить время только если нет.
- Настольные часы на OLED — Часы и экран на одной шине I2C: два устройства, два провода. Экран перерисовывается только когда сменилась секунда.
- Будильник: раз в минуту — Будильник внутри микросхемы: она сама сравнивает время и поднимает признак. Плата может в это время спать.
- Расписание: свет по часам — Включать нагрузку в заданные часы. Проверка написана так, чтобы работать и на промежутке через полночь.
- Температура из часов — У DS3231 внутри свой термометр — им микросхема поправляет ход кварца. Его можно читать и просто так.
- Журнал на карту с отметкой времени — Часы и карта вместе: каждая запись получает время, а не «столько-то миллисекунд с включения».
Сборка ещё не запускалась.
Печатайте в Serial числа — они станут графиком.
Serial.println(t); — один ряд,
Serial.printf("t:%.1f h:%.1f\n", t, h); — два с подписями.
Формат тот же, что понимает плоттер Arduino IDE.