Cuprins:

Cutie poștală conectată alimentată cu energie solară: 12 pași (cu imagini)
Cutie poștală conectată alimentată cu energie solară: 12 pași (cu imagini)

Video: Cutie poștală conectată alimentată cu energie solară: 12 pași (cu imagini)

Video: Cutie poștală conectată alimentată cu energie solară: 12 pași (cu imagini)
Video: Automatizari fotovoltaice incepatori Ep.1: Instalare și prezentare Solar Assistant 2024, Iulie
Anonim
Cutie poștală conectată alimentată cu energie solară
Cutie poștală conectată alimentată cu energie solară
Cutie poștală conectată alimentată cu energie solară
Cutie poștală conectată alimentată cu energie solară

Pentru al doilea Ible, vă voi descrie lucrările mele despre cutia mea scrisă conectată.

După ce am citit acest Instructable (+ multe altele) și, deoarece cutia mea poștală nu este aproape de casă, am vrut să mă inspir din lucrările Open Green Energy pentru a-mi conecta cutia poștală la serverul meu Domoticz.

Obiective

  • Fiți sfătuiți de Telegram când vin scrisori;
  • Fiți sfătuiți de Telegram când vine un colet;
  • Verificați dacă scrisorile / coletele au fost ridicate.

Principala mea constrângere

Cutia poștală este relativ departe de casă și a fost imposibil să trageți un cablu electric până la ea pentru a alimenta ceva.

A trebuit să găsesc o altă soluție: energia solară a fost o soluție bună!

BOM

  • Raspberry Pi (pentru a găzdui piese MQTT și Domoticz - nedescris aici)
  • Un cont Telegram Bot
  • Lolin D1 mini (sau Wemos …)
  • Conector cu șurub cu șurub plug-in
  • Placă de încărcare a bateriei cu litiu TP4056
  • Panou solar fotovoltaic de 6V 2W
  • Baterie Li-Ion 18650
  • Suport baterie Li-Ion
  • Placă de circuite imprimate cu prototip de cupru de lipit DIY
  • Servo analog SG90
  • 3 comutatoare Reed (unul pentru litere, unul pentru colet și unul pentru plată)
  • Magneți
  • Unele fire
  • Lada din lemn: Deoarece nu am primit nici o imprimantă 3D, mi-am dat seama de propria mea căsuță cu lemn pentru a primi piese electronice …
  • Cablu Ethernet de rezervă
  • RJ45 Ethernet Connector Breakout Board

  • J-B Weld
  • Câțiva rulmenți cu bile
  • Șuruburi, piulițe, șaibe

Pasul 1: Schema globală

Schema globală
Schema globală
Schema globală
Schema globală

Desenele frumoase sunt întotdeauna mai bune decât discursurile lungi;-)

Dar câteva explicații despre MQTT, Domoticz și Telegram sunt întotdeauna binevenite!

MQTT (Message Queuing Telemetry Transport), este un protocol de mesagerie, utilizat pentru a trimite date între dispozitive și alte sisteme din lumea IoT (Internetul obiectelor).

Fără a intra în prea multe detalii, funcționarea sa se bazează pe principiul conectării clienților la un server. În MQTT, clienții se numesc Abonat sau Publisher, iar serverul se numește Broker.

În acest Instructable, folosesc un singur editor, Lolin conectat la cutia mea poștală: când sunt detectate scrisori sau colete prin contactele reed instalate în cutia poștală (Pasul 1 în secțiunea shematică), acesta trimite mesajul MQTT prin WIFI către Broker (Pasul 2)).

Partea Broker este realizată de Mosquitto, care este instalat pe Raspberry Pi (Pasul 3).

Despre Domoticz:

Așa cum este descris în pagina sursă, Domoticz este un „sistem de automatizare la domiciliu”, care vă permite să controlați diferite dispozitive și să primiți intrări de la diferite protocoale: MQTT este unul dintre protocoalele acceptate …

De îndată ce informațiile ajung la el (Pasul 4), puteți defini evenimentele: În cazul cutiei poștale, am ales să trimit o notificare Telegram (Pasul 5).

În sfârșit, clientul Telegram este configurat pe telefonul meu (și soția mea! - Pasul 6): obiectivul final este atins …

Pasul 2: Shematic / Cablare

Shematic / Cablare
Shematic / Cablare
Shematic / Cablare
Shematic / Cablare
Shematic / Cablare
Shematic / Cablare
Shematic / Cablare
Shematic / Cablare

Un cuvânt despre analog a citit:

În primul rând, am observat, după unele cercetări, că Lolin mini D1 (ca vechiul Wemos), a încorporat divizorul de tensiune pentru pinul A0 (având în vedere 220KΩ pentru R1 și 100KΩ pentru R2 - vezi în dreapta fișei tehnice conectate), permițând 3,2 Volți ca tensiune analogică maximă de intrare.

Având în vedere că tensiunea maximă de ieșire de la baterie este de 4, 2v (limitată de placa de încărcare) și, teoretic, trebuie să adăugați doar un resitor extern (în serie cu R1) pentru a crește intervalul maxim de tensiune de intrare. Apoi, dacă adăugați 100K în serie cu R1, veți avea acest rezultat:

Vin * R1 / (R1 + R2) = Vout

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

În circuitul meu, am ales să-i pot regla valoarea, de aceea am preferat să folosesc un rezistor reglabil în circuitul meu: poate va fi inutil pentru tine, dar în situația mea, i-am setat valoarea la aproximativ 10KΩ pentru a avea o valoare coerentă în Domoticz …

Rețineți că pinul A0 are o rezoluție de 10 biți: aceasta înseamnă că în schița dvs., citirea analogică va returna o valoare între 0 și 1024.

Deoarece vreau să trimit o valoare procentuală lui Domoticz, trebuie să împart rezultatul citirii analogice la 10, 24.

Pasul 3: Managementul energiei

Managementul energiei
Managementul energiei
Gestionarea energiei
Gestionarea energiei

Desigur, vreau ca cutia poștală să fie autonomă. Pentru a-mi atinge obiectivul, folosesc aceste elemente:

  • o baterie Li-Ion 18650 de 4000mAh;
  • un panou solar care poate livra 6V / 2W;
  • o placă de încărcare a bateriei cu litiu TP4056.

Pentru a alege cel mai potrivit panou solar, am analizat câteva exemple, inclusiv acesta: în acest exemplu, se folosește un panou solar de 5,5 V / 0,66 W și este probabil suficient în acest scop. În cazul meu, și deoarece ESP8266 trebuie să rămână PORNIT în timpul zilei și trebuie să poată rula un servomotor pentru a menține casa cu fața la soare, am ales un model de panou solar mai puternic (6V / 2W) - De asemenea, îmi permite pentru a anticipa perioadele întunecate de iarnă și zilele înnorate;-)

De asemenea, și pentru a reduce la maximum cheltuielile de energie, am selectat următoarele scenarii:

  • știind că poștașul a trecut doar între 7am și 8pm, ESP este plasat în DeepSleep restul nopții;
  • Factorul nu trece între sâmbătă la prânz și luni dimineață: ESP este plasat și în modul DeepSleep în această perioadă.
  • Pentru perioada cuprinsă între orele 7 am și 8 pm și pentru a reduce consumul de energie, pur și simplu dezactivez interfața de rețea a ESP: rețeaua este repornită doar la sosirea unui colet sau a unei scrisori, suficient timp pentru a trimite informațiile la Domoticz. Nu trebuie să fiu avertizat imediat și câteva secunde suplimentare necesare pentru a reporni interfața de rețea nu sunt dăunătoare!

Câteva valori despre consum în diferite moduri pe care le folosesc pentru Lolin - consultați fișa tehnică, p18:

  • În modul normal (cu funcționarea RF), consumul de energie poate crește la 170mA! Deoarece cutia mea poștală este la aproximativ 50 de metri de casa mea (și la limita semnalului WIFI …) presupun că puterea utilizată pentru menținerea conexiunii este la maxim …
  • În modem-sleep, consumul de energie scade la 15mA. Dar, după cum puteți vedea în foaia de date, nu a oprit complet modemul, deoarece ESP „menține o conexiune Wi-Fi fără transmisie de date”.
  • În somn profund, puterea scade la 20uA.

Pentru a fi sigur că wifi-ul nu rămâne activ inutil, am preferat să îl dezactivez cu următoarele comenzi. Rețineți numeroasele apeluri delay () … Fără ele, blocarea ESP:

WiFi.disconnect ();

întârziere (1000); WiFi.mode (WIFI_OFF); întârziere (1000); WiFi.forceSleepBegin (); întârziere (1);

Per total, după câteva zile de funcționare, se pare că funcționează și mai ales se încarcă corect:

  • acest lucru îmi permite să rulez servomotorul la fiecare oră pentru a poziționa casa spre soare;
  • De asemenea, îmi pot permite să reactivez interfața de rețea și la fiecare oră pentru a trimite la Domoticz nivelul de încărcare a bateriei.

Pasul 4: Instalarea contactelor Magnets și Reeds

Instalarea contactelor Magnets și Reeds
Instalarea contactelor Magnets și Reeds
Instalarea contactelor Magnets și Reeds
Instalarea contactelor Magnets și Reeds
Instalarea contactelor Magnets și Reeds
Instalarea contactelor Magnets și Reeds

Ca de obicei, mi-am folosit Proxxon-ul pentru a modela locul trestiei într-o bucată de lemn.

Pentru a fixa contactul de stuf în gaura sa, am folosit un pic de sudură J-B.

Pentru colet și ieșire, o bucată mică de bandă, un pic de ferăstrău, iar obiectivul este atins!

Avantajul cutiei mele poștale este că este din metal, ceea ce facilitează poziționarea magneților, astfel încât să interacționeze corect cu contactele de stuf.

Pasul 5: Conectează-te la Casa Mea Mică

Conectează-te la Casa Mea Mică
Conectează-te la Casa Mea Mică
Conectează-te la Casa Mea Mică
Conectează-te la Casa Mea Mică

Pentru a putea conecta și deconecta cu ușurință cablul care merge la contactele reed de la cutia poștală la casă, am ales să folosesc un conector Ethernet.

Puteți folosi acest model sau, la fel ca mine, folosiți un scut vechi Arduino Ethernet care atârnă în sertarele mele: El nu a suferit, a fost curajos în fața ferăstrăului, moartea lui a fost rapidă ^^

Doar un cuvânt despre acest ecran Arduino Ethernet: nu vă așteptați să aveți 8 drivere separate … Cablurile sunt împerecheate de 2 în interiorul ecranului … M-a înnebunit prea mult timp !!!

Pasul 6: În casă …

In casa …
In casa …
In casa …
In casa …

Doar suficient loc pentru a fixa suportul bateriei, setarea servo și conectorul femural RJ45.

Pasul 7: Let It Turntable …

Let It Turntable …
Let It Turntable …
Let It Turntable …
Let It Turntable …
Let It Turntable …
Let It Turntable …
Let It Turntable …
Let It Turntable …

Obiectivul este să-l ținem cu fața la soare …

Pentru a permite capacitatea de a fi rotitor, am folosit un șurub lung ca ax, cu niște piulițe și doi rulmenți cu bile …

Până acum, am folosit servo SG90 (cuplu: 1,8 kg / cm la 4,8 v).

Este suficient să întoarceți casa (și câteva grame). Pe de altă parte, nu sunt sigur că angrenajele sale din plastic rezistă mult timp la rafalele frecvente de vânt care există în regiunea mea.

Am comandat altul (cuplu MG995: 9,4kg / cm la 4,8v), nici foarte scump, dar cu angrenaje metalice.

Va fi următorul lucru de făcut atunci când îl voi primi: mă bazez pe cutia mea poștală conectată pentru a-mi anunța sosirea!

Pasul 8: Unele teste

Image
Image

Câteva note:

Această schiță este doar pentru a emula schimbări de ore în timpul zilei pentru a-mi permite să controlez poziția servo-ului.

  • Cu SG90: fără necesități suplimentare, poate funcționa cu tensiunea OUT ieșită de la controlerul bateriei.
  • Dar, cu MG 995:

    • Unghiul total de rotație nu este același (mai larg): a trebuit să folosesc o funcție suplimentară pentru a o reduce (Servo_Delta ()).
    • Aveți nevoie de un DC / DC Step up pentru a furniza suficientă tensiune la servo … pentru a continua …

/*

- TEST cu SG90: fără necesități suplimentare, poate funcționa cu tensiunea OUT ieșită de la controlerul bateriei - PENTRU MG 995: - utilizați funcția Servo_Delta () … - Aveți nevoie de un DC / DC Step up pentru a furniza suficientă tensiune servo-ului … fi continuat: * / #include bool Logs = true; Servo miservo; #define PIN_SERVO D2 // servo poziție pentru: 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 vechi; int pos; int i; void setup () {Serial.begin (115200); } void loop () {pentru (i = 7; i <= 22; i ++) {vechi = i; if (i == 7) {if (Logs) Serial.println ("Positionne 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 (Logs) Serial.println (index); if (Logs) Serial.print ("Valoare ajustată:"); if (Logs) Serial.println (Servo_Delta (index)); întârziere (200); //myservo.write(Servo_Delta(index)); myservo.write (index); } întârziere (15); myservo.write (Arr_Servo_Pos [i-7]); // scrieți din nou ultima valoare pentru a evita mișcările sacadate când datach myservo.detach (); }}} întârziere (2000); }} int Servo_Delta (valoare int) {int Temp_val; Temp_val = (valoare * 0,80) +9; returnează Temp_val; }

Pasul 9: Casa Mică

Casa Mică
Casa Mică
Casa Mică
Casa Mică
Casa Mică
Casa Mică

După cum am mai spus, nu am primit nici o imprimantă 3D. Deci, decid să folosesc o cutie de legume vechi …

Poate că nu va dura mult, dar până atunci aș avea timp să iau în calcul o altă soluție (sau un prieten care deține o imprimantă 3D): pentru a proteja lemnul, am adăugat o mulțime de lac peste tot …

Puteți vedea „perdelele drăguțe” … Asta se întâmplă când îi ceri soției să facă treaba ^^

Pasul 10: Schița

În curs … Dar pare a fi stabil

Încă lucrez la cod: deoarece aceasta nu este o versiune definitivă, comentariile / sfaturile dvs. sunt binevenite;-)

Câteva observații:

  • Sunt multe întârzieri () în cod: aceasta este pentru a evita o mulțime de blocaje ale Lolin, mai ales în timp ce opriți o rețea de pornire …
  • Nu am găsit o modalitate ușoară și fiabilă de a obține azimutul soarelui: de aceea am stabilit valoarea servo în funcție de ceea ce am observat … Eu aveți un mod bun (și simplu) de a-l obține, mă interesează! Poate o pistă de studiat aici, chiar dacă prefer un API online, îmi dă azimutul direct în funcție de dată, oră și poziția geografică …
  • Despre tehnica somnului: întrucât Lolin este un procesor Tensilica pe 32 de biți, valoarea sa maximă pentru un întreg nesemnat pe 32 de biți este 4294967295 … apoi, dă aproximativ 71 de minute pentru intervalul de somn profund. De aceea fac să dorm somnul de multe ori timp de aproximativ 60 de minute …

EDITARE - 2018-10-08:

Am descoperit că servo are multe mișcări sacadate, mai ales înainte de atașare (), detașare () și de fiecare dată când Lolin se trezește din deepSleep ().

În timp ce studiam ceva mai multe foi de date, am realizat două lucruri:

  • În foaia tehnică Lolin, ieșirea D4 este deja conectată la BUILTIN_LED …
  • În foaia de date ESP8266ex, aflăm că ieșirea D4 este utilizată ca UART 1 / U 1 TXD (Transmitter receptor universal asincron). De asemenea, se specifică faptul că acest UART1 este utilizat pentru tipărirea jurnalului.

Citind aceste informații, mi-am dat seama că ieșirea D4 nu era o idee bună, mai ales pentru a gestiona un servomotor!

Deci, acum ieșirea utilizată pentru controlul servomotorului este D2, codul de mai jos a fost actualizat în consecință.

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

Data creării: 08 / Data punerii în aplicare: 08 / Versiunea: 0.9.4 Versiunea IDE Arduino: 1.8.6 Viteza de încărcare: 921600 Tipul de carte în IDE: "LOLIN (WEMOS) D1 R2 & mini" Carte physique employée: 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 Utilization locale ------- -------------------------------------------------- ------------------------------------ TX TXD TXD RX RXD RXD A0 Intrare analogică, intrare maximă 3,3V A0 Tension d'alimentaion D0 IO GPIO16 Connecté à RST (pour le deep.sleep) D1 IO, SCL GPIO5 D2 IO, SDA GPIO4 Servo motor D3 IO, 10k Pull-up GPIO0 D4 IO, 10k pull-up, BUILTIN_LED GPIO2 D5 IO, 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 RST Reset RST Connecté à D0 (pour le deep.sleep) **************************************** / #include bool Logs = true; // wifi const char * ssid = "LOL"; const char * password = "LOL"; Adresa IP ip (192, 168, 000, 000); IPAddress dns (192, 168, 000, 000); Gateway IPAddress (192, 168, 000, 000); Subrețea IPAddress (255, 255, 000, 000); Client WiFiClient; // Servo #include #define PIN_SERVO D2 Servo myservo; // poziția servo pentru: 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}; // Reeds #define PIN_SWITCH_OUT D5 byte Old_Switch_State_OUT; octet Switch_State_OUT; #define PIN_SWITCH_IN_PARCEL D6 byte Old_Switch_State_IN_PARCEL; octet Switch_State_IN_PARCEL; #define PIN_SWITCH_IN_LETTER D7 byte Old_Switch_State_IN_LETTER; octet Switch_State_IN_LETTER; switch nesemnat lung PressTime; const unsigned long DEBOUCE_TIME = 200; // Analog #define PIN_ANALOG A0 // MQTT #include const char * MQTT_Server_IP = "Adresa dvs. MQTT"; const int MQTT_Server_Port =; int IDX_Letter_Box =; int IDX_Parcel_Box =; int IDX_Letter_Box_Battery =; PubSubClient ClientMQTT (client); char MQTT_Message_Buff [70]; Șir MQTT_Pub_String; // Tension float vcc; // NTP #include time_t tnow; int Old_Time = 0; int Int_Heures = 0; int Int_Minutes = 0; int Int_Sleep_Duration = 63; void setup () {Serial.begin (115200); rețea (adevărat); 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 (); rețea (fals); // NTP set tnow = time (nullptr); Int_Heures = String (ctime (& tnow)). Substring (11, 13).toInt (); Int_Minutes = String (ctime (& tnow)). Substring (14, 16).toInt (); // Deepsleep for the night if (! ((Int_Heures> = 7) && (Int_Heures <= 20))) {Serial.print ("Sleep pour la nuit ("); Serial.print (Int_Sleep_Duration - Int_Minutes); Serial. println („minute)”); somn (Int_Sleep_Duration - Int_Minutes); }} void loop () {// NTP set tnow = time (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 management if (Old_Time! = Int_Heures) {Old_Time = Int_Heures; if (Int_Heures == 7) {if (Logs) Serial.println ("Positionne 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 (Logs) Serial.println (index); întârziere (200); myservo.write (index); } întârziere (15); myservo.write (Arr_Servo_Pos [Int_Heures-7]); // scrieți din nou ultima valoare pentru a evita mișcările sacadate când detașați myservo.detach (); } rețea (adevărat); SendBatteryLevel (); rețea (fals); }}} // Deepsleep if sâmbătă după 13h if ((String (ctime (& tnow)). Substring (0, 3) == "Sat") && (Int_Heures> = 13)) {if (Logs) Serial.print ("Sleep pour le samedi aprés midi ("); if (Logs) Serial.print (Int_Sleep_Duration - Int_Minutes); if (Logs) Serial.println ("minutes)"); somn (Int_Sleep_Duration - Int_Minutes); } // Deepsleep if sunday if (String (ctime (& tnow)). Substring (0, 3) == "Sun") {if (Logs) Serial.print ("Sleep pour le dimanche ("); if (Logs) Serial.print (Int_Sleep_Duration - Int_Minutes); if (Logs) Serial.println ("minute)"); somn (Int_Sleep_Duration - Int_Minutes); } // Gestionarea stufului Switch_State_OUT = digitalRead (PIN_SWITCH_OUT); if (Switch_State_OUT! = Old_Switch_State_OUT) {if (millis () - switchPressTime> = DEBOUCE_TIME) {switchPressTime = millis (); if (Switch_State_OUT == HIGH) {Serial.println ("courrier relevé!"); rețea (adevărat); întârziere (5000); MQTT_Pubilsh (IDX_Letter_Box, 0, "0"); întârziere (5000); MQTT_Pubilsh (IDX_Parcel_Box, 0, "0"); întârziere (5000); rețea (fals); }} 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 (millis () - switchPressTime> = DEBOUCE_TIME) {switchPressTime = millis (); if (Switch_State_IN_LETTER == HIGH) {Serial.println ("courrier arrivé!"); rețea (adevărat); întârziere (5000); MQTT_Pubilsh (IDX_Letter_Box, 1, „Curier”); întârziere (5000); rețea (fals); }} 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 (millis () - switchPressTime> = DEBOUCE_TIME) {switchPressTime = millis (); if (Switch_State_IN_PARCEL == HIGH) {Serial.println ("colis arrivé!"); rețea (adevărat); întârziere (5000); MQTT_Pubilsh (IDX_Parcel_Box, 1, "Colis"); întârziere (5000); rețea (fals); }} Old_Switch_State_IN_PARCEL = Switch_State_IN_PARCEL; }} void SendBatteryLevel () {delay (5000); vcc = analogRead (PIN_ANALOG) /10.24; if (Logs) Serial.println ("\ tTension relevée:" + String (vcc, 0)); MQTT_Pubilsh (IDX_Letter_Box_Battery, 0, String (vcc, 0)); întârziere (5000); } void sleep (int Min_Duration) {ESP.deepSleep (Min_Duration * 60e6); } void network (bool UpDown) {if (UpDown) {Serial.print ("Start rețea"); WiFi.forceSleepWake (); întârziere (1); // init WIFI WiFi.config (ip, dns, gateway, subrețea); WiFi.begin (ssid, parolă); while (WiFi.status ()! = WL_CONNECTED) {întârziere (500); Serial.print ("."); } întârziere (5000); Serial.println ("."); Serial.print ("\ tConnected - Adresa IP:"); Serial.println (WiFi.localIP ()); // init MQTT ClientMQTT.setServer (MQTT_Server_IP, MQTT_Server_Port); // Initial NTP Serial.print ("\ tTime Synch."); configTime (0, 0," fr.pool.ntp.org "); setenv (" TZ "," CET-1CEST, M3.5.0, M10.5.0 / 3 ", 0); while (time (nullptr) <= 100000) {Serial.print ("."); Delay (100);} Serial.println (".");} Else {Serial.println ("Network stop."); WiFi.disconnect (); delay (1000); WiFi.mode (WIFI_OFF); delay (1000); WiFi.forceSleepBegin (); delay (1);}} void reconnect () {while (! ClientMQTT.connected ()) {Serial.print (" / t Încercarea conexiunii MQTT … "); // Încercați să vă conectați dacă (ClientMQTT.connect (" ESP8266ClientBAL ")) {Serial.println (" conectat ");} else {Serial.print (" nereușit, rc = "); Serial.print (ClientMQTT.state ()); Serial.println ("încercați din nou în 5 secunde"); // Așteptați 5 secunde înainte de a reîncerca întârzierea (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 ("\ tSend info to MQTT …"); MQTT_Pub_String = "{" idx / ":" + String (Int_IDX) + ", \" Battery / ":" + String (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 (); }

Pasul 11: Domoticz

Domoticz
Domoticz
Domoticz
Domoticz
Domoticz
Domoticz

În Domoticz:

Pentru uz general:

  • Creați două „Dummy (nu face nimic, utilizați pentru comutatoare virtuale)”:

    1. Primul pentru litere …
    2. Al doilea pentru colete …
  • Pentru fiecare dintre ele, personalizați notificările;
  • Desigur, trebuie să configurați jetonul Tegegram.

Opțional:

Puteți adăuga un „senzor utilitar” pentru a vă supraveghea nivelul de încărcare a bateriei.

Sfaturi: aici puteți găsi o mulțime de icoane personalizate gratuite …

Pasul 12: Concluzie

Concluzie
Concluzie
Concluzie
Concluzie

Sper că acest instructable vă va ajuta:

  • dacă îți creezi propria casetă de scrisori conectată;
  • sau doar pentru a-ți oferi câteva idei pentru proiectele tale!

Dacă aveți idei de îmbunătățiri, ascult!

PS: îmi pare rău pentru engleză, traducerea Google mă ajută foarte mult, dar probabil că nu este perfectă;-)

Recomandat: