İçindekiler:

Bağlantılı Letterbox Güneş Enerjili: 12 Adım (Resimli)
Bağlantılı Letterbox Güneş Enerjili: 12 Adım (Resimli)

Video: Bağlantılı Letterbox Güneş Enerjili: 12 Adım (Resimli)

Video: Bağlantılı Letterbox Güneş Enerjili: 12 Adım (Resimli)
Video: Beni ALLAH Yargılar, SEN Değil..! 2024, Temmuz
Anonim
Bağlantılı Posta Kutusu Güneş Enerjili
Bağlantılı Posta Kutusu Güneş Enerjili
Bağlantılı Posta Kutusu Güneş Enerjili
Bağlantılı Posta Kutusu Güneş Enerjili

İkinci Ible'ım için, bağlı mektup kutumla ilgili çalışmalarımı anlatacağım.

Bu Eğitilebilir Yazıyı (+ diğerlerini) okuduktan sonra ve posta kutum evimin yakınında olmadığı için, mektup kutumu Domoticz sunucuma bağlamak için bana Open Green Energy'nin çalışmalarından ilham vermek istedim.

Hedefler

  • Mektuplar geldiğinde Telegram'dan haberdar olun;
  • Bir koli geldiğinde Telegram'dan haberdar olun;
  • Harflerin / kolilerin alınıp alınmadığını kontrol edin.

ana kısıtlamam

Posta kutusu evden nispeten uzakta ve herhangi bir şeye güç sağlamak için bir elektrik kablosunu yukarı çekmek imkansızdı.

Başka bir çözüm bulmalıydım: güneş enerjisi iyi bir çözümdü!

Malzeme Listesi

  • Raspberry Pi (MQTT ve Domoticz parçalarını barındırmak için - burada açıklanmamıştır)
  • Bir Telegram Bot hesabı
  • Lolin D1 mini (veya Wemos…)
  • Geçmeli Vidalı Terminal Bloğu Konnektörü
  • TP4056 Lityum Pil Şarj Kartı
  • 6V 2W Fotovoltaik Güneş Paneli
  • Li-Ion 18650 pil
  • Li-Ion pil tutucu
  • PCB DIY Lehimleme Bakır Prototip Baskılı Devre Kartı
  • Analog Servo SG90
  • 3 Manyetik Anahtar (biri mektuplar, biri koli ve biri kasa için)
  • mıknatıslar
  • Bazı teller
  • Tahta sandık: Herhangi bir 3D yazıcı almadığım için elektronik parçalarını almak için ahşaptan kendi küçük evimi gerçekleştirdim…
  • Yedek Ethernet kablosu
  • RJ45 Ethernet Konektörü Breakout Kartı

  • JB Kaynak
  • Bazı bilyalı rulmanlar
  • Vidalar, somunlar, pullar

1. Adım: Küresel Şema

Küresel Şema
Küresel Şema
Küresel Şema
Küresel Şema

Güzel çizimler her zaman uzun konuşmalardan daha iyidir;-)

Ancak MQTT, Domoticz ve Telegram hakkında birkaç açıklama her zaman açığız!

MQTT (Message Queuing Telemetri Transport), IoT (Nesnelerin İnterneti) dünyasında cihazlar ve diğer sistemler arasında veri göndermek için kullanılan bir mesajlaşma protokolüdür.

Çok fazla detaya girmeden, istemcilerin bir sunucuya bağlanması prensibine dayanmaktadır. MQTT'de istemciler Abone veya Yayıncı olarak adlandırılır ve sunucuya Broker denir.

Bu Talimatta, yalnızca bir yayıncı kullanıyorum, Lolin posta kutuma bağlı: mektup kutusuna takılı kamış kontaklar aracılığıyla mektuplar veya paketler algılandığında (şematikte Adım 1), Broker'a WIFI üzerinden MQTT mesajı gönderir (Adım 2).

Komisyoncu kısmı, Raspberry Pi'ye kurulu olan Mosquitto tarafından yapılır (3. Adım).

Domoticz hakkında:

Kaynak sayfada anlatıldığı gibi Domoticz, çeşitli cihazları kontrol etmenize ve çeşitli protokollerden girdi almanıza olanak tanıyan bir "ev otomasyon sistemi"dir: MQTT desteklenen protokollerden biridir…

Bilgi kendisine ulaşır ulaşmaz (4. Adım), olayları tanımlayabilirsiniz: Posta kutusu durumunda, bir Telegram bildirimi göndermeyi seçtim (5. Adım).

Son olarak, benim telefonumda Telegram istemcisi yapılandırıldı (ve karımın da! - 6. Adım): nihai hedefe ulaşıldı…

Adım 2: Şematik / Kablolama

Şematik / Kablolama
Şematik / Kablolama
Şematik / Kablolama
Şematik / Kablolama
Şematik / Kablolama
Şematik / Kablolama
Şematik / Kablolama
Şematik / Kablolama

Analog okuma hakkında bir kelime:

Her şeyden önce, bazı araştırmalardan sonra Lolin mini D1'in (eski Wemos gibi), pin A0 için dahili voltaj bölücü (R1 için 220KΩ ve R2 için 100KΩ dikkate alınarak - bağlantılı veri sayfasının sağına bakın), 3.2 Volt'a izin verdiğini fark ettim. maksimum analog giriş voltajı olarak.

Aküden maksimum çıkış voltajının 4, 2v (şarj kartı ile sınırlıdır) olduğu ve teorik olarak, maksimum giriş voltajı aralığını artırmak için yalnızca harici bir direnç (R1 ile seri olarak) eklemeniz gerekir. Ardından, R1 ile seri olarak 100K eklerseniz, şu sonucu alırsınız:

Vin * R1/(R1+R2) = Vout

4, 2 * 320K/(320K+100K) = 3, 2

Devremde değerini ayarlayabilmeyi seçtim, bu yüzden devremde ayarlanabilir bir direnç kullanmayı tercih ettim: belki sizin için işe yaramaz ama benim durumumda değerini yaklaşık 10KΩ olarak ayarladım. Domoticz'de tutarlı bir değer…

A0 pininin 10 bit çözünürlüğe sahip olduğunu unutmayın: bu, çiziminizde analog okumanızın 0 ile 1024 arasında bir değer döndüreceği anlamına gelir.

Domoticz'e yüzde değeri göndermek istediğim için analog okuma sonucunu 10, 24'e bölmem gerekiyor.

3. Adım: Güç Yönetimi

Güç Yönetimi
Güç Yönetimi
Güç Yönetimi
Güç Yönetimi

Elbette, mektup kutusunun özerk olmasını istiyorum. Hedefime ulaşmak için şu unsurları kullanıyorum:

  • 4000 mAh'lik bir Li-Ion 18650 pil;
  • 6V / 2W sağlayabilen bir güneş paneli;
  • bir TP4056 Lityum Pil şarj kartı.

En uygun güneş panelini seçmek için bu örnek de dahil olmak üzere bazı örneklere göz attım: bu örnekte 5.5V / 0.66W'lık bir güneş paneli kullanılıyor ve muhtemelen bu amaç için yeterli. Benim durumumda ve ESP8266'nın gün boyunca AÇIK kalması ve evi güneşe dönük tutmak için bir servo motor çalıştırabilmesi gerektiğinden, daha güçlü bir güneş paneli modeli seçtim (6V / 2W) - Ayrıca bana izin veriyor karanlık kış dönemlerini ve bulutlu günleri tahmin etmek için;-)

Ayrıca, enerji tüketimini maksimuma indirmek için aşağıdaki senaryoları seçtim:

  • postacının sadece sabah 7 ile akşam 8 arasında geçtiğini bilerek, ESP gecenin geri kalanında DeepSleep'e yerleştirilir;
  • Faktör Cumartesi öğlen ile Pazartesi sabahı arasında geçmez: ESP de bu süre içinde DeepSleep moduna alınır.
  • Sabah 7 ile akşam 8 arasındaki süre için ve güç tüketimini azaltmak için, ESP'nin ağ arayüzünü devre dışı bırakıyorum: ağ yalnızca bir paket veya mektup geldiğinde yeniden başlatılıyor, bilgileri göndermek için yeterli bir süre. Domoticz. I'nin hemen uyarılmasına gerek yoktur ve ağ arayüzünü yeniden başlatmak için gereken ek birkaç saniye zararlı değildir!

Lolin için kullandığım farklı modlarda tüketim hakkında bazı değerler - veri sayfasına bakın, p18:

  • Normal modda (RF çalışırken), güç tüketimi 170mA'ya kadar çıkabilir! Posta kutum evimden yaklaşık 50 metre uzakta olduğu için (ve WIFI sinyalinin sınırında…) Sanırım bağlantıyı sürdürmek için kullanılan güç maksimumda…
  • Modem uykusunda, güç tüketimi 15mA'ya düşer. Ancak veri sayfasında görebileceğiniz gibi, ESP "veri iletimi olmayan bir Wi-Fi bağlantısını sürdürdüğü" için modemi tamamen durdurmadı.
  • Derin uykuda, güç 20uA'ya düşer.

Wifi'nin gereksiz yere aktif kalmaması için aşağıdaki komutlarla devre dışı bırakmayı tercih ettim. Birçok delay() çağrısına dikkat edin… Onlar olmadan ESP çöker:

WiFi.disconnect();

gecikme(1000); WiFi.modu(WIFI_OFF); gecikme(1000); WiFi.forceSleepBegin(); gecikme(1);

Genel olarak, birkaç günlük çalışmadan sonra çalışıyor ve özellikle doğru şekilde yükleniyor gibi görünüyor:

  • bu, evi güneşe doğru konumlandırmak için servo motoru her saat başı çalıştırmamı sağlıyor;
  • Domoticz'e pil şarj seviyesini göndermek için ağ arayüzünü her saat başı yeniden etkinleştirmeme de izin verebilirim.

Adım 4: Mıknatısların ve Kamışların Kurulumu

Mıknatısların ve Kamışların Kurulumu
Mıknatısların ve Kamışların Kurulumu
Mıknatısların ve Kamışların Kurulumu
Mıknatısların ve Kamışların Kurulumu
Mıknatısların ve Kamışların Kurulumu
Mıknatısların ve Kamışların Kurulumu

Her zamanki gibi, Proxxon'umu bir tahta parçasında Kamış'ın yerini şekillendirmek için kullandım.

Kamış kontağını deliğine sabitlemek için biraz J-B kaynağı kullandım.

Koli ve çıktı için küçük bir parça bant, biraz demir testeresi ve hedefe ulaşıldı!

Posta kutumun avantajı, metal olması, mıknatısların konumlandırılmasını kolaylaştırarak saz kontaklarıyla düzgün bir şekilde etkileşime girmesidir.

Adım 5: My Little House'a bağlanın

My Little House'a bağlan
My Little House'a bağlan
My Little House'a bağlan
My Little House'a bağlan

Posta kutusundan eve giden reed kontaklara giden kabloyu kolayca takıp çıkarabilmek için bir Ethernet konektörü kullanmayı seçtim.

Bu modeli kullanabilir veya benim gibi çekmecelerimde asılı duran eski bir Arduino Ethernet kalkanı kullanabilirsiniz: Acı çekmedi, testerenin önünde cesurdu, ölümü hızlıydı ^^

Bu Arduino Ethernet kalkanı hakkında sadece bir kelime: 8 ayrı sürücüye sahip olmayı beklemeyin… Kablolar, kalkanın içinde 2 ile eşleştirildi… Beni çok uzun süre çıldırttı !!!

Adım 6: Evde…

Evde …
Evde …
Evde …
Evde …

Pil tutucuyu, servoyu ve RJ45 dişi konektörü sabitlemek için yeterli yer.

Adım 7: Döner Tablaya Bırakın…

Döner Tablaya Bırakın…
Döner Tablaya Bırakın…
Döner Tablaya Bırakın…
Döner Tablaya Bırakın…
Döner Tablaya Bırakın…
Döner Tablaya Bırakın…
Döner Tablaya Bırakın…
Döner Tablaya Bırakın…

Amaç onu güneşe dönük tutmak…

Döndürülebilmesi için, aks olarak uzun bir vida kullandım, bazı somunlar ve iki bilyeli rulman…

Şimdiye kadar SG90 servo kullandım (tork: 4.8v'de 1.8kg/cm).

Evi (ve birkaç gramını) çevirmek yeterlidir. Öte yandan, plastik dişlilerinin bölgemde sık sık esen rüzgarlara uzun süre dayandığından emin değilim.

Bir tane daha sipariş ettim (MG995 torku: 4.8v'de 9.4kg/cm), çok pahalı değil ama metal dişlilerle.

Onu aldığımda yapılacak bir sonraki şey olacak: Onun gelişini bana bildirmek için bağlı posta kutuma güveniyorum!

8. Adım: Bazı Testler

Image
Image

Birkaç not:

Bu çizim, servonun konumunu kontrol etmeme izin vermek için yalnızca gün içindeki saat değişikliklerini taklit etmek içindir.

  • SG90 ile: Ekstra ihtiyaç yoktur, akü kontrolöründen gelen OUT gerilimi ile çalışabilir.
  • Ancak, MG 995 ile:

    • Toplam dönüş açısı aynı değil (daha geniş): Onu azaltmak için fazladan bir fonksiyon kullanmak zorunda kaldım (Servo_Delta()).
    • Servoya yeterli voltajı sağlamak için bir DC/DC Yükseltmesi gerekiyor … devam etmek için …

/*

- SG90 ile TEST: ekstra ihtiyaç yoktur, akü kontrolöründen gelen ÇIKIŞ gerilimi ile çalışabilir - MG 995 İÇİN: - Servo_Delta() fonksiyonunu kullanın … - Servoya yeterli voltaj sağlamak için bir DC/DC Yükseltme ihtiyacı … devam edecek: */ #include bool Günlükler = true; Servo myservo; #define PIN_SERVO D2 // için servo konumu: 7h, 8h, 9h, 10h, 11h, 12h, 13h, 14h, 15h, 16h, 17h, 18h, 19h, 20h, 21h //int Arr_Servo_Pos = {177, 173, 163, 148, 133, 118, 100, 80, 61, 41, 28, 15, 2, 2, 2}; int Arr_Servo_Pos = {180, 175, 165, 150, 135, 120, 102, 82, 63, 43, 30, 15, 0, 0, 0}; int eski; int konum; int i; geçersiz kurulum() { Serial.begin(115200); } void loop() { for(i = 7; i <= 22; i++){ eski = i; if (i == 7){ if (Günlükler) Serial.println ("Konum le servo pour 7 Heure"); myservo.attach(PIN_SERVO); for(int index = Arr_Servo_Pos[(sizeof(Arr_Servo_Pos) / sizeof(Arr_Servo_Pos[0])) -1]; index 7 && i = Arr_Servo_Pos[i-7]; index--){ if (Günlükler) Serial.println (indeks); if (Günlükler) Serial.print ("Ayarlanmış değer: "); if (Günlükler) Serial.println(Servo_Delta(index)); gecikme(200); //myservo.write(Servo_Delta(index)); myservo.write(indeks); } gecikme(15); myservo.write(Arr_Servo_Pos[i-7]); // datach myservo.detach(); } } } gecikme(2000); } } int Servo_Delta(int değeri){ int Temp_val; Temp_val = (değer*0.80)+9; Temp_val döndür; }

9. Adım: Küçük Ev

Küçük Ev
Küçük Ev
Küçük Ev
Küçük Ev
Küçük Ev
Küçük Ev

Daha önce de söylediğim gibi, herhangi bir 3D yazıcı almadım. Bu yüzden eski sebze kasasını kullanmaya karar verdim…

Belki uzun sürmeyecek, ama o zamana kadar başka bir çözüm (veya 3D yazıcısı olan bir arkadaşım) düşünmek için zamanım olacaktı: ahşabı korumak için her yere çok fazla vernik ekledim…

"Güzel perdeleri" görebilirsin… Karından bu işi yapmasını istediğinde böyle oluyor ^^

Adım 10: Eskiz

Devam ediyor… Ama istikrarlı görünüyor

Hala kod üzerinde çalışıyorum: bu kesin bir sürüm olmadığı için yorumlarınızı/tavsiyelerinizi bekliyoruz;-)

Bazı açıklamalar:

  • Kodda birçok gecikme vardır (): bu, özellikle bir başlangıç ağı durdurulurken Lolin'in çok fazla çökmesini önlemek içindir…
  • Güneş azimutunu almanın kolay ve güvenilir bir yolunu bulamadım: bu yüzden servo değerini gözlemlediklerime göre sabitledim… Bunu elde etmek için iyi (ve basit) bir yolunuz var, ilgileniyorum! Burada çalışmak için bir parkur, çevrimiçi bir API tercih etsem bile bana doğrudan tarihe, saate ve coğrafi konuma göre azimut veriyor…
  • Uyku tekniği hakkında: Lolin 32-bit Tensilica İşlemci olduğundan, 32-bit işaretsiz bir tamsayı için maksimum değeri 4294967295'tir… o zaman, derin uyku aralığı için maksimum 71 dakika verir. Bu yüzden defalarca yaklaşık 60 dakika uyku l'ESP yapıyorum…

DÜZENLEME - 2018-10-08:

Servonun, özellikle ek (), ayırma () işleminden önce ve Lolin'in derin Uykudan () her uyanışında, çok sarsıntılı hareketler olduğunu keşfettim.

Biraz daha veri sayfası incelerken iki şeyi fark ettim:

  • Lolin veri sayfasında, D4 çıkışı BUILTIN_LED ile zaten bağlı…
  • ESP8266ex veri sayfasında, D4 çıkışının UART 1/U 1 TXD (Evrensel Asenkron Alıcı Verici) olarak kullanıldığını öğreniyoruz. Bu UART1'in günlük yazdırmak için kullanıldığı da belirtilmiştir.

Bu bilgileri okuyarak, özellikle bir servo motoru yönetmek için D4 çıkışının iyi bir fikir olmadığını anladım!

Dolayısıyla servo motoru kontrol etmek için kullanılan çıkış artık D2'dir, aşağıdaki kod buna göre güncellenmiştir.

//****************************************

Tarih oluşturma: 08/ Üretim tarihi: 08/Sürüm: 0.9.4 Versiyon IDE Arduino: 1.8.6 Yükleme hızı: 921600 Type de carte dans l'IDE: "LOLIN(WEMOS) D1 R2 & mini" Carte fiziksel personel: LOLIN(WEMOS) D1 R2 ve mini (https://www.amazon.fr/gp/product/B01ELFAF1S/ref=oh_aui_detailpage_o00_s00?ie=UTF8&psc=1) Pin Fonksiyonu ESP-8266 Pin Kullanımı yerel ayarı ------- -------------------------------------------------- ------------------------------------ TX TXD TXD RX RXD RXD A0 Analog giriş, maksimum 3.3V giriş A0 Tension d'almentaion D0 IO GPIO16 Connecté à RST (dökün derin.uyku) D1 IO, SCL GPIO5 D2 IO, SDA GPIO4 Servo motor D3 IO, 10k Pull-up GPIO0 D4 IO, 10k pull-up, BUILTIN_LED GPIO, SCK GPIO14 Reed relève D6 IO, MISO GPIO12 Reed lettre D7 IO, MOSI GPIO13 Reed colis D8 IO, 10k pull-down, SS GPIO15 G Toprak GND 5V 5V – 3V3 3.3V 3.3V RST Reset RST Connecté D derin0 (dökme).sleep) *********************************************/ #include bool Günlükler = doğru; // wifi const char* ssid = "LOL"; const char* şifre = "LOL"; IPAdresi ip(192, 168, 000, 000); IPAdresi dns(192, 168, 000, 000); IPAdresi ağ geçidi(192, 168, 000, 000); IPAdresi alt ağı(255, 255, 000, 000); WiFiClient istemcisi; // Servo #include #define PIN_SERVO D2 Servo myservo; // servo konumu için: 7h, 8h, 9h, 10h, 11h, 12h, 13h, 14h, 15h, 16h, 17h, 18h, 19h, 20h, 21h int Arr_Servo_Pos = {179, 175, 165, 150, 135, 120, 102, 82, 63, 43, 30, 15, 1, 1, 1}; // Kamışlar #define PIN_SWITCH_OUT D5 bayt Old_Switch_State_OUT; bayt Switch_State_OUT; #define PIN_SWITCH_IN_PARCEL D6 bayt Old_Switch_State_IN_PARCEL; bayt Switch_State_IN_PARCEL; #define PIN_SWITCH_IN_LETTER D7 bayt Old_Switch_State_IN_LETTER; bayt Switch_State_IN_LETTER; imzasız uzun switchPressTime; const imzasız uzun DEBOUCE_TIME = 200; // Analog #define PIN_ANALOG A0 // MQTT #include const char* MQTT_Server_IP = "MQTT adresiniz"; const int MQTT_Server_Port =; int IDX_Letter_Box =; int IDX_Parcel_Box =; int IDX_Letter_Box_Battery =; PubSubClient ClientMQTT(istemci); karakter MQTT_Message_Buff[70]; String MQTT_Pub_String; // Gerginlik şamandırası vcc; // NTP #include time_t tnow; int Eski_Zaman = 0; int Int_Heures = 0; int Int_Dakika = 0; int Int_Sleep_Duration = 63; geçersiz kurulum(){ Serial.begin(115200); ağ(doğru); pinMode(PIN_SWITCH_OUT, INPUT_PULLUP); Old_Switch_State_OUT = digitalRead (PIN_SWITCH_OUT); pinMode(PIN_SWITCH_IN_LETTER, INPUT_PULLUP); Old_Switch_State_IN_LETTER = digitalRead (PIN_SWITCH_IN_LETTER); pinMode(PIN_SWITCH_IN_PARCEL, INPUT_PULLUP); Old_Switch_State_IN_PARCEL = digitalRead (PIN_SWITCH_IN_PARCEL); SendBatteryLevel(); ağ(yanlış); // NTP set tnow = zaman(nullptr); Int_Heures = String(ctime(&tnow))).substring(11, 13).toInt(); Int_Minutes = String(ctime(&tnow))).substring(14, 16).toInt(); // Gece derin uyku if(!((Int_Heures >= 7) && (Int_Heures <= 20))){ Serial.print("Sleep pour la nuit ("); Serial.print(Int_Sleep_Duration - Int_Minutes); Serial. println("dakika)"); uyku(Int_Sleep_Duration - Int_Minutes); } } void loop() { // NTP set tnow = zaman(nullptr); Int_Heures = String(ctime(&tnow))).substring(11, 13).toInt(); Int_Minutes = String(ctime(&tnow))).substring(14, 16).toInt(); //Serial.println(String(ctime(&tnow))); //Serial.println ("Heure: " + String(ctime(&tnow))).substring(11, 13)); //Serial.println (String(ctime(&tnow))).substring(11, 13).toInt()); // Servo yönetimi if (Old_Time != Int_Heures){ Old_Time = Int_Heures; if (Int_Heures == 7){ if (Günlükler) Serial.println ("Konum le servo pour 7 Heure"); myservo.attach(PIN_SERVO); for(int index = Arr_Servo_Pos[(sizeof(Arr_Servo_Pos) / sizeof(Arr_Servo_Pos[0])) -1]; index 7 && Int_Heures = Arr_Servo_Pos[Int_Heures-7]; index--){ if (Günlükler) Serial.println (indeks); gecikme(200); myservo.write(indeks); } gecikme(15); myservo.write(Arr_Servo_Pos[Int_Heures-7]); // detach myservo.detach(); } ağ(doğru); SendBatteryLevel(); ağ(yanlış); } } } // Cumartesi 13h sonra derin uyku if((String(ctime(&tnow))).substring(0, 3) == "Sat") && (Int_Heures >= 13)){ if (Günlükler) Serial.print("Sleep pour le samedi aprés midi ("); if (Günlükler) Serial.print(Int_Sleep_Duration - Int_Minutes); if (Günlükler) Serial.println("dakika)"); uyku(Int_Sleep_Duration - Int_Minutes); } // Deepsleep if Sunday if(String(ctime(&tnow))).substring(0, 3) == "Sun"){ if (Günlükler) Serial.print("Sleep pour le dimanche ("); if (Günlükler) Serial.print(Int_Sleep_Duration - Int_Minutes); if (Günlükler) Serial.println("dakika)"); uyku(Int_Sleep_Duration - Int_Minutes); } // Reed yönetimi Switch_State_OUT = digitalRead (PIN_SWITCH_OUT); if (Switch_State_OUT != Old_Switch_State_OUT){ if (milis () - switchPressTime >= DEBOUCE_TIME){ switchPressTime = millis (); if (Switch_State_OUT == YÜKSEK){ Serial.println ("kurye alaka düzeyi!"); ağ(doğru); gecikme (5000); MQTT_Pubilsh(IDX_Letter_Box, 0, "0"); gecikme (5000); MQTT_Pubilsh(IDX_Parcel_Box, 0, "0"); gecikme (5000); ağ(yanlış); } } Old_Switch_State_OUT = Switch_State_OUT; } Switch_State_IN_LETTER = digitalRead (PIN_SWITCH_IN_LETTER); if (Switch_State_IN_LETTER != Old_Switch_State_IN_LETTER){ if (milis () - switchPressTime >= DEBOUCE_TIME){ switchPressTime = millis (); if (Switch_State_IN_LETTER == YÜKSEK){ Serial.println ("kurye varış !"); ağ(doğru); gecikme (5000); MQTT_Pubilsh(IDX_Letter_Box, 1, "Kurye"); gecikme (5000); ağ(yanlış); } } Old_Switch_State_IN_LETTER = Switch_State_IN_LETTER; } Switch_State_IN_PARCEL = digitalRead (PIN_SWITCH_IN_PARCEL); if (Switch_State_IN_PARCEL != Old_Switch_State_IN_PARCEL){ if (milis () - switchPressTime >= DEBOUCE_TIME){ switchPressTime = millis (); if (Switch_State_IN_PARCEL == YÜKSEK){ Serial.println ("colis varış !"); ağ(doğru); gecikme (5000); MQTT_Pubilsh(IDX_Parcel_Box, 1, "Colis"); gecikme (5000); ağ(yanlış); } } Old_Switch_State_IN_PARCEL = Switch_State_IN_PARCEL; } } void SendBatteryLevel(){ gecikme(5000); vcc = analogRead(PIN_ANALOG)/10.24; if (Günlükler) Serial.println ("\tTension relevée: " + String(vcc, 0)); MQTT_Pubilsh(IDX_Letter_Box_Battery, 0, Dize(vcc, 0)); gecikme (5000); } void sleep(int Min_Duration){ ESP.deepSleep(Min_Duration * 60e6); } void network(bool UpDown){ if (UpDown){ Serial.print("Ağ başlangıcı "); WiFi.forceSleepWake(); gecikme(1); // WIFI WiFi.config'i başlat(ip, dns, ağ geçidi, alt ağ); WiFi.begin(ssid, şifre); while (WiFi.status() != WL_CONNECTED) { gecikme(500); Seri.print("."); } gecikme (5000); Seri.println("."); Serial.print("\tBağlı - IP Adresi: "); Serial.println(WiFi.localIP()); // başlat MQTT ClientMQTT.setServer(MQTT_Server_IP, MQTT_Server_Port); // NTP Serial.print'i başlat("\tTime Synch."); configTime(0, 0, "fr.pool.ntp.org"); setenv("TZ", "CET-1CEST, M3.5.0, M10.5.0/3", 0); while(zaman(nullptr)) <= 100000) { Serial.print("."); delay(100); } Serial.println("."); } else{ Serial.println("Ağ durdurma."); WiFi.disconnect(); delay(1000); WiFi.mode(WIFI_OFF); delay(1000); WiFi.forceSleepBegin(); delay(1); } } void reconnect() { while (!ClientMQTT.connected()) { Serial.print(" \tMQTT bağlantısı deneniyor…"); // if (ClientMQTT.connect("ESP8266ClientBAL")) { Serial.println("connected"); } else { Serial.print("failed, rc="); Serial.print(ClientMQTT.state()); Serial.println(" 5 saniye sonra tekrar deneyin"); // gecikmeyi tekrar denemeden önce 5 saniye bekleyin (5000); } } } void MQTT_Pubilsh(int Int_IDX, int N_Value, String S_Value) { if (!ClientMQTT.connected()) reconnect(); vcc = analogRead(PIN_ANALOG)/10.24; Serial.println("\tMQTT'ye bilgi gönder …"); MQTT_Pub_String = "{ "idx\": " + String (Int_IDX) + ", \"Pil\": " + Dize(vcc, 0) + ", \"nvalue\": " + N_Value + ", \"svalue \": \"" + S_Value + "\"}"; MQTT_Pub_String.toCharArray(MQTT_Message_Buff, MQTT_Pub_String.length()+1); ClientMQTT.publish("domoticz/in", MQTT_Message_Buff); ClientMQTT.disconnect(); }

Adım 11: Domoticz

Domoticz
Domoticz
Domoticz
Domoticz
Domoticz
Domoticz

Domoticz'de:

Genel kullanım için:

  • İki "Kukla (Hiçbir şey yapmaz, sanal anahtarlar için kullanın)" oluşturun:

    1. Harfler için ilk…
    2. Parsel için ikinci…
  • Her biri için bildirimleri kişiselleştirin;
  • Tabii ki, Tegegram jetonunuzu ayarlamanız gerekiyor.

İsteğe bağlı olarak:

Pil şarj seviyenizi denetlemek için bir "Fayda sensörü" ekleyebilirsiniz.

İpuçları: Burada birçok ücretsiz özel simge bulabilirsiniz…

Adım 12: Sonuç

Çözüm
Çözüm
Çözüm
Çözüm

Umarım bu Eğitilebilirlik size yardımcı olacaktır:

  • kendi bağlı posta kutunuzu yapıp yapmayacağınızı;
  • ya da sadece projeleriniz için size bazı fikirler vermek için!

İyileştirmeler için fikirleriniz varsa, dinliyorum!

Not: ingilizcem için üzgünüm, Google çevirisi bana çok yardımcı oluyor ama muhtemelen mükemmel değil;-)

Önerilen: