Умный ночник по MQTT: цвет из телефона, яркость по фоторезистору
Цвет присылают сообщением в pinport/night/color («#ff8800»), яркость ночник решает сам: чем темнее в комнате, тем ярче, а днём гаснет. Освещённость и состояние он публикует сам. Публиковать — во вкладке «MQTT», освещённость — в свойствах фоторезистора.
Что на схеме
Плата ESP32 DevKit v1, к ней подключены:
- Фоторезистор —
ldr1, освещённость 20 лк - Лента NeoPixel (WS2812B) —
np1, 8 светодиодов
Задействованы выводы платы: 3V3, GND, D34, D5. Всего соединений на схеме: 6.
Библиотеки
Пример собирается с библиотеками:
- WiFi
- PubSubClient
- Adafruit NeoPixel
Они уже установлены на сервере сборки — отмечать их в проекте вручную не нужно, список приезжает вместе с примером.
Как это устроено в коде
Основное, чем пользуется скетч:
Adafruit_NeoPixel— адресная лента: цвет каждого светодиода отдельноWiFiClient— TCP-соединение с серверомSerial.printf()— печатает в монитор порта с форматированиемSerial.begin()— открывает монитор порта на заданной скоростиWiFi.begin()— подключается к точке доступа виртуального Wi-Fidelay()— пауза, на время которой ядро занято ожиданиемmillis()— миллисекунды с запуска: на них строят работу без остановкиSerial.println()— печатает строку в монитор портаanalogRead()— измеряет напряжение на выводе через АЦПmap()— пересчёт диапазона: сырые отсчёты в понятные единицы
В скетче 87 строк; свои функции: publishState(), onMessage(); подключено заголовков: 3. Сам скетч открыт на соседней вкладке — его можно менять и запускать заново.
Что попробовать изменить
- Поменяйте период в константе и посмотрите на анализаторе, как меняется картина на выводе.
- Покрутите движок детали прямо во время работы — значение на входе меняется на лету, останавливать эмуляцию не нужно.
- Проверьте, что делает скетч, когда сеть недоступна: обрыв связи — обычное состояние, а не исключение.
- Добавьте свои
Serial.println()в интересных местах — монитор порта здесь и есть отладчик.
Смотрите также
- WiFi: поиск сетей — Список точек доступа с уровнем сигнала и типом защиты. Проверка того, что радио работает.
- WiFi: подключение с переподключением — Соединение может пропасть в любой момент. Проверка состояния в loop() — не роскошь.
- HTTP-запрос — Клиент, код ответа и тело. Ответ читается целиком в строку — для больших страниц так делать не надо.
- Веб-сервер: управление выводом — Страница с двумя кнопками и обработчики маршрутов. Кнопка «Веб-интерфейс» над схемой открывает её в отдельном окне — как…
- Веб-сервер: JSON с показаниями — Машиночитаемый ответ вместо страницы. Откройте «Веб-интерфейс» и наберите /data — отсюда данные забирает что угодно, от…
- Своя точка доступа — Без роутера: прибор сам раздаёт сеть и отвечает по адресу 192.168.4.1. Так делают первичную настройку.
Сборка ещё не запускалась.
Печатайте в Serial числа — они станут графиком.
Serial.println(t); — один ряд,
Serial.printf("t:%.1f h:%.1f\n", t, h); — два с подписями.
Формат тот же, что понимает плоттер Arduino IDE.