Умный датчик температуры

Первый полноценный проект: датчик температуры, который сам шлёт показания в облако и на телефон. Здесь сходится всё, что мы учили.

Умный термометр — классический «первый IoT-проект». Он собирает данные с датчика, обрабатывает на ESP32 и публикует по MQTT. Просто, но содержит всю цепочку IoT.

Соберём устройство, которое измеряет температуру и влажность и отправляет их в систему умного дома. Понадобятся: ESP32 (мозг и Wi-Fi), цифровой датчик (например DHT22 для температуры/влажности или DS18B20 для точной температуры) и питание. Датчик подключается к GPIO, ESP32 читает его, упаковывает данные и публикует по MQTT.

Архитектура повторяет цепочку из раздела про IoT: датчик измеряет, ESP32 обрабатывает, Wi-Fi передаёт, брокер раздаёт, приложение показывает. Это шаблон, на который лягут все будущие проекты.

Как это работает под капотом

   [DHT22] --GPIO--> [ESP32] --Wi-Fi--> [MQTT брокер] --> [телефон]
                        |
              publish home/livingroom/temp
              publish home/livingroom/humidity

Цикл работы: проснуться, прочитать датчик, проверить данные на адекватность, опубликовать в тему MQTT, при батарейном питании — уйти в deep sleep до следующего замера. Чтобы не слать мусор и не дёргать сеть зря, добавляют простую обработку: отбрасывают явно ошибочные значения и шлют обновление, только если показания заметно изменились. Отработаем эту логику в Python — «Посчитай сам ▶».

# Логика умного термометра: фильтрация и отправка по изменению
def process_reading(temp, last_sent, min_delta=0.5):
    # 1) проверка на адекватность (датчик иногда врёт)
    if temp < -40 or temp > 80:
        return last_sent, None       # отбрасываем мусор
    # 2) шлём только если изменилось заметно
    if last_sent is None or abs(temp - last_sent) >= min_delta:
        return temp, f"publish home/livingroom/temp = {temp}"
    return last_sent, None            # без изменений — молчим

last = None
stream = [22.1, 22.2, 22.4, 199.0, 22.9, 23.6, 23.6]  # сырые замеры
for t in stream:
    last, action = process_reading(t, last)
    if action:
        print(action)
    else:
        print(f"{t}: пропуск (мусор или без изменений)")

Запусти врезку. Видно, как значение 199 отбрасывается как ошибка датчика, а близкие показания не плодят лишних сообщений. Это бережёт батарею и не засоряет брокер.

На реальном ESP32 чтение датчика делает библиотека, а публикацию — MQTT-клиент, но логика фильтрации остаётся ровно такой. В систему умного дома (например Home Assistant) устройство встроится автоматически, подписавшись на нужные темы.

Частые ошибки

  • Слать каждое микроизменение. Брокер и батарея страдают; шли по существенной дельте.
  • Не проверять данные датчика. Дешёвые датчики иногда выдают выбросы — фильтруй их.
  • Опрашивать датчик слишком часто. Тому же DHT22 нужно время между замерами.

Best practices

  • Публикуй по изменению или по таймеру, а не в бесконечном цикле без пауз.
  • Используй retained-сообщения MQTT, чтобы приложение сразу видело последнее значение.
  • Для батарейного варианта обязательно используй deep sleep между замерами.

Где это встречается

Умный датчик температуры — это не игрушка, а основа множества реальных систем. На его базе строят термостаты, управляющие отоплением; мониторинг серверных и холодильников, где перегрев означает убытки; теплицы, где климат поддерживается автоматически; и личные метеостанции. Один и тот же шаблон «датчик → обработка → публикация» масштабируется от домашней поделки до промышленного решения.

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

Запомни главное

  • Умный термометр объединяет датчик, ESP32, Wi-Fi и MQTT.
  • Фильтр выбросов и отправка по изменению экономят батарею и трафик.
  • Ценность датчика — в истории и трендах, а не в одном замере.
  • Используй retained-сообщения, чтобы приложение сразу видело последнее значение.

Итог: умный термометр объединяет датчик, ESP32, Wi-Fi и MQTT в работающую цепочку, а простая обработка (фильтр выбросов и отправка по изменению) делает его экономным и надёжным. Дальше добавим управление — реле и умную розетку.

Проверьте себя
1. Зачем умный датчик фильтрует и шлёт данные только при заметном изменении?
AЧтобы греться сильнее
BЧтобы экономить батарею и не засорять брокера лишними сообщениями
CЧтобы данные были менее точными
DТак требует Wi-Fi
2. Какой компонент в проекте отвечает за обработку данных и выход в сеть?
AДатчик DHT22
BESP32
CMQTT-брокер
DРезистор