Оглавление:

Флаг почтового ящика с питанием от MQTT и Wi-Fi: 7 шагов (с изображениями)
Флаг почтового ящика с питанием от MQTT и Wi-Fi: 7 шагов (с изображениями)

Видео: Флаг почтового ящика с питанием от MQTT и Wi-Fi: 7 шагов (с изображениями)

Видео: Флаг почтового ящика с питанием от MQTT и Wi-Fi: 7 шагов (с изображениями)
Видео: ESP8266 борьба с зависанием 2024, Ноябрь
Anonim
Флаг почтового ящика с питанием от MQTT и Wi-Fi
Флаг почтового ящика с питанием от MQTT и Wi-Fi

Примечание: обновлена новая прошивка, схема и советы программисту

Через пару лет я приступил к собственному проекту домашней автоматизации. Он начался с создания сборки передатчика 433 МГц, управляемого сервером, с Arduino для переключения множества дешевых удаленных коммутаторов на базе PT2262. Позже я добавил к своей метеостанции приемник на базе Arduino, подключил управляющий контакт зарядного устройства электромобиля и так далее. Вещи становились все более и более переплетенными (и сложными!). Итак, несколько месяцев назад я решил стандартизировать все на основе MQTT для обмена сообщениями, Node-RED для автоматизации (оба работают на одном Raspberry Pi B +) и MariaDb для ведения журнала (работает на моем Synology NAS). Позже я перенес на NAS брокера MQTT (Mosquitto) и Node-RED.

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

Шаг 1. Схема, предварительные условия и детали

Контур

На высоком уровне почтовый ящик при открытии должен отправить уникальное сообщение MQTT брокеру, чтобы подписчики на эту тему были проинформированы. Node-RED тоже подписывается и выполняет некоторую автоматизацию, в этом случае отправляя электронное письмо и / или push-сообщение на мой телефон.

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

Предварительные требования

Я предполагаю, что у вас скромные навыки пайки, вы немного поработали с Arduino IDE и установили платы ESP8266 с помощью Boards Manager. Вам также понадобится последовательный USB-адаптер на 3,3 В для программирования микроконтроллера.

Я также предполагаю, что у вас есть брокер MQTT и сервер Node-RED. Если нет, то в Интернете есть много инструкций, но я бы посоветовал выбрать ленивый путь и использовать отличный скрипт установки Питера Скаргилла, если вы хотите запустить его на любом Pi или Ubuntu, или использовать образ Андреаса Шпиона для Pi Zero W (ссылки в описании этого видео), что сэкономит вам несколько часов просмотра запущенных сценариев установки. В качестве альтернативы вы можете настроить прошивку для отправки электронного письма напрямую, но при этом вы потеряете большую гибкость.

Запчасти

  • 1 закрытый, 3 батарейных отсека AA
  • 2 батарейки АА
  • 1 модуль ESP8266. Для этого проекта я использовал ESP-01.
  • 1 микровыключатель
  • 1 резистор 47 кОм
  • 1 резистор 4М7
  • 1 конденсатор 2,2 мкФ
  • 1 тонкая пластиковая трубка. Я использовал ручку
  • 1 толстая длинная спичка или палочка для леденцов. Он должен легко помещаться и перемещаться в пластиковой трубке.

Шаг 2: Аппаратное обеспечение: коробка, переключатель и проводка

Аппаратное обеспечение: коробка, переключатель и проводка
Аппаратное обеспечение: коробка, переключатель и проводка
Аппаратное обеспечение: коробка, переключатель и проводка
Аппаратное обеспечение: коробка, переключатель и проводка
Аппаратное обеспечение: коробка, переключатель и проводка
Аппаратное обеспечение: коробка, переключатель и проводка

Я начал со старого батарейного отсека от несуществующего рождественского украшения. Он был рассчитан на три батарейки размера AA. Поскольку ESP8266 будет нормально работать от 3 вольт, я мог бы использовать две батареи и использовать третью позицию для микроконтроллера. Обратите внимание на то, что в коробке было небольшое дополнительное отделение, которое я мог использовать для переключателя активации. Я использовал очень распространенный тип переключателя, показанный на фотографиях, но удалил пружину, которая фиксирует его во включенном или выключенном положении. Я припаял два тонких провода к контактам NC и приклеил их в коробку с помощью крошечной капли суперклея.

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

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

Шаг 3: Аппаратное обеспечение: ESP-01

Оборудование: ESP-01
Оборудование: ESP-01
Оборудование: ESP-01
Оборудование: ESP-01
Оборудование: ESP-01
Оборудование: ESP-01

Учитывая требование WiFi, весь проект кричит ESP8266. Этот небольшой контроллер Wi-Fi стал любимой рабочей лошадкой сообщества мастеров в качестве модуля, который можно купить по цене менее 2,50 евро и который объединяет полный стек Wi-Fi и TCP / IP с более чем достаточной емкостью для запуска ваших собственных программ. IDE Arduino (или Atom с плагином PlatformIO) полностью поддерживает ESP8266.

Я обычно брал ESP-12F, но у меня была крошечная плата ESP-01, которая идеально подходила для работы и хорошо помещалась в батарейный отсек. Проблема только в том, что прошить прошивку в ESP-01 довольно сложно. Подробнее об этом в следующем шаге. Необходимо сделать одно изменение: вы должны удалить красный светодиодный индикатор питания с платы, так как он постоянно потребляет 3 мА. После снятия светодиода модуль потребляет всего несколько десятков мкА в режиме глубокого сна, благодаря чему он проработает более года от двух качественных батареек AA.

Оказалось, что я мог использовать две полоски с 4-контактными гнездовыми разъемами и припаять несколько дополнительных компонентов в свободной форме, чтобы я мог удалить ESP-01 для обновления прошивки, пока он все еще помещался в третий батарейный отсек.

Очень важно правильно подключить ESP. Используя приведенную выше шпаргалку, подключите ее следующим образом.

  1. Плюс батареи к Vcc (D2), CH_PD (B2), RXD (D1), GPIO0 (C1), GPIO2 (B1) и резистору 47 кОм.
  2. Минус батареи на GND (A1) и один провод выключателя.
  3. Другой провод переключателя к конденсатору 100 нФ и резистору 4М7.
  4. Открытые концы обоих резисторов и конденсатора к RST (C2).
  5. TXD (A2) может оставаться неподключенным.

Изменить: мне пришлось заменить ESP-01, потому что я сделал глупую ошибку и уничтожил его. Оказалось, что, к моему удивлению, новый ESP-01 не сбрасывается с оригинальным конденсатором 100 нФ. Наверное, у него немного другой дизайн. Я заменил его на 2,2 мкФ и теперь он снова работает

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

Шаг 4: Программирование ESP-01

Программирование ESP-01
Программирование ESP-01
Программирование ESP-01
Программирование ESP-01
Программирование ESP-01
Программирование ESP-01

Чтобы прошить прошивку на ESP-01, вы можете либо собрать небольшую установку, либо купить (почти) полный программатор примерно за 1 евро.

Аппаратная установка для программирования

Постройте небольшую буровую установку с двумя женскими головками для ESP-01. Кроме того, вам понадобится последовательный USB-модуль, способный обеспечить 3,3 В. Обратите внимание, что микросхема ESP8266 не усилена на 5 В, поэтому ошибка здесь может убить ваш модуль. В любом случае, снова используя шпаргалку, подключите свою установку следующим образом:

  1. 3,3 В от модуля USBSerial к Vcc, CH_PD, RST и GPIO2.
  2. GND модуля USBSerial к GND и GPIO0.
  3. TXD модуля USBSerial к RXD.
  4. RDX модуля USBSerial в TXD.

Программист предварительной сборки

Каким бы увлекательным ни было создание собственных вещей, более ленивый подход - получить интерфейс ESP-01-to-serial с вашего любимого аукционного сайта, см. Изображение выше. Это намного проще, компактнее и надежнее, чем буровая установка. Однако некоторые из них не программисты, а просто последовательные интерфейсы. Вам нужно припаять перемычку между GND (вывод A1) и GPIO0 (вывод C1) на задней стороне интерфейса, см. Второй рисунок. Обратите внимание, что ESP-01 следует подключать так, чтобы антенна была обращена к разъему USB, а не наоборот!

Примечание: они также существуют с переключателем, см. Третью картинку, очень красиво.

Загрузите прошивку

Предполагая, что IDE Arduino 1.8.3 или новее, выберите «Инструменты»> «Плата» и выберите имеющуюся плату. Для ESP-01, как я использовал, выберите «Generic ESP8266 Module» и установите следующие параметры (это должны быть все значения по умолчанию):

  1. Режим вспышки: DIO
  2. Частота вспышки: 40 МГц
  3. Частота процессора: 80 МГц
  4. Размер флэш-памяти: 512 КБ (64 КБ SPIFFS) Примечание: если вы используете черную плату ESP-01, выберите 1 МБ (64 КБ SPIFFS)
  5. Порт отладки: отключен
  6. Уровень отладки: Нет
  7. Метод сброса: ck
  8. Скорость загрузки 115200
  9. Порт: выберите порт, который подключен к последовательному интерфейсу USB. Для моего ПК с Ubuntu это был / dev / ttyUSB0

Подключите установку / программатор, загрузите Sketch, который вы можете найти здесь https://gitlab.com/jeroenmeijer/Mailbox.git. Укажите свои учетные данные брокера WiFi и MQTT, а также конфигурацию IP в config.h и выберите «Загрузить».

Шаг 5: Собираем все

Собираем все
Собираем все

Я просверлил отверстие для пластиковой трубки во внутренней крышке почтового ящика как можно ближе к петле, а затем приклеил батарейный отсек к нижней стороне этой крышки горячим клеем. Затем я использовал толстую спичку в качестве поршня. Я использовал ножницы, чтобы отрезать спичку до такой длины, чтобы выключатель открывался, если внешняя крышка была закрыта. Я проверил подключение, открыв крышку при запуске mosquitto_sub для отслеживания сообщений MQTT (замените mqttbroker, пользователя и пароль своей конфигурацией MQTT):

$ mosquitto_sub -h mqttbroker -v -t "stat / #" -u user -P пароль

Примерно через шесть секунд после открытия внешней крышки публикуется следующее сообщение MQTT. Это время используется для пробуждения микроконтроллера и установления соединения Wi-Fi и брокера.

stat / mailbox / trigger {"vcc": 3050, "flap": true, "prev": 0, "RSSI": 29, "version": "005"}

За это время микроконтроллер потреблял примерно 70 мА. Когда закончите, он переходит в глубокий сон, и в моем случае он потреблял менее 20 мкА. "flap" всегда истинно, "vcc" указывает напряжение батареи в мВ, а "prev" должно быть 0. Если это 1 или 2, это означает, что почтовый ящик не смог отправить сообщение ранее, либо потому, что не смог подключиться к Wi-Fi или потому, что ему не удалось подключиться к брокеру MQTT. «RSSI» - это мощность сигнала WiFi. Оба очень удобны для диагностики проблем.

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

Прошивка также может обновляться по воздуху (OTA), но это выходит за рамки данной инструкции. Для тех, кому интересно, конфигурация OTA также находится в config.h.

Шаг 6. Использование Node-RED для обработки сообщения MQTT

Использование Node-RED для обработки сообщения MQTT
Использование Node-RED для обработки сообщения MQTT

Наконец, я создал простой поток в Node-RED. Первый узел подписывается на тему почтового ящика (статистика / почтовый ящик / триггер). Когда сообщение получено, второй узел форматирует электронное письмо *). Последний узел отправляет его на мой адрес Gmail, используя Gmail в качестве SMTP-сервера. Мой телефон сообщит мне о новой почте.

Я добавил поток Node-RED во фрагмент кода gitlab, чтобы вы могли импортировать его в свои потоки Node-RED.

Конечно, вы можете добавить еще несколько узлов, например, для регистрации событий почтового ящика в MariaDb или SqlLite или создать дополнительные сигналы тревоги, когда напряжение батареи опускается ниже 2,7 В.

Удачной почтовой охоты!

*) См. Следующую страницу, теперь я использую PushBullet вместо электронной почты.

Шаг 7: размышления

Всегда есть такое чувство, что все можно было сделать лучше.

Выключатель

Я бы предпочел использовать (супер) магнит и язычковый контакт, а не несколько неуклюжий поршневой подход. На то было две причины. Во-первых, у меня не было возможности выполнить эту работу с замыканием контакта, когда коробка была открыта, а ее всегда закрытый означал, что всегда будет течь небольшой ток. Оглядываясь назад, можно сказать, что ток менее 1 мкА через резистор 4M7 не имел бы большого значения с точки зрения срока службы батареи. Другой был более практичным. Я составил этот проект в субботу и написал программное обеспечение, построив его в воскресенье из того, что лежало вокруг. У меня просто не было тростникового контакта в ящике для хлама.

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

Сообщение при опорожнении

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

Обмен сообщениями

Отправка электронной почты - довольно эффективный, но грубый способ выставить предупреждение. Более элегантным способом было бы приложение для телефона, но я не нашел приложения панели управления Android MQTT, которое можно было бы настроить для запуска предупреждения операционной системы при получении определенного сообщения. Если он есть, пожалуйста, добавляйте в комментарии. **)

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

**) Сейчас я использую PushBullet для push-сообщений отдельно от панели инструментов MQTT. Крошечный интерфейс Node-RED low к API можно найти здесь. Убедитесь, что вы указали токен доступа в узле «Prepare for pushbullet» и свой адрес электронной почты для резервных целей в узле «Retry».

Рекомендуемые: