Përmbajtje:

Lidhur Letterbox Solar Powered: 12 hapa (me fotografi)
Lidhur Letterbox Solar Powered: 12 hapa (me fotografi)

Video: Lidhur Letterbox Solar Powered: 12 hapa (me fotografi)

Video: Lidhur Letterbox Solar Powered: 12 hapa (me fotografi)
Video: Автомобильный генератор BMW 12 В 180 А к генератору с помощью зарядного устройства для ноутбука 2024, Korrik
Anonim
Lidhur Letterbox Solar Powered
Lidhur Letterbox Solar Powered
Lidhur Letterbox Solar Powered
Lidhur Letterbox Solar Powered

Për Ible -in tim të dytë, unë do t'ju përshkruaj veprat e mia në lidhje me kutinë time të letrave të lidhura.

Pasi lexova këtë Instructable (+ shumë të tjera), dhe pasi kutia ime e letrave nuk është pranë shtëpisë sime, doja të më frymëzonte nga veprat e Open Green Energy për të lidhur kutinë time të letrës me serverin tim Domoticz.

Golat

  • Jini të këshilluar nga Telegram kur vijnë letrat;
  • Jini të këshilluar nga Telegram kur të vijë një parcelë;
  • Kontrolloni nëse letrat / parcelat janë marrë.

Shtrëngimi im kryesor

Kutia postare është relativisht larg shtëpisë, dhe ishte e pamundur të tërhiqje një kabllo elektrike pranë saj për të fuqizuar çdo gjë.

Më duhej të gjeja një zgjidhje tjetër: energjia diellore ishte një zgjidhje e mirë!

BOM

  • Raspberry Pi (për të pritur pjesët MQTT dhe Domoticz - nuk janë shpërndarë këtu)
  • Një llogari Telegram Bot
  • Lolin D1 mini (ose Wemos…)
  • Lidhësi i bllokut të terminalit me vidë plug-in
  • Tabela e ngarkimit të baterisë litium TP4056
  • Panel diellor fotovoltaik 6V 2W
  • Bateri Li-Ion 18650
  • Mbajtës i baterisë Li-Jon
  • PCB DIY Soldering Copper Prototype Printed Circuit Board
  • Servo analoge SG90
  • 3 Ndërprerës të kallamishteve (një për shkronja, një për parcelën dhe një për arkë)
  • Magnet
  • Disa tela
  • Arkë prej druri: Pasi nuk mora asnjë printer 3D, kuptova shtëpinë time të vogël me dru për të marrë pjesë elektronike…
  • Kabllo rezervë Ethernet
  • RJ45 Ethernet Connector Breakout Board

  • J-B Saldim
  • Disa kushineta topi
  • Vida, arra, rondele

Hapi 1: Skema Globale

Skema Globale
Skema Globale
Skema Globale
Skema Globale

Vizatimet e bukura janë gjithmonë më të mira se fjalimet e gjata;-)

Por disa shpjegime në lidhje me MQTT, Domoticz dhe Telegram janë gjithmonë të mirëseardhura!

MQTT (Message Queuing Telemetry Transport), është një protokoll mesazhesh, i përdorur për të dërguar të dhëna midis pajisjeve dhe sistemeve të tjera në botën e IoT (Internet of things).

Pa hyrë në shumë detaje, funksionimi i tij bazohet në parimin e klientëve që lidhen me një server. Në MQTT, klientët quhen Abonent ose Publisher, dhe serveri quhet Broker.

Në këtë Instructable, unë përdor vetëm një botues, Lolin të lidhur me kutinë time të letrës: kur shkronjat ose parcela zbulohen përmes kontakteve të kallamit të instaluara në kutinë e letrave (Hapi 1 në shematic), dërgoni mesazhin MQTT përmes WIFI te Ndërmjetësi (Hapi 2)

Pjesa e Ndërmjetësit bëhet nga Mosquitto, e cila është e instaluar në Raspberry Pi (Hapi 3).

Rreth Domoticz:

Siç përshkruhet në faqen burimore, Domoticz është një "sistem automatizimi i shtëpisë", duke ju lejuar të kontrolloni pajisje të ndryshme dhe të merrni të dhëna nga protokolle të ndryshme: MQTT është një nga protokollet e mbështetur …

Sapo informacioni të arrijë tek ai (Hapi 4), ju mund të përcaktoni ngjarjet: Në rastin e kutisë së letrave, unë zgjodha të dërgoja një njoftim në Telegram (Hapi 5).

Më në fund, klienti i Telegram është konfiguruar në telefonin tim (dhe gruaja ime gjithashtu! - Hapi 6): qëllimi përfundimtar është arritur…

Hapi 2: Shematik / Instalime

Shematike / Tela
Shematike / Tela
Shematike / Tela
Shematike / Tela
Shematike / Tela
Shematike / Tela
Shematike / Tela
Shematike / Tela

Një fjalë për analogun lexohet:

Para së gjithash, kam vënë re pas disa kërkimeve se Lolin mini D1 (si Wemos i vjetër), ka ndërtuar ndarës tensioni për pin A0 (duke marrë parasysh 220KΩ për R1 dhe 100KΩ për R2 - shiko në të djathtë të fletës së të dhënave të lidhur), duke lejuar 3.2 Volt si tension maksimal analog i hyrjes.

Duke marrë parasysh tensionin maksimal të daljes nga bateria është 4, 2v (i kufizuar nga bordi i karikimit), dhe teorikisht, ju vetëm duhet të shtoni një rezitor të jashtëm (në seri me R1) për të rritur gamën maksimale të tensionit të hyrjes. Pastaj, nëse shtoni 100K në seri me R1, do të keni këtë rezultat:

Vin * R1/(R1+R2) = Vout

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

Në qarkun tim, unë zgjodha të jem në gjendje të rregulloj vlerën e tij, kjo është arsyeja pse kam preferuar të përdor një rezistencë të rregullueshme në qarkun tim: mbase do të jetë e padobishme për ju, por në situatën time, e vendosa vlerën e tij në rreth 10KΩ që të ketë një vlerë koherente në Domoticz…

Vini re se kunja A0 ka rezolucion 10 bit: kjo do të thotë që në skicën tuaj, leximi juaj analog do të kthejë një vlerë nga 0 në 1024.

Ndërsa dua të dërgoj një vlerë përqindëse tek Domoticz, më duhet të ndaj rezultatin e leximit analog me 10, 24.

Hapi 3: Menaxhimi i fuqisë

Menaxhimi i Fuqisë
Menaxhimi i Fuqisë
Menaxhimi i Fuqisë
Menaxhimi i Fuqisë

Sigurisht, unë dua që kutia e letrave të jetë autonome. Për të arritur qëllimin tim, unë përdor këto elemente:

  • një bateri Li-Ion 18650 prej 4000mAh;
  • një panel diellor i cili mund të japë 6V / 2W;
  • një tabelë karikimi të baterisë litium TP4056.

Për të zgjedhur panelin diellor më të përshtatshëm, hodha një vështrim në disa shembuj, përfshirë këtë: në këtë shembull, përdoret një panel diellor 5.5V / 0.66W, dhe ndoshta është i mjaftueshëm për këtë qëllim. Në rastin tim, dhe pasi ESP8266 duhet të qëndrojë ON gjatë ditës dhe duhet të jetë në gjendje të drejtojë një motor servo për ta mbajtur shtëpinë përballë diellit, unë zgjodha një model të panelit diellor më të fuqishëm (6V / 2W) - Gjithashtu më lejon për të parashikuar periudha të errëta të dimrit dhe ditë me re;-)

Gjithashtu, dhe për të zvogëluar shpenzimet e energjisë në maksimum, unë kam zgjedhur skenarët e mëposhtëm:

  • duke ditur që postieri kaloi vetëm midis orës 7 të mëngjesit dhe 8 pasdite, ESP vendoset në DeepSleep pjesën tjetër të natës;
  • Faktori nuk kalon mesditën e së shtunës dhe mëngjesin e së hënës: ESP vendoset gjithashtu në modalitetin DeepSleep gjatë kësaj periudhe.
  • Për periudhën midis 7 të mëngjesit dhe 8 pasdite, dhe për të zvogëluar konsumin e energjisë, unë thjesht çaktivizoj ndërfaqen e rrjetit të ESP: rrjeti riniset vetëm me mbërritjen e një ngastre ose një letre, vetëm kohë e mjaftueshme për të dërguar informacionin në Domoticz. Nuk kam nevojë të paralajmërohem menjëherë dhe disa sekonda shtesë të nevojshëm për të rifilluar ndërfaqen e rrjetit nuk janë të dëmshme!

Disa vlera për konsumin në mënyra të ndryshme që unë përdor për Lolin - shikoni fletën e të dhënave, f18:

  • Në modalitetin normal (me funksionimin RF), konsumi i energjisë mund të rritet në 170mA! Meqenëse kutia ime e letrave është rreth 50 metra nga shtëpia ime (dhe në kufirin e sinjalit WIFI …) Unë mendoj se fuqia e përdorur për të mbajtur lidhjen është në maksimumin e tij …
  • Në modem-sleep, konsumi i energjisë bie në 15mA. Por siç mund ta shihni në fletën e të dhënave, ai nuk e ndaloi plotësisht modemin, pasi ESP po "mban një lidhje Wi-Fi pa transmetim të të dhënave".
  • Në gjumë të thellë, fuqia bie në 20uA.

Për të qenë të sigurt se wifi nuk mbetet aktiv pa nevojë, preferova ta çaktivizoja me komandat e mëposhtme. Vini re thirrjen e madhe të vonesës ()… Pa to, rrëzimi i ESP:

WiFi. Shkëputje ();

vonesa (1000); Modaliteti WiFi (WIFI_OFF); vonesa (1000); WiFi.forceSleepBegin (); vonesa (1);

Në përgjithësi, pas disa ditëve të funksionimit, duket se funksionon dhe veçanërisht ngarkohet saktë:

  • kjo më lejon të drejtoj servomotorin çdo orë për ta pozicionuar shtëpinë drejt diellit;
  • Unë gjithashtu mund t'i lejoj vetes të riaktivizoj ndërfaqen e rrjetit çdo orë gjithashtu për të dërguar në Domoticz nivelin e ngarkimit të baterisë.

Hapi 4: Instalimi i kontakteve të magneteve dhe kallamishteve

Instalimi i kontakteve të magneteve dhe kallamishteve
Instalimi i kontakteve të magneteve dhe kallamishteve
Instalimi i kontakteve të magneteve dhe kallamishteve
Instalimi i kontakteve të magneteve dhe kallamishteve
Instalimi i kontakteve të magneteve dhe kallamishteve
Instalimi i kontakteve të magneteve dhe kallamishteve

Si zakonisht, kam përdorur Proxxon tim për të formuar vendin e Kallamit në një copë druri.

Për të rregulluar kontaktin e kallamit në vrimën e tij, kam përdorur pak saldim J-B.

Për parcelën dhe daljen, një copë kasetë të vogël, pak sharrë hekuri, dhe qëllimi është arritur!

Avantazhi i kutisë sime të letrave është se është metal, i cili lehtëson pozicionimin e magneteve në mënyrë që të ndërveprojë siç duhet me kontaktet e kallamishteve.

Hapi 5: Lidhu me Shtëpinë Time të Vogël

Lidhu me Shtëpinë Time të Vogël
Lidhu me Shtëpinë Time të Vogël
Lidhu me Shtëpinë Time të Vogël
Lidhu me Shtëpinë Time të Vogël

Për të qenë në gjendje të lidhni dhe shkëputni me lehtësi kabllon që shkon në kontaktet e kallamit nga kutia e letrave në shtëpi, zgjodha të përdor një lidhës Ethernet.

Ju mund të përdorni këtë model ose, si unë, të përdorni një mburojë të vjetër Arduino Ethernet që varet në sirtarët e mi: Ai nuk vuajti, ishte trim para sharrës, vdekja e tij ishte e shpejtë ^^

Vetëm një fjalë për këtë mburojë Arduino Ethernet: mos prisni të keni 8 drejtues të veçantë … Kabllot janë çiftuar me 2 brenda mburojës … Kjo më çmendi për një kohë të gjatë !!!

Hapi 6: Në Shtëpi…

Ne shtepi …
Ne shtepi …
Ne shtepi …
Ne shtepi …

Vetëm vend i mjaftueshëm për të rregulluar mbajtësen e baterisë, duke vendosur servo dhe lidhësin femëror RJ45.

Hapi 7: Lëreni që të rrotullohet…

Lëreni që të rrotullohet…
Lëreni që të rrotullohet…
Lëreni që të rrotullohet…
Lëreni që të rrotullohet…
Lëreni që të rrotullohet…
Lëreni që të rrotullohet…
Lëreni që të rrotullohet…
Lëreni që të rrotullohet…

Qëllimi është ta mbajmë atë përballë diellit…

Për të lejuar aftësinë për të qenë i kthyeshëm, unë përdor një vidë të gjatë si bosht, me disa arra dhe dy kushineta topi…

Deri më tani, kam përdorur servo SG90 (çift rrotullues: 1.8kg/cm në 4.8v).

Për ta kthyer shtëpinë (dhe disa gramët e saj) është e mjaftueshme. Nga ana tjetër, nuk jam i sigurt se ingranazhet e tij plastike i rezistojnë për një kohë të gjatë shpërthimeve të shpeshta të erës që ka në rajonin tim.

Kam porositur një tjetër (çift rrotullues MG995: 9.4kg/cm në 4.8v), jo shumë i shtrenjtë as, por me ingranazhe metalike.

Do të jetë gjëja tjetër që do të bëni kur ta marr: Unë mbështetem në kutinë time të lidhur për të më njoftuar për ardhjen e tij!

Hapi 8: Disa teste

Image
Image

Disa shënime:

Ky skicë është vetëm për të imituar ndryshimet e orëve gjatë ditës për të më lejuar të kontrolloj pozicionin e servo.

  • Me SG90: pa nevoja shtesë, mund të punojë me tensionin OUT që vjen nga kontrolluesi i baterisë.
  • Por, me MG 995:

    • Këndi i përgjithshëm i rrotullimit nuk është i njëjtë (më i gjerë): Më është dashur të përdor një funksion shtesë për ta zvogëluar atë (Servo_Delta ()).
    • Duhet një DC/DC Hapi për të siguruar tension të mjaftueshëm për servo … për të vazhduar …

/*

- TEST me SG90: nuk ka nevoja shtesë, mund të punojë me tensionin OUT që vjen nga kontrolluesi i baterisë - P FORR MG 995: - përdorni funksionin Servo_Delta ()… - Duhet një DC/DC Step up për të siguruar tension të mjaftueshëm në servo … për vazhdohet: */ #include bool Logs = true; Servo myservo; #përcaktoni PIN_SERVO D2 // servo pozicion për: 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 vjetër; int pos; int i; void setup () {Serial.begin (115200); } lak void () {për (i = 7; i <= 22; i ++) {i vjetër = i; if (i == 7) {if (Regjistrat) Serial.println ("Positionne servo pour 7 Heure"); myservo.attach (PIN_SERVO); për (int index = Arr_Servo_Pos [(sizeof (Arr_Servo_Pos) / sizeof (Arr_Servo_Pos [0])) -1]; indeksi 7 && i = Arr_Servo_Pos [i-7]; indeksi-) {if (Regjistrat) Serial.println (indeksi); if (Regjistrat) Serial.print ("Vlera e rregulluar:"); nëse (Regjistrat) Serial.println (Servo_Delta (indeksi)); vonesë (200); //myservo.write(Servo_Delta(index)); myservo.shkruaj (indeksi); } vonesa (15); myservo.write (Arr_Servo_Pos [i-7]); // shkruani përsëri vlerën e fundit për të shmangur lëvizjet e mprehta kur datach myservo.detach (); }}} vonesa (2000); }} int Servo_Delta (vlera int) {int Temp_val; Temp_val = (vlera*0.80) +9; kthehu Temp_val; }

Hapi 9: Shtëpia e Vogël

Shtëpia e Vogël
Shtëpia e Vogël
Shtëpia e Vogël
Shtëpia e Vogël
Shtëpia e Vogël
Shtëpia e Vogël

Siç thashë më parë, nuk mora ndonjë printer 3D. Kështu që unë vendos të përdor arkë të vjetër perimesh…

Ndoshta nuk do të zgjasë mot i gjatë, por deri atëherë, do të kisha kohë të shqyrtoja një zgjidhje tjetër (ose një mik që zotëron një printer 3D): për të mbrojtur drurin, shtova shumë llak kudo…

Ju mund të shihni "perdet e bukura" … Kjo është ajo që ndodh kur i kërkoni gruas tuaj të bëjë punën ^^

Hapi 10: Skica

Në progres… Por duket se është e qëndrueshme

Unë jam ende duke punuar në kodin: pasi ky nuk është një version përfundimtar, komentet / këshillat tuaja janë të mirëseardhura;-)

Disa vërejtje:

  • Ato janë shumë vonesa () në kod: kjo është për të shmangur shumë përplasje të Lolin, veçanërisht gjatë ndalimit të një rrjeti fillestar…
  • Unë nuk gjeta një mënyrë të lehtë dhe të besueshme për të marrë azimutin e diellit: kjo është arsyeja pse unë e fiksova vlerën servo në funksion të asaj që vëzhgova … Unë kam një mënyrë të mirë (dhe të thjeshtë) për ta marrë atë, jam i interesuar! Ndoshta një udhë për të studiuar këtu, edhe nëse preferoj një API në internet më jep azimut direkt sipas datës, orës dhe pozicionit gjeografik …
  • Rreth teknikës së gjumit: pasi Lolin është një përpunues Tensilica 32-bit, vlera e tij maksimale për një numër të plotë pa shenjë 32-bit është 4294967295 … atëherë, jep rreth 71 minuta maksimum për intervalin e thellë të gjumit. Kjo është arsyeja pse unë fle shumë herë për 60 minuta…

EDIT - 2018-10-08:

Zbulova se servo ka shumë lëvizje të mprehta, veçanërisht para lidhjes (), shkëputjes () dhe çdo herë që Lolin zgjohet nga gjumi i thellë ().

Ndërsa studioja pak më shumë fletë të të dhënave, kuptova dy gjëra:

  • Në fletën e të dhënave Lolin, dalja D4 është e lidhur tashmë me BUILTIN_LED…
  • Në fletën e të dhënave ESP8266ex, mësojmë se dalja D4 përdoret si UART 1/U 1 TXD (Transmetues Universal Asinkron Marrës). Specifiedshtë specifikuar gjithashtu se ky UART1 përdoret për printimin e regjistrit.

Duke lexuar këto informacione, kuptova se dalja D4 nuk ishte një ide e mirë, veçanërisht për të menaxhuar një servo motor!

Pra, tani dalja e përdorur për të kontrolluar servomotorin është D2, kodi më poshtë është përditësuar në përputhje me rrethanat.

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

Krijimi i datës: 08/Data mise en prod: 08/Versioni: 0.9.4 Versioni IDE Arduino: 1.8.6 Shpejtësia e ngarkimit: 921600 Lloji de carte dans l'IDE: "LOLIN (WEMOS) D1 R2 & mini" Fizika e punësuar: LOLIN (WEMOS) D1 R2 & mini (https://www.amazon.fr/gp/product/B01ELFAF1S/ref=oh_aui_detailpage_o00_s00?ie=UTF8&psc=1) Pin Function ESP-8266 Pin Vendi i përdorimit të Pin ------- ------------------------------------------------------ ------------------------------------- TX TXD TXD RX RXD RXD A0 Hyrje analoge, max 3.3V hyrje A0 Tension d'alimentaion D0 IO GPIO16 Connecté à RST (pour le deep.sleep) D1 IO, SCL GPIO5 D2 IO, SDA GPIO4 Servo moteur D3 IO, 10k PI-up GPIO0 D4 IO, 10k pull-up, BUILTIN_LED GPIO2, 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 Ground GND 5V 5V-3V3 3.3V 3.3V 3.3V RST Reset RST Connecté à D0 (pour le deep.gjumë); // wifi const char* ssid = "LOL"; const char* fjalëkalim = "LOL"; IPa Adresa IP (192, 168, 000, 000); Adresa IPS dns (192, 168, 000, 000); Porta IPAddress (192, 168, 000, 000); Nën -rrjeta IPAddress (255, 255, 000, 000); Klienti WiFiClient; // Servo #përfshi #përcakto PIN_SERVO D2 Servo myservo; // pozicioni servo për: 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}; // Kallamat #përcaktoni PIN_SWITCH_OUT D5 byte Old_Switch_State_OUT; byte Switch_State_OUT; #përcakto PIN_SWITCH_IN_PARCEL D6 bajt Old_Switch_State_IN_PARCEL; byte Switch_State_IN_PARCEL; #përcakto PIN_SWITCH_IN_LETTER D7 bajt Old_Switch_State_IN_LETTER; byte Switch_State_IN_LETTER; ndërprerës i gjatë i panënshkruarPressTime; const i panënshkruar i gjatë DEBOUCE_TIME = 200; // Analog #define PIN_ANALOG A0 // MQTT #include const char* MQTT_Server_IP = "Adresa juaj MQTT"; const int MQTT_Server_Port =; int IDX_Letter_Box =; int IDX_Parcel_Box =; int IDX_Letter_Box_Battery =; PubSubClient ClientMQTT (klient); char MQTT_Message_Buff [70]; Vargu MQTT_Pub_String; // Tensioni noton vcc; // NTP #përfshi kohën_tashmë; int Koha e Vjetër = 0; int Int_Heures = 0; int Int_Minutes = 0; int Int_Sleep_Duration = 63; void setup () {Serial.begin (115200); rrjet (i vërtetë); 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 (); rrjet (i rremë); // NTP vendosur tnow = kohë (nullptr); Int_Heures = String (ctime (& tnow)). Nën varg (11, 13).toInt (); Int_Minutes = String (ctime (& tnow)). Nën varg (14, 16).toInt (); // Gjumë i thellë për natën nëse (! ((Int_Heures> = 7) && (Int_Heures <= 20))) {Serial.print ("Flini der la nuit ("); Serial.print (Int_Sleep_Duration - Int_Minutes); Serial println ("minuta)"); gjumë (Int_Sleep_Duration - Int_Minutes); }} void loop () {// NTP vendosur tnow = kohë (nullptr); Int_Heures = String (ctime (& tnow)). Nën varg (11, 13).toInt (); Int_Minutes = String (ctime (& tnow)). Nën varg (14, 16).toInt (); //Serial.println(String(ctime(&tnow))); //Serial.println ("Heure:" + String (ctime (& tnow)). Nën varg (11, 13)); //Serial.println (String (ctime (& tnow)). Nën varg (11, 13).toInt ()); // Servo management nëse (Old_Time! = Int_Heures) {Old_Time = Int_Heures; if (Int_Heures == 7) {if (Regjistrat) Serial.println ("Positionne servo pour 7 Heure"); myservo.attach (PIN_SERVO); për (int index = Arr_Servo_Pos [(sizeof (Arr_Servo_Pos) / sizeof (Arr_Servo_Pos [0])) -1]; indeksi 7 && Int_Heures = Arr_Servo_Pos [Int_Heures-7]; indeksi-) {if (Logs) Serial.println (indeksi); vonesë (200); myservo.shkruaj (indeksi); } vonesa (15); myservo.write (Arr_Servo_Pos [Int_Heures-7]); // shkruani përsëri vlerën e fundit për të shmangur lëvizjet e mprehta kur shkëputni myservo.detach (); } rrjet (i vërtetë); SendBatteryLevel (); rrjet (i rremë); }}} // Deepsleep nëse të shtunën pas orës 13h nëse ((String (ctime (& tnow)). Substring (0, 3) == "Sat") && (Int_Heures> = 13)) {if (Regjistron) Serial.print ("Sleep pour le samedi aprés midi ("); nëse (Regjistrat) Serial.print (Int_Sleep_Duration - Int_Minutes); nëse (Regjistrat) Serial.println ("minuta)"); gjumë (Int_Sleep_Duration - Int_Minutes); } // Deepsleep if the die if (String (ctime (& tnow)). Substring (0, 3) == "Sun") {if (Regjistron) Serial.print ("Fle pour le dimanche ("); nëse (Regjistrat) Serial.print (Int_Sleep_Duration - Int_Minutes); nëse (Regjistrat) Serial.println ("minuta)"); gjumë (Int_Sleep_Duration - Int_Minutes); } // Menaxhimi i kallamishteve Switch_State_OUT = digitalRead (PIN_SWITCH_OUT); nëse (Switch_State_OUT! = Old_Switch_State_OUT) {if (milis () - switchPressTime> = DEBOUCE_TIME) {switchPressTime = milis (); if (Switch_State_OUT == HIGH) {Serial.println ("courrier relevé!"); rrjet (i vërtetë); vonesa (5000); MQTT_Pubilsh (IDX_Letter_Box, 0, "0"); vonesa (5000); MQTT_Pubilsh (IDX_Parcel_Box, 0, "0"); vonesa (5000); rrjet (i rremë); }} Old_Switch_State_OUT = Kalo_Stat_OUT; } Switch_State_IN_LETTER = digitalRead (PIN_SWITCH_IN_LETTER); nëse (Switch_State_IN_LETTER! = Old_Switch_State_IN_LETTER) {if (millis () - switchPressTime> = DEBOUCE_TIME) {switchPressTime = millis (); nëse (Switch_State_IN_LETTER == HIGH) {Serial.println ("courrier arrivé!"); rrjet (i vërtetë); vonesa (5000); MQTT_Pubilsh (IDX_Letter_Box, 1, "Courrier"); vonesa (5000); rrjet (i rremë); }} Old_Switch_State_IN_LETTER = Kalo_Stat_IN_LETTER; } Switch_State_IN_PARCEL = digitalRead (PIN_SWITCH_IN_PARCEL); nëse (Switch_State_IN_PARCEL! = Old_Switch_State_IN_PARCEL) {if (milis () - switchPressTime> = DEBOUCE_TIME) {switchPressTime = milis (); if (Switch_State_IN_PARCEL == HIGH) {Serial.println ("colis arrivé!"); rrjet (i vërtetë); vonesa (5000); MQTT_Pubilsh (IDX_Parcel_Box, 1, "Colis"); vonesa (5000); rrjet (i rremë); }} Old_Switch_State_IN_PARCEL = Kalo_Stat_IN_PARCEL; }} void SendBatteryLevel () {vonesë (5000); vcc = analogRead (PIN_ANALOG) /10.24; if (Regjistrat) Serial.println ("\ tTë lidhura me tensionin:" + String (vcc, 0)); MQTT_Pubilsh (IDX_Letter_Box_Battery, 0, String (vcc, 0)); vonesa (5000); } gjumi i zbrazët (int Min_Duration) {ESP.deepSleep (Min_Duration * 60e6); } rrjet i pavlefshëm (bool UpDown) {if (UpDown) {Serial.print ("Fillimi i rrjetit"); WiFi.forceSleepWake (); vonesa (1); // init WIFI WiFi.config (ip, dns, gateway, subnet); WiFi.filloni (ssid, fjalëkalim); ndërsa (WiFi.status ()! = WL_CONNECTED) {vonesë (500); Serial.print ("."); } vonesë (5000); Serial.println ("."); Serial.print ("\ tLidhur - Adresa IP:"); Serial.println (WiFi.localIP ()); // init MQTT ClientMQTT.setServer (MQTT_Server_IP, MQTT_Server_Port); // Init NTP Serial.print ("\ tTinkronizimi"); configTime (0, 0," fr.pool.ntp.org "); setenv (" TZ "," CET-1CEST, M3.5.0, M10.5.0/3 ", 0); ndërsa (koha (nullptr) <= 100000) {Serial.print ("."); Vonesë (100);} Serial.println (".");} Tjetër {Serial.println ("Ndalim i rrjetit."); WiFi.diskontim (); vonesë (1000); WiFi.mode (WIFI_OFF); vonesë (1000); WiFi.forceSleepBegin (); vonesë (1);}} void rilidhje () {ndërsa (! ClientMQTT.connected ()) {Serial.print (" / tPërpjekja për lidhjen MQTT … "); // Përpjekja për t'u lidhur nëse (ClientMQTT.connect (" ESP8266ClientBAL ")) {Serial.println (" lidhur ");} tjetër {Serial.print (" dështoi, rc = "); Serial.print (ClientMQTT.state ()); Serial.println ("provo sërish në 5 sekonda"); // Prisni 5 sekonda para se të provoni vonesën (5000);}}}} pavlefshme MQTT_Pubilsh (int Int_IDX, int N_Value, String S_Value) {if (! ClientMQTT.connected ()) rilidheni (); vcc = analogRead (PIN_ANALOG) /10.24; Serial.println ("\ tDërgoni informacion MQTT …"); MQTT_Pub_String = "{" idx / ":" + String (Int_IDX) + ", \" Bateria / ":" + Vargu (vcc, 0) + ", \" vlera / ":" + N_Vlera + ", \" vlera / ": \" " + S_Vlera +" / "}"; MQTT_Pub_String.toCharArray (MQTT_Message_Buff, MQTT_Pub_String.length ()+1); ClientMQTT.publish ("domoticz/in", MQTT_Message_Buff); ClientMQTT.shkëput (); }

Hapi 11: Domoticz

Domoticz
Domoticz
Domoticz
Domoticz
Domoticz
Domoticz

Në Domoticz:

Për përdorim të përgjithshëm:

  • Krijoni dy "Dummy (Nuk bën asgjë, përdorni për ndërprerës virtual)":

    1. E para për shkronjat…
    2. E dyta për parcelën…
  • Për secilën prej tyre, personalizoni njoftimet;
  • Sigurisht, ju duhet të konfiguroni shenjën tuaj Tegegram.

Opsionale:

Ju mund të shtoni një "Sensor të shërbimeve" për të mbikëqyrur nivelin e ngarkimit të baterisë tuaj.

Këshilla: këtu mund të gjeni shumë ikona të personalizuara falas…

Hapi 12: Përfundim

Përfundim
Përfundim
Përfundim
Përfundim

Shpresoj se ky udhëzues do t'ju ndihmojë:

  • nëse do të bëni letrën tuaj të lidhur me letra;
  • ose thjesht për t'ju dhënë disa ide për projektet tuaja!

Nëse keni ide për përmirësime, unë jam duke dëgjuar!

PS: me falni per anglishten time, perkthimi ne Google me ndihmon shume por ndoshta nuk eshte perfekt;-)

Recommended: