İçindekiler:

MQTT ve Wifi Destekli Posta Kutusu Bayrağı: 7 Adım (Resimli)
MQTT ve Wifi Destekli Posta Kutusu Bayrağı: 7 Adım (Resimli)

Video: MQTT ve Wifi Destekli Posta Kutusu Bayrağı: 7 Adım (Resimli)

Video: MQTT ve Wifi Destekli Posta Kutusu Bayrağı: 7 Adım (Resimli)
Video: Blazor ve SignalR ile Online Multiplayer Kelime Oyunu 2024, Kasım
Anonim
MQTT ve Wifi Destekli Posta Kutusu Bayrağı
MQTT ve Wifi Destekli Posta Kutusu Bayrağı

Not: Yeni bellenim, şema ve programcı için ipuçları ile güncellendi

Birkaç yıl kendi ev otomasyon projeme başladım. Çok sayıda ucuz PT2262 tabanlı uzaktan anahtarı değiştirmek için bir Arduino ile sunucu kontrollü 433 MHz verici inşa ederek başladı. Daha sonra hava istasyonum için Arduino tabanlı bir alıcı ekledim, EV şarj cihazımın kontrol kontağını bağladım, vb. İşler giderek daha fazla iç içe geçti (ve karmaşıktı!). Bu nedenle, birkaç ay önce her şeyi mesajlaşma için MQTT'ye, otomasyon için Node-RED'e (her ikisi de tek bir Raspberry Pi B+ üzerinde çalışıyor) ve günlüğe kaydetme için MariaDb'ye (Synology NAS'ımda çalışıyor) dayalı olarak standartlaştırmaya karar verdim. Daha sonra MQTT aracısını (Mosquitto) ve Node-RED'i de NAS'a taşıdım.

Bu talimat, sokağa monte edilmiş posta kutumu bu ev altyapısına bağlayan aptalca bir eğlence projesini anlatıyor. Buradaki fikir şu ki, biri çitle monte edilmiş posta kutusunu ön kapıdan yaklaşık 10 metre uzakta açarsa, bu bana telefonumdan ve muhtemelen diğer cihazlardan sinyal verir.

Adım 1: Anahat, Ön Koşullar ve Parçalar

anahat

Yüksek düzeyde, posta kutusu açıldığında, aracıya benzersiz bir MQTT mesajı göndermelidir, böylece bu konudaki aboneler bilgilendirilecektir. Node-RED de abone olur ve bazı otomasyonlar yapar, bu durumda telefonuma bir e-posta ve/veya push mesajı gönderir.

Posta kutusu pillerle çalışmalı ve en az bir yıl çalışmalı ve bunu WiFi ağımı kullanarak yapmalıdır. Bir mikro denetleyiciyi uyandırmak ve bir WiFi ağına bağlanmak birkaç saniye sürebileceğinden, gücü kesmek için etkinleştirme anahtarını kullanamadım. Bunun yerine, posta kutusunun kapağı kapandıktan sonra işlemcinin işini bitirmesine izin verilmelidir.

önkoşullar

Mütevazı lehimleme becerileriniz olduğunu, Arduino IDE ile biraz çalıştığınızı ve Pano Yöneticisini kullanarak ESP8266 panolarını kurduğunuzu varsayıyorum. Mikro denetleyiciyi programlamak için ayrıca 3,3 voltluk bir USB Seri adaptörünüz olması gerekir.

Ayrıca bir MQTT aracınız ve çalışan bir Node-RED sunucunuz olduğunu varsayıyorum. Değilse, internette birçok talimat var, ancak bunu herhangi bir Pi veya Ubuntu'da çalıştırmak istiyorsanız tembel yoldan gitmenizi ve Peter Scargill'in mükemmel kurulum komut dosyasını kullanmanızı veya Pi Zero W için Andreas Spiess'in görüntüsünü kullanmanızı öneririm (Bu videonun açıklamasındaki bağlantılar), çalışan kurulum komut dosyalarını izlemekten birkaç saat tasarruf etmenizi sağlar. Alternatif olarak, üretici yazılımının doğrudan bir e-posta göndermesini sağlayabilirsiniz, ancak bunu yaparken çok fazla esneklik kaybedersiniz.

Parçalar

  • 1 kapalı, 3 AA pil kutusu
  • 2 adet AA pil
  • 1 ESP8266 modülü. Bu proje için bir ESP-01 kullandım
  • 1 mikro anahtar
  • 1 47K direnç
  • 1 4M7 direnç
  • 1 2.2uF kapasitör
  • 1 ince plastik tüp. ben kalem kullandım
  • 1 kalın, uzun kibrit veya lolipop çubuğu. Plastik boruya kolayca oturmalı ve hareket etmelidir.

Adım 2: Donanım: Kutu, Anahtar ve Kablolama

Donanım: Kutu, Anahtar ve Kablolama
Donanım: Kutu, Anahtar ve Kablolama
Donanım: Kutu, Anahtar ve Kablolama
Donanım: Kutu, Anahtar ve Kablolama
Donanım: Kutu, Anahtar ve Kablolama
Donanım: Kutu, Anahtar ve Kablolama

Eski bir Noel dekorasyonundan eski bir pil kutusuyla başladım. Üç adet AA boyutlu pil için tasarlanmıştır. ESP8266 3 voltta iyi çalışacağından, iki pil kullanabilir ve mikro denetleyici için üçüncü konumu kullanabilirim. Kutunun, etkinleştirme anahtarı için kullanabileceğim küçük bir ekstra bölmesi olduğuna dikkat edin. Resimlerde gösterilen çok yaygın bir anahtar türü kullandım, ancak onu açık veya kapalı konumda tutan yayı çıkardım. NC kontaklarına iki ince tel lehimledim ve küçük bir damla süper yapıştırıcı ile kutuya yapıştırdım.

Ardından, üst kapağa tükenmez kalemden alınan plastik bir tüple eşleşen bir delik açtım. Delik, anahtarla tam olarak aynı hizadadır ve kalın bir kibrit çubuğundan yapılmış bir pistonu yönlendirir.

Son olarak, pil kontaklarına iki kablo daha lehimledim ve dört kabloyu da mikro denetleyicinin olacağı üçüncü pilin konumuna yönlendirdim.

Adım 3: Donanım: ESP-01

Donanım: ESP-01
Donanım: ESP-01
Donanım: ESP-01
Donanım: ESP-01
Donanım: ESP-01
Donanım: ESP-01

WiFi gereksinimi göz önüne alındığında, tüm proje ESP8266 diye bağırıyor. Bu küçük WiFi denetleyicisi, 2,50 Euro'nun altında satın alınabilen ve kendi programlarınızı çalıştırmak için fazlasıyla yeterli kapasiteye sahip tam bir WiFi ve TCP/IP yığınını entegre eden bir modül olarak, tamirci topluluğun favori beygir gücü haline geldi. Arduino IDE (veya PlatformIO eklentili Atom), ESP8266'yı tamamen destekler.

Genelde bir ESP-12F alırdım, ancak etrafta küçük bir ESP-01 kartım vardı, bu iş için mükemmeldi ve pil kutusuna iyi uyuyordu. Tek sorun, ESP-01'de bellenimi flaş etmenin oldukça karmaşık olmasıdır. Bir sonraki adımda bununla ilgili daha fazla bilgi. Yapılması gereken bir değişiklik var: Sürekli 3mA çektiği için kırmızı güç LED'ini karttan çıkarmanız gerekiyor. LED çıkarıldığında, modül derin uyku modunda sadece birkaç on uA kullanır ve bu da iki kaliteli AA pille bir yıldan fazla dayanmasını sağlar.

ESP-01'i üçüncü pil bölmesine sığarken, bellenimi güncellemek için çıkarabilmem için iki adet 4 pinli dişi başlık şeridini ve birkaç ekstra bileşen üzerinde serbest biçimde lehim kullanabileceğim ortaya çıktı.

ESP'yi doğru şekilde bağlamak çok önemlidir. Yukarıdaki hile sayfasını kullanarak aşağıdaki gibi bağlayın.

  1. Pil artı Vcc (D2), CH_PD (B2), RXD (D1), GPIO0 (C1), GPIO2 (B1) ve 47K direnç.
  2. Pil eksi GND'ye (A1) ve anahtarın bir kablosu.
  3. Anahtarın diğer kablosu 100nF kapasitöre ve 4M7 direncine.
  4. Hem dirençlerin hem de kapasitörün açık uçları RST'ye (C2).
  5. TXD (A2) bağlantısız kalabilir.

Düzenleme: Aptalca bir hata yaptığım için ESP-01'i değiştirmek zorunda kaldım ve onu yok ettim. Yeni ESP-01'in orijinal 100nF kondansatör ile sıfırlanmaması beni şaşırttı. Muhtemelen biraz farklı bir tasarıma sahiptir. 2.2 uF ile değiştirdim ve şimdi tekrar çalışıyor

Bittiğinde her şey kutuya monte edilebilir ama bir dakika önce modülü programlamamız gerekiyor.

Adım 4: ESP-01'in Programlanması

ESP-01'in Programlanması
ESP-01'in Programlanması
ESP-01'in Programlanması
ESP-01'in Programlanması
ESP-01'in Programlanması
ESP-01'in Programlanması

ESP-01'inizdeki bellenimi flaş etmek için, küçük bir teçhizat kurabilir veya yaklaşık 1 euro karşılığında (neredeyse) eksiksiz bir programlayıcı satın alabilirsiniz.

Programlama donanım donanımı

ESP-01 için yine iki dişi başlıklı küçük bir teçhizat oluşturun. Ayrıca, 3,3 volt sağlayabilen bir USB Seri modülüne ihtiyacınız var. ESP8266 yongasının 5 voltla sertleştirilmediğini unutmayın, bu nedenle buradaki bir hata modülünüzü öldürebilir. Her neyse, yine hile sayfasını kullanarak teçhizatınızı aşağıdaki gibi bağlayın:

  1. USBSerial modülünden Vcc, CH_PD, RST ve GPIO2'ye 3.3V.
  2. USBSerial modülünün GND'si GND ve GPIO0'a.
  3. USBSerial modülünün TXD'si RXD'ye.
  4. USBSerial modülünün RDX'i TXD'ye.

Ön derleme programcısı

Kendi eşyalarınızı oluşturmak eğlenceli olduğu kadar, daha tembel bir yaklaşım, favori müzayede sitenizden bir ESP-01-seri arayüzü almaktır, yukarıdaki resme bakın. Bu, bir teçhizattan çok daha kolay, daha kompakt ve daha güvenilirdir. Ancak bunlardan bazıları programcı değil, sadece seri arayüzlerdir. Arayüzün arka tarafında GND (pin A1) ve GPIO0 (pin C1) arasında bir tel köprü lehimlemeniz gerekiyor, ikinci resme bakın. ESP-01'in anten USB fişine bakacak şekilde takılması gerektiğini unutmayın, tersi değil!

Not: ayrıca bir anahtarla da varlar, üçüncü resme bakın, çok güzel.

Bellenimi yükleyin

1.8.3 veya üstü bir Arduino IDE varsayarsak, Araçlar > Pano'yu seçin ve sahip olduğunuz panoyu seçin. Kullandığım gibi bir ESP-01 için "Genel ESP8266 Modülü"nü seçin ve aşağıdaki seçenekleri ayarlayın (bunların tümü varsayılan değerler olmalıdır):

  1. Flaş Modu: DIO
  2. Flaş Frekansı: 40MHz
  3. CPU Frekansı: 80MHz
  4. Flash boyutu: 512KB (64KB SPIFFS) Not: Siyah bir ESP-01 kartı kullanıyorsanız, 1MB (64KB SPIFFS) seçin
  5. Hata ayıklama bağlantı noktası: Devre dışı
  6. Hata ayıklama düzeyi: Yok
  7. Sıfırlama yöntemi: ck
  8. Yükleme hızı 115200
  9. Port: USB Seri arayüzünüze bağlı olan portu seçin. /dev/ttyUSB0 olan Ubuntu bilgisayarım için

Donanımı / programlayıcıyı bağlayın, burada bulabileceğiniz Sketch'i yükleyin https://gitlab.com/jeroenmeijer/Mailbox.git. WiFi ve MQTT aracı kimlik bilgilerinizi ve IP yapılandırmanızı config.h içinde sağlayın ve Karşıya Yükle'yi seçin.

Adım 5: Hepsini Birleştirme

Hepsini Bir araya getirmek
Hepsini Bir araya getirmek

Posta kutumun iç kapağındaki plastik boru için menteşeye mümkün olduğunca yakın bir delik açtım, ardından pil kutusunu bu kapağın altına sıcak yapıştırdım. Daha sonra piston olarak kalın bir kibrit kullandım. Kibriti uzunlamasına kesmek için bir makas kullandım, böylece dış kapak kapatılırsa anahtar açılır. MQTT mesajlarını izlemek için mosquitto_sub çalıştırırken kapağı açarak bağlantıyı kontrol ettim (mqttbroker, kullanıcı ve şifreyi MQTT yapılandırmanızla değiştirin):

$ mosquitto_sub -h mqttbroker -v -t "stat/#" -u kullanıcı -P şifresi

Dış kapak açıldıktan yaklaşık altı saniye sonra aşağıdaki MQTT mesajı yayınlanır. Zaman, mikro denetleyiciyi uyandırmak ve WiFi ile komisyoncu bağlantısını kurmak için kullanılır.

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

Bu süre zarfında mikro denetleyici yaklaşık 70mA kullandı. Bittiğinde derin uykuya geçer ve benim durumumda 20uA'dan daha az kullanılır. "flap" her zaman doğrudur, "vcc", mV cinsinden pil voltajını belirtir ve "prev" 0 olmalıdır. 1 veya 2 ise, posta kutusunun daha önce mesaj gönderemediği anlamına gelir. WiFi veya MQTT aracısına bağlanamadığı için. "RSSI", WiFi sinyalinin gücüdür. Her ikisi de sorunları teşhis etmek için çok kullanışlıdır.

Cihazın amaçlandığı gibi çalıştığından ve herhangi bir nedenle pilini tüketmediğinden emin olmak için pil voltajını birkaç gün izlemek iyi bir fikirdir.

Bellenim ayrıca kendisini kablosuz olarak güncelleyebilir (OTA), ancak bu, bu talimatın kapsamının biraz ötesindedir. İlgilenenler için OTA yapılandırması da config.h dosyasındadır.

Adım 6: MQTT Mesajına Göre Hareket Etmek için Düğüm-RED'i Kullanma

MQTT Mesajına Göre Hareket Etmek için Düğüm-RED'i Kullanma
MQTT Mesajına Göre Hareket Etmek için Düğüm-RED'i Kullanma

Son olarak, Node-RED'de basit bir akış oluşturdum. İlk düğüm, posta kutusunun konusuna abone olur (stat/postbox/trigger). Bir mesaj alındığında, ikinci düğüm bir e-posta *) biçimlendirir. Son düğüm, SMTP sunucusu olarak gmail'i kullanarak onu gmail adresime gönderir. Telefonum daha sonra beni yeni posta konusunda uyaracak.

Node-RED akışını bir gitlab snippet'ine ekledim, böylece onu Node-RED akışlarınıza aktarabilirsiniz.

Tabii ki, örneğin posta kutusu olaylarını MariaDb veya SqlLite'a kaydetmek veya akü voltajı 2,7 voltun altına düştüğünde ekstra alarmlar oluşturmak için birkaç düğüm daha ekleyebilirsiniz.

Mutlu posta avı!

*) Bir sonraki sayfaya bakın, şimdi e-posta yerine PushBullet kullanıyorum.

7. Adım: Sonradan düşünceler

Her zaman bir şeyler daha iyi yapılabilirdi hissi var.

Değiştirmek

Biraz beceriksiz dalgıç yaklaşımı yerine (süper) bir mıknatıs ve kamış kontağı kullanmayı tercih ederdim. İki sebep vardı. Birincisi, kutu açıldığında kontağın kapanmasıyla bunu çalıştırmamın hiçbir yolu yoktu ve kutunun her zaman kapalı olması, her zaman küçük bir akımın akacağı anlamına geliyordu. Geriye dönüp bakıldığında, 4M7 rezistöründen akan 1uA'dan az olması, pil ömrü açısından büyük bir sorun olmazdı. Diğeri daha pratikti. Bu projeyi Cumartesi günü hazırladım ve yazılımı yazdım, hepsini Pazar günü etraftakilerden inşa ettim. Önemsiz kutusunda kamış kontağım yoktu.

Not: diy_bloke'un belirttiği gibi, kamış kontaklar uzun süre mıknatıslandığında yapışkan olma eğilimindedir, bu yüzden belki de piston o kadar da kötü bir fikir değildi. Göreceğiz. *)

Boşaltma ile ilgili mesaj

Posta kutusu da boşaltırken bir mesaj gönderir. Bu önemli bir şey değil, ancak evde daha fazla insan uyarıyı aldığında, kişi posta kutusunu kontrol ederek tüm amacına meydan okuyan bir döngüye girebilir! Bunun birkaç yolu vardır, örneğin iç kapağın kaldırılıp kaldırılmadığını kontrol etmek ve eğer öyleyse mesaj göndermemek. Veya kapak anahtarını kullanmak yerine posta kutusunun altına bir dedektör takın. Veya boşaltırken basılacak küçük bir sıfırlama düğmesi. Ancak, bunların tümü işleri karmaşıklaştıracak ve muhtemelen güvenilirliği kötüleştirecektir.

mesajlaşma

E-posta göndermek, uyarıyı göndermenin oldukça etkili ancak kaba bir yoludur. Daha zarif bir yol bir telefon uygulaması olabilir, ancak belirli bir mesaj alındığında bir işletim sistemi uyarısını tetikleyecek şekilde yapılandırılabilen bir Android MQTT pano uygulaması bulamadım. Etrafta biri varsa, lütfen yorumlara ekleyin. **)

*) Bir yıldan fazla bir süre çalıştıktan sonra, kullandığım lolipop çubuğunun, temelde sert haddelenmiş kağıt, şalter yayının sabit basıncı altında kısalma eğiliminde olduğu ortaya çıktı. Bazı sorun giderme işlemlerinden sonra tahta bir çubukla değiştirdim.

**) PushBullet'i şimdi push mesajları için MQTT panosundan ayrı olarak kullanıyorum. API'ye yönelik küçük bir Node-RED düşük arabirimi burada bulunabilir. "Pushbullet için hazırlık" düğümünde erişim belirtecini ve "Yeniden Dene" düğümünde geri dönüş amacıyla e-posta adresinizi sağladığınızdan emin olun.

Önerilen: