Съдържание:

Флаг на MQTT и Wifi задвижвана пощенска кутия: 7 стъпки (със снимки)
Флаг на MQTT и Wifi задвижвана пощенска кутия: 7 стъпки (със снимки)

Видео: Флаг на MQTT и Wifi задвижвана пощенска кутия: 7 стъпки (със снимки)

Видео: Флаг на MQTT и Wifi задвижвана пощенска кутия: 7 стъпки (със снимки)
Видео: Управление через интернет из любой точки мира. Протокол MQTT 2024, Ноември
Anonim
Флаг на MQTT и Wifi задвижвана пощенска кутия
Флаг на MQTT и Wifi задвижвана пощенска кутия

Забележка: актуализиран с нов фърмуер, схема и съвети за програмист

Няколко години започнах собствен проект за домашна автоматизация. Той започна с изграждането на управляван от сървър 433 MHz предавател с Arduino за превключване на много евтини PT2262 базирани дистанционни превключватели. По -късно добавих приемник, базиран на Arduino, за моята метеорологична станция, свързах контролния контакт на моето EV зарядно устройство и т.н. Нещата все повече се преплитаха (и се усложняваха!). И така, преди няколко месеца реших да стандартизирам всичко на базата на MQTT за съобщения, Node-RED за автоматизация (и двете работят на един Raspberry Pi B+) и MariaDb за регистриране (работи на моя Synology NAS). По-късно преместих брокера MQTT (Mosquitto) и Node-RED към NAS също.

Тази инструкция описва глупав проект за забавление, свързващ моята пощенска кутия, монтирана на улицата, в тази домашна инфраструктура. Идеята е, че ако някой отвори пощенската кутия, монтирана на оградата, на около 10 метра от входната врата, той ми сигнализира по телефона и евентуално други устройства.

Стъпка 1: Очертание, предпоставки и части

Контур

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

Пощенската кутия трябва да работи на батерии и да работи поне една година и трябва да го направи с помощта на моята WiFi мрежа. Тъй като събуждането на микроконтролер и свързването към WiFi мрежа може да отнеме няколко секунди, не успях да използвам превключвателя за активиране, за да прекъсна захранването. Вместо това на процесора трябва да бъде позволено да завърши работата си, след като капакът на пощенската кутия вече е затворен.

Предварителни условия

Предполагам, че имате скромни умения за запояване, работили сте малко с Arduino IDE и сте инсталирали платките ESP8266 с помощта на Boards Manager. Също така трябва да имате 3.3-волтов USB сериен адаптер, за да програмирате микроконтролера.

Предполагам също, че имате работещ MQTT брокер и Node-RED сървър. Ако не, има много инструкции в Интернет, но бих посъветвал да поемете по мързеливия маршрут и да използвате отличния скрипт за инсталиране на Питър Скаргил, ако искате да го изпълните на всеки Pi или Ubuntu, или да използвате изображението на Andreas Spiess за Pi Zero W (връзки в описанието на това видео), което ще ви спести няколко часа гледане на инсталационни скриптове. Като алтернатива можете да накарате фърмуера да изпраща имейл директно, но ще загубите много гъвкавост, като го направите.

Части

  • 1 затворена, 3 кутия за батерии AA
  • 2 батерии тип АА
  • 1 модул ESP8266. За този проект използвах ESP-01
  • 1 микропревключвател
  • 1 47K резистор
  • 1 резистор 4M7
  • 1 2.2uF кондензатор
  • 1 тънка пластмасова тръба. Използвах химикалка
  • 1 дебел, дълъг кибрит или пръчка за близалки. Тя трябва лесно да се побере и да се движи в пластмасовата тръба

Стъпка 2: Хардуер: кутията, превключвателят и окабеляването

Хардуер: кутията, превключвателят и окабеляването
Хардуер: кутията, превключвателят и окабеляването
Хардуер: кутията, превключвателят и окабеляването
Хардуер: кутията, превключвателят и окабеляването
Хардуер: кутията, превключвателят и окабеляването
Хардуер: кутията, превключвателят и окабеляването

Започнах със стара кутия за батерии от несъществуваща коледна украса. Той е проектиран за три батерии с размер AA. Тъй като ESP8266 ще работи добре на 3 волта, бих могъл да използвам две батерии и да използвам третата позиция за микроконтролера. Забележете как кутията имаше малко допълнително отделение, което можех да използвам за превключвателя за активиране. Използвах много често срещан тип превключвател, показан на снимките, но премахнах пружината, която го заключва в положение включено или изключено. Запоях два тънки проводника към NC контактите и го залепих в кутията с мъничка капка супер лепило.

След това пробих дупка в горния капак, съответстваща на пластмасова тръба, взета от химикалка. Дупката се подравнява точно с превключвателя и води бутало, направено от дебела клечка за кибрит.

Накрая запоявах още два проводника към контактите на батерията и насочих всичките четири проводника до позицията на третата батерия, където щеше да бъде микроконтролерът.

Стъпка 3: Хардуер: ESP-01

Хардуер: ESP-01
Хардуер: ESP-01
Хардуер: ESP-01
Хардуер: ESP-01
Хардуер: ESP-01
Хардуер: ESP-01

Като се има предвид изискването за WiFi, целият проект вика ESP8266. Този малък WiFi контролер се превърна в любимото работно място на общността на майсторство като модул, който може да бъде закупен под 2,50 евро и интегрира пълен WiFi и TCP/IP стек, с повече от достатъчно капацитет, за да стартирате свои собствени програми. Arduino IDE (или Atom с приставката PlatformIO) напълно поддържа ESP8266.

Обикновено бих взел ESP-12F, но имах малка дъска ESP-01, която беше идеална за работата и се побира добре в кутията за батерии. Единственият проблем е, че е доста сложно да мига фърмуера в ESP-01. Повече за това в следващата стъпка. Трябва да направите една модификация: Трябва да премахнете червения светодиод за захранване от платката, тъй като той непрекъснато черпи 3mA. С извадения светодиод, модулът използва само няколко десетки uA в режим на дълбок сън, което ще му позволи да издържи повече от година с две качествени батерии AA.

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

Много е важно правилно да свържете ESP. Използвайки горния мамят, свържете го, както следва.

  1. Батерия плюс към Vcc (D2), CH_PD (B2), RXD (D1), GPIO0 (C1), GPIO2 (B1) и 47K резистор.
  2. Минус на батерията към GND (A1) и един проводник на превключвателя.
  3. Другият проводник на превключвателя към 100nF кондензатор и 4M7 резистор.
  4. Отворените краища на резисторите и кондензатора към RST (C2).
  5. TXD (A2) може да остане несвързан.

Редактиране: Трябваше да сменя ESP-01, защото направих глупава грешка и я унищожих. Оказа се, че за моя изненада новият ESP-01 не се нулира с оригиналния 100nF кондензатор. Вероятно има малко по -различен дизайн. Смених го с 2.2 uF и сега работи отново

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

Стъпка 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.3V от USB серийния модул към Vcc, CH_PD, RST и GPIO2.
  2. GND на USB серийния модул към GND и GPIO0.
  3. TXD на USB серийния модул към RXD.
  4. RDX на USB серийния модул към TXD.

Програмист за предварително изграждане

Колкото и забавно да създавате свои собствени неща, по-мързеливият подход е да получите ESP-01 към сериен интерфейс от любимия си сайт за търгове, вижте снимката по-горе. Това е много по -лесно, по -компактно и по -надеждно от платформата. Някои от тях обаче не са програмисти, а само серийни интерфейси. Трябва да запоите теленен мост между GND (щифт A1) и GPIO0 (щифт C1) на гърба на интерфейса, вижте втората снимка. Обърнете внимание, че ESP-01 трябва да бъде включен с антената обърната към USB щепсела, а не обратното!

Забележка: те също съществуват с превключвател, вижте третата снимка, много хубаво.

Заредете фърмуера

Ако приемем, че IDE на Arduino е 1.8.3 или по -нова, изберете Инструменти> Борд и изберете дъската, която имате. За ESP-01, който използвах, изберете „Generic ESP8266 Module“и задайте следните опции (това трябва да са всички настройки по подразбиране):

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

Свържете платформата/програмиста, заредете скицата, която можете да намерите тук 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 потребител -P парола

Приблизително шест секунди след отваряне на външния капак се публикува следното съобщение MQTT. Времето се използва за събуждане на микроконтролера и установяване на WiFi и брокерска връзка.

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

През това време микроконтролерът използва приблизително 70 mA. Когато приключи, той заспива дълбоко и в моя случай е използвал по -малко от 20uA. "flap" винаги е вярно, "vcc" посочва напрежението на батерията в mV и "prev" трябва да бъде 0. Ако е 1 или 2, това означава, че пощенската кутия не е била в състояние да изпрати съобщение по -рано, защото не може да се свърже с WiFi или защото не може да се свърже с брокера MQTT. "RSSI" е силата на WiFi сигнала. И двете са много удобни за диагностициране на проблеми.

Добра идея е да следите напрежението на батерията в продължение на няколко дни, за да сте сигурни, че устройството работи по предназначение и не изтощава батерията си по някаква причина.

Фърмуерът също може да се актуализира по въздуха (OTA), но това е малко извън обхвата на тази инструкция. За тези, които се интересуват, OTA конфигурацията също е в config.h.

Стъпка 6: Използване на Node-RED за действие върху съобщението MQTT

Използване на Node-RED за действие върху MQTT съобщението
Използване на Node-RED за действие върху MQTT съобщението

Накрая създадох прост поток в Node-RED. Първият възел се абонира за темата за пощенската кутия (stat/postbox/trigger). Когато се получи съобщение, вторият възел форматира имейл *). Последният възел го изпраща на моя gmail адрес, използвайки gmail като SMTP сървър. След това телефонът ми ще ме предупреди за нова поща.

Добавих потока Node-RED към фрагмент от gitlab, така че можете да го импортирате във вашите потоци от Node-RED.

Разбира се, можете да добавите още някои възли, например да регистрирате събитията от пощенската кутия в MariaDb или SqlLite, или да създадете допълнителни аларми, когато напрежението на батерията падне под 2,7 волта.

Честит лов на поща!

*) Вижте следващата страница, сега използвам PushBullet вместо имейл.

Стъпка 7: Последващи мисли

Винаги има чувството, че нещата биха могли да се направят по -добре.

Превключване

Бих предпочел да използвам (супер) магнит и тръстиков контакт вместо донякъде тромавия подход на буталото. Имаше две причини. Едното е, че нямаше как да направя тази работа със затваряне на контакта, когато кутията беше отворена, а това, че тя винаги беше затворена, означаваше, че винаги ще тече малък ток. В ретроспекция, по -малкото от 1uA, преминаващо през резистора 4M7, не би било голяма работа по отношение на живота на батерията. Другият беше по -практичен. Измислих този проект в събота и написах софтуера, изградих всичко в неделя от това, което се носеше наоколо. Просто нямах контакт с тръстика в боклука.

Забележка: както коментира diy_bloke, тръстиковите контакти имат склонност да се залепват, когато се намагнетизират за дълго време, така че може би буталото изобщо не беше толкова лоша идея. Ще видим. *)

Съобщение за изпразване

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

Съобщения

Изпращането на имейл е доста ефективен, но груб начин за отправяне на предупреждението. По -елегантен начин би било приложението за телефон, но не съм намерил приложение за табло на Android MQTT, което може да бъде конфигурирано да задейства предупреждение за операционна система, когато се получи определено съобщение. Ако има такъв наоколо, моля, добавете към коментарите. **)

*) След повече от година експлоатация се оказва, че пръчката за близалки, която използвах, основно твърдо навита хартия, има тенденция да се скъсява при постоянното налягане на пружината на превключвателя. След известно отстраняване на неизправности го замених с дървена пръчка.

**) Сега използвам PushBullet за push съобщения, отделно от таблото за управление на MQTT. Малък Node-RED нисък интерфейс към API можете да намерите тук. Уверете се, че сте предоставили маркера за достъп в възел „Подгответе се за pushbullet“и имейл адреса си за резервни цели в възел „Повторен опит“.

Препоръчано: