Spisu treści:

Połączona skrzynka na listy Zasilana energią słoneczną: 12 kroków (ze zdjęciami)
Połączona skrzynka na listy Zasilana energią słoneczną: 12 kroków (ze zdjęciami)

Wideo: Połączona skrzynka na listy Zasilana energią słoneczną: 12 kroków (ze zdjęciami)

Wideo: Połączona skrzynka na listy Zasilana energią słoneczną: 12 kroków (ze zdjęciami)
Wideo: Doda i jej miny podczas przemówienia Górniak (oryg. cezarywisniewski_) 2024, Listopad
Anonim
Połączona Skrzynka na listy Zasilana energią słoneczną
Połączona Skrzynka na listy Zasilana energią słoneczną
Połączona Skrzynka na listy Zasilana energią słoneczną
Połączona Skrzynka na listy Zasilana energią słoneczną

W moim drugim Ible opiszę ci moje prace dotyczące mojej połączonej skrzynki na listy.

Po przeczytaniu tego Instructable (+ wielu innych), a ponieważ moja skrzynka na listy nie znajduje się w pobliżu mojego domu, chciałem zainspirować mnie pracami Open Green Energy, aby podłączyć moją skrzynkę na listy do mojego serwera Domoticz.

Cele

  • Otrzymuj informacje od Telegrama, gdy nadchodzą listy;
  • Bądź poinformowany przez Telegram, gdy nadejdzie paczka;
  • Sprawdź, czy listy/paczki zostały odebrane.

Moje główne ograniczenie

Skrzynka na listy jest stosunkowo daleko od domu i nie można było podciągnąć do niej kabla elektrycznego, aby cokolwiek zasilić.

Musiałem znaleźć inne rozwiązanie: energia słoneczna była dobrym rozwiązaniem!

BOM

  • Raspberry Pi (do hostowania części MQTT i Domoticz - nieopisane tutaj)
  • Konto Telegram Bota
  • Lolin D1 mini (lub Wemos…)
  • Wtykowe złącze bloku zacisków śrubowych
  • Płytka do ładowania baterii litowej TP4056
  • Panel słoneczny fotowoltaiczny 6V 2W
  • Akumulator litowo-jonowy 18650
  • Uchwyt baterii litowo-jonowej
  • PCB DIY lutowanie prototypowe miedziane płytki drukowane
  • Serwo analogowe SG90
  • 3 kontaktrony (jeden do listów, jeden do paczki i jeden do kasy)
  • Magnesy
  • Niektóre przewody
  • Drewniana skrzynia: Ponieważ nie dostałem żadnej drukarki 3D, zrealizowałem swój własny mały domek z drewna do odbioru części elektronicznych…
  • Zapasowy kabel Ethernet
  • Płytka zaciskowa złącza Ethernet RJ45

  • Spoina J-B
  • Niektóre łożyska kulkowe
  • Śruby, nakrętki, podkładki

Krok 1: Globalny Schemat

Globalny schemat
Globalny schemat
Globalny schemat
Globalny schemat

Piękne rysunki są zawsze lepsze niż długie przemówienia;-)

Ale kilka wyjaśnień na temat MQTT, Domoticza i Telegrama jest zawsze mile widziane!

MQTT (Message Queuing Telemetry Transport), to protokół przesyłania wiadomości, używany do przesyłania danych między urządzeniami i innymi systemami w świecie IoT (Internet rzeczy).

Nie wchodząc w szczegóły, jego działanie opiera się na zasadzie klientów łączących się z serwerem. W MQTT klienci nazywani są subskrybentem lub wydawcą, a serwer nazywa się brokerem.

W tej Instrukcji używam tylko jednego wydawcy, Lolina podłączonego do mojej skrzynki na listy: gdy listy lub paczki zostaną wykryte za pomocą kontaktów kontaktronowych zainstalowanych w skrzynce na listy (krok 1 w shematic), wyślij wiadomość MQTT przez WIFI do brokera (krok 2).

Część Brokera jest wykonywana przez Mosquitto, który jest zainstalowany na Raspberry Pi (Krok 3).

O Domoticzu:

Jak opisano na stronie źródłowej, Domoticz jest „systemem automatyki domowej”, umożliwiającym sterowanie różnymi urządzeniami i odbieranie danych wejściowych z różnych protokołów: MQTT jest jednym z obsługiwanych protokołów…

Gdy tylko dotrą do niego informacje (krok 4), możesz zdefiniować zdarzenia: W przypadku skrzynki na listy wybrałem wysłanie powiadomienia Telegram (krok 5).

Wreszcie klient Telegrama jest skonfigurowany na moim telefonie (i moja żona też! - Krok 6): cel końcowy został osiągnięty…

Krok 2: Shematic / Okablowanie

Shematyczny / Okablowanie
Shematyczny / Okablowanie
Shematyczny / Okablowanie
Shematyczny / Okablowanie
Shematyczny / Okablowanie
Shematyczny / Okablowanie
Shematyczny / Okablowanie
Shematyczny / Okablowanie

Jedno słowo o analogu przeczytaj:

Przede wszystkim zauważyłem po kilku badaniach, że Lolin mini D1 (jak stary Wemos), ma wbudowany dzielnik napięcia dla pinu A0 (biorąc pod uwagę 220KΩ dla R1 i 100KΩ dla R2 - patrz po prawej stronie połączonego arkusza danych), dopuszczając 3,2 V jako maksymalne analogowe napięcie wejściowe.

Biorąc pod uwagę, że maksymalne napięcie wyjściowe z akumulatora wynosi 4,2 V (ograniczone przez płytkę ładującą) i teoretycznie wystarczy dodać zewnętrzny rezystor (w szeregu z R1), aby zwiększyć maksymalny zakres napięcia wejściowego. Następnie, jeśli dodasz 100K szeregowo z R1, otrzymasz następujący wynik:

Vin * R1/(R1+R2) = Vout

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

W moim obwodzie zdecydowałem się na możliwość dostosowania jego wartości, dlatego wolałem zastosować w swoim obwodzie regulowany rezystor: może będzie dla ciebie bezużyteczny, ale w mojej sytuacji ustawiłem jego wartość na około 10KΩ, aby mieć spójna wartość w Domoticz…

Zauważ, że pin A0 ma rozdzielczość 10 bitów: oznacza to, że w twoim szkicu odczyt analogowy zwróci wartość od 0 do 1024.

Ponieważ chcę wysłać wartość procentową do Domoticza, muszę podzielić wynik odczytu analogowego przez 10, 24.

Krok 3: Zarządzanie energią

Zarządzanie energią
Zarządzanie energią
Zarządzanie energią
Zarządzanie energią

Oczywiście chcę, żeby skrzynka na listy była autonomiczna. Aby osiągnąć swój cel, używam tych elementów:

  • bateria litowo-jonowa 18650 o pojemności 4000 mAh;
  • panel słoneczny, który może dostarczyć 6V / 2W;
  • płytka do ładowania baterii litowej TP4056.

Aby wybrać najbardziej odpowiedni panel słoneczny, przyjrzałem się kilku przykładom, w tym ten: w tym przykładzie zastosowano panel słoneczny 5,5 V / 0,66 W, który prawdopodobnie jest wystarczający do tego celu. W moim przypadku, a ponieważ ESP8266 musi pozostać WŁĄCZONY w ciągu dnia i musi być w stanie uruchomić silnik serwo, aby utrzymać dom twarzą do słońca, wybrałem mocniejszy model z panelem słonecznym (6V / 2W) - To również pozwala mi przewidywać ciemne okresy zimowe i pochmurne dni;-)

Ponadto, aby maksymalnie ograniczyć wydatek energetyczny, wybrałem następujące scenariusze:

  • wiedząc, że listonosz mija tylko między 7:00 a 20:00, ESP jest umieszczany w DeepSleep na resztę nocy;
  • Czynnik nie przechodzi między sobotnią południem a poniedziałkiem rano: ESP jest również w tym okresie umieszczony w trybie DeepSleep.
  • Na okres między 7 rano a 20 wieczorem, aby zmniejszyć zużycie energii, po prostu wyłączam interfejs sieciowy ESP: sieć jest restartowana dopiero po nadejściu paczki lub listu, akurat tyle czasu, aby wysłać informację do Domoticz. Nie trzeba mnie od razu ostrzegać, a kilka dodatkowych sekund potrzebnych na ponowne uruchomienie interfejsu sieciowego nie jest szkodliwe!

Niektóre wartości dotyczące zużycia w różnych trybach, których używam w Lolin - spójrz na arkusz danych, p18:

  • W trybie normalnym (przy pracy RF) pobór mocy może wzrosnąć do 170mA! Ponieważ moja skrzynka na listy znajduje się około 50 metrów od mojego domu (i na granicy sygnału WIFI…) przypuszczam, że moc używana do podtrzymania połączenia jest na jego max…
  • W trybie uśpienia modemu pobór mocy spada do 15mA. Ale jak widać w arkuszu danych, nie zatrzymało to całkowicie modemu, ponieważ ESP „utrzymuje połączenie Wi-Fi bez transmisji danych”.
  • W głębokim śnie moc spada do 20uA.

Aby mieć pewność, że wifi nie pozostaje niepotrzebnie aktywne, wolałem je wyłączyć za pomocą poniższych poleceń. Zwróć uwagę na wywołanie wielu delay()… Bez nich awaria ESP:

Wi-Fi.rozłącz();

opóźnienie (1000); tryb WiFi (WIFI_OFF); opóźnienie (1000); WiFi.forceUśpijRozpocznij(); opóźnienie(1);

Ogólnie rzecz biorąc, po kilku dniach pracy wydaje się działać, a zwłaszcza poprawnie ładować:

  • to pozwala mi uruchamiać serwomotor co godzinę, aby ustawić dom w kierunku słońca;
  • Mogę też pozwolić sobie na reaktywację interfejsu sieciowego co godzinę, aby przesłać do Domoticza poziom naładowania baterii.

Krok 4: Instalowanie magnesów i kontaktronów

Instalowanie magnesów i kontaktronów
Instalowanie magnesów i kontaktronów
Instalowanie magnesów i kontaktronów
Instalowanie magnesów i kontaktronów
Instalowanie magnesów i kontaktronów
Instalowanie magnesów i kontaktronów

Jak zwykle użyłem mojego Proxxona do ukształtowania miejsca Reed w kawałku drewna.

Aby naprawić kontaktron w jego otworze, użyłem trochę spoiny J-B.

Do paczki i wyjścia kawałek taśmy, trochę piły do metalu i cel osiągnięty!

Zaletą mojej skrzynki na listy jest to, że jest metalowa, co ułatwia pozycjonowanie magnesów tak, aby prawidłowo współpracowała z kontaktronami.

Krok 5: Połącz się z moim małym domkiem

Połącz się z moim małym domkiem
Połącz się z moim małym domkiem
Połącz się z moim małym domkiem
Połącz się z moim małym domkiem

Aby móc łatwo podłączyć i odłączyć kabel prowadzący do styków kontaktronowych od skrzynki na listy do domu, wybrałem złącze Ethernet.

Możesz użyć tego modelu lub, tak jak ja, użyć starego nakładki Arduino Ethernet, która wisi w moich szufladach: Nie cierpiał, był odważny przed piłą, jego śmierć była szybka ^^

Tylko słowo na temat tego ekranu Arduino Ethernet: nie oczekuj 8 oddzielnych sterowników … Kable są sparowane po 2 wewnątrz ekranu … Zbyt długo doprowadzało mnie to do szału !!!

Krok 6: W domu…

W domu …
W domu …
W domu …
W domu …

Wystarczy miejsce na zamocowanie uchwytu baterii, ustawienie serwa i złącze żeńskie RJ45.

Krok 7: Niech gramofon…

Niech gramofon…
Niech gramofon…
Niech gramofon…
Niech gramofon…
Niech gramofon…
Niech gramofon…
Niech gramofon…
Niech gramofon…

Celem jest trzymanie go twarzą do słońca…

Aby pozwolić na obracanie się, użyłem długiej śruby jako osi, z kilkoma nakrętkami i dwoma łożyskami kulkowymi…

Do tej pory używałem serwa SG90 (moment obrotowy: 1,8kg/cm przy 4,8v).

Wystarczy obrócić dom (i jego kilka gramów). Z drugiej strony nie jestem pewien, czy jego plastikowe zębatki długo wytrzymają częste podmuchy wiatru, które występują w moim regionie.

Zamówiłem jeszcze jeden (moment obrotowy MG995: 9,4 kg/cm przy 4,8 v), też niezbyt drogi, ale z metalowymi zębatkami.

To będzie następna rzecz, którą zrobię, gdy ją otrzymam: polegam na mojej skrzynce pocztowej, aby powiadomić mnie o jego przybyciu!

Krok 8: Niektóre testy

Image
Image

Kilka uwag:

Ten szkic ma jedynie naśladować zmiany godzin w ciągu dnia, abym mógł kontrolować położenie serwomechanizmu.

  • Z SG90: bez dodatkowych potrzeb, może pracować z napięciem OUT pochodzącym z kontrolera baterii.
  • Ale z MG 995:

    • Całkowity kąt obrotu nie jest taki sam (szerszy): musiałem użyć dodatkowej funkcji, aby go zmniejszyć (Servo_Delta()).
    • Potrzebujesz podwyższenia napięcia DC/DC, aby zapewnić wystarczające napięcie do serwomechanizmu… aby kontynuować…

/*

- TEST z SG90: bez dodatkowych potrzeb, może pracować z napięciem OUT pochodzącym z kontrolera baterii - DLA MG 995: - użyj funkcji Servo_Delta()… - Potrzebujesz DC/DC Step up, aby dostarczyć wystarczające napięcie do serwa… kontynuuj: */ #include bool Logi = true; Serwo myservo; #define PIN_SERVO D2 // pozycja serwa dla: 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 stary; poz; wew; void setup() { Serial.begin(115200); } void loop() { for(i = 7; i <= 22; i++){ old = i; if (i == 7){ if (Dzienniki) 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 (indeks); if (Logs) Serial.print ("Dostosowana wartość: "); if (Dzienniki) Serial.println(Servo_Delta(indeks)); opóźnienie(200); //myservo.write(Servo_Delta(indeks)); myservo.write(indeks); } opóźnienie(15); myservo.write(Arr_Servo_Pos[i-7]); // napisz ponownie ostatnią wartość, aby uniknąć gwałtownych ruchów podczas datach myservo.detach(); } } } opóźnienie(2000); } } int Servo_Delta(int wartość){ int Temp_val; Temp_val = (wartość*0,80)+9; zwróć wartość_czasowa; }

Krok 9: Mały dom

Mały Dom
Mały Dom
Mały Dom
Mały Dom
Mały Dom
Mały Dom

Jak powiedziałem wcześniej, nie dostałem żadnej drukarki 3D. Postanawiam więc użyć starej skrzynki na warzywa…

Może nie wytrzyma długo, ale do tego czasu będę miał czas rozważyć inne rozwiązanie (lub przyjaciela, który ma drukarkę 3D): aby chronić drewno, wszędzie dodałem dużo lakieru…

Widać „ładne zasłony”… Tak się dzieje, gdy poprosisz żonę o wykonanie tej pracy ^^

Krok 10: Szkic

W trakcie … Ale wydaje się być stabilny

Wciąż pracuję nad kodem: ponieważ nie jest to wersja ostateczna, mile widziane są Wasze komentarze/rady;-)

Kilka uwag:

  • Jest wiele opóźnień() w kodzie: ma to na celu uniknięcie wielu awarii Lolina, zwłaszcza podczas zatrzymywania sieci startowej…
  • Nie znalazłem łatwego i niezawodnego sposobu na uzyskanie azymutu słońca: dlatego ustaliłem wartość serwa w zależności od tego, co zaobserwowałem… Mam dobry (i prosty) sposób na to, jestem zainteresowany !Może ścieżka do nauki tutaj, nawet jeśli wolę API online, daje mi azymut bezpośrednio według daty, godziny i położenia geograficznego…
  • O technice uśpienia: ponieważ Lolin jest 32-bitowym procesorem Tensilica, jego maksymalna wartość dla 32-bitowej liczby całkowitej bez znaku to 4294967295 … wtedy daje to około 71 minut na interwał głębokiego uśpienia. Dlatego przesypiam l'ESP wiele razy po około 60 minut…

EDYCJA - 08.10.2018:

Odkryłem, że serwo ma dużo gwałtownych ruchów, zwłaszcza przed attach(), detach() i za każdym razem, gdy Lolin budzi się z deepSleep().

Studiując nieco więcej arkuszy danych, zdałem sobie sprawę z dwóch rzeczy:

  • W arkuszu danych Lolin wyjście D4 jest już połączone z BUILTIN_LED …
  • W arkuszu danych ESP8266ex dowiadujemy się, że wyjście D4 jest używane jako UART 1/U 1 TXD (Universal Asynchronous Receiver Transmitter). Określono również, że ten UART1 jest używany do drukowania dziennika.

Czytając te informacje, zdałem sobie sprawę, że wyjście D4 nie było dobrym pomysłem, zwłaszcza do zarządzania serwomotorem!

Tak więc teraz wyjściem używanym do sterowania serwomotorem jest D2, poniższy kod został odpowiednio zaktualizowany.

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

Data utworzenia: 08/Data mise en prod: 08/Wersja: 0.9.4 Wersja IDE Arduino: 1.8.6 Szybkość wysyłania: 921600 Typ de carte dans l'IDE: "LOLIN(WEMOS) D1 R2 & mini" Pracownik fizyczny: LOLIN (WEMOS) D1 R2 i mini (https://www.amazon.fr/gp/product/B01ELFAF1S/ref=oh_aui_detailpage_o00_s00?ie=UTF8&psc=1) Funkcja pinów ESP-8266 Lokalizacja pinów ------- -------------------------------------------------- ------------------------------------ TX TXD TXD RX RXD RXD A0 Wejście analogowe, max 3.3V wejście A0 Napięcie zasilania D0 IO GPIO16 Połączenie z RST (do głębokiego snu) D1 IO, SCL GPIO5 D2 IO, SDA GPIO4 Serwomotor D3 IO, 10k Pull-up GPIO0 D4 IO, 10k pull-up, BUILTIN_LED GPIO, SCK GPIO14 Reed reed D6 IO, MISO GPIO12 Reed lettre D7 IO, MOSI GPIO13 Reed colis D8 IO, 10k pull-down, SS GPIO15 G Uziemienie GND 5V 5V – 3V3 3.3V 3.3V RST Reset RST Connecté à D0 (pour le deep.sleep) ****************************************/ #include bool Logi = prawda; // wifi const char* ssid = "LOL"; const char* hasło = "LOL"; Adres IP ip(192, 168, 000, 000); Adres IP dns(192, 168, 000, 000); Brama IPAddress(192, 168, 000, 000); Podsieć adresu IP (255, 255, 000, 000); Klient WiFiClient; // Serwo #include #define PIN_SERVO D2 Serwo myservo; // pozycja serwa dla: 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 bajt Old_Switch_State_OUT; bajt Switch_State_OUT; #define PIN_SWITCH_IN_PARCEL D6 bajt Old_Switch_State_IN_PARCEL; bajt Switch_State_IN_PARCEL; #define PIN_SWITCH_IN_LETTER D7 bajt Old_Switch_State_IN_LETTER; bajt Switch_State_IN_LETTER; unsigned long switchPressTime; const unsigned long DEBOUCE_TIME = 200; // Analogowe #define PIN_ANALOG A0 // MQTT #include const char* MQTT_Server_IP = "Twój adres MQTT"; const int MQTT_Server_Port =; int IDX_Letter_Box =; int IDX_Parcel_Box =; int IDX_Letter_Box_Battery =; PubSubClient ClientMQTT(klient); znak MQTT_Message_Buff[70]; Ciąg MQTT_Pub_String; // Pływak napięcia vcc; // NTP #include time_t tnow; int Stary_Czas = 0; int Int_Heures = 0; int_Minuty = 0; int Int_Sleep_Duration = 63; void setup(){ Serial.begin(115200); sieć (prawda); 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 = odczyt cyfrowy (PIN_SWITCH_IN_LETTER); pinMode (PIN_SWITCH_IN_PARCEL, INPUT_PULLUP); Old_Switch_State_IN_PARCEL = Odczyt cyfrowy (PIN_SWITCH_IN_PARCEL); SendBatteryLevel(); sieć (fałsz); // ustawienie NTP tnow = time(nullptr); Int_Heures = String(ctime(&tnow)).substring(11, 13).toInt(); Int_Minuty = String(ctime(&tnow)).substring(14, 16).toInt(); // Głęboki sen na noc if(!((Int_Heures >= 7) && (Int_Heures <= 20))){ Serial.print("Sleep pour la nuit ("); Serial.print(Int_Sleep_Duration - Int_Minutes); Serial. println("minuty)"); sen(Int_Sleep_Duration - Int_Minutes); } } void loop() { // NTP set tnow = time(nullptr); Int_Heures = String(ctime(&tnow)).substring(11, 13).toInt(); Int_Minuty = 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()); // Zarządzanie serwomechanizmami 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 (indeks); opóźnienie(200); myservo.write(indeks); } opóźnienie(15); myservo.write(Arr_Servo_Pos[Int_Heures-7]); // napisz ponownie ostatnią wartość, aby uniknąć gwałtownych ruchów podczas odłączania myservo.detach(); } sieć(prawda); SendBatteryLevel(); sieć (fałsz); } } } // Deepsleep if sobota po 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("minuty)"); sen(Int_Sleep_Duration - Int_Minutes); } // Deepsleep if sunday if(String(ctime(&tnow)).substring(0, 3) == "Sun"){ if (Dzienniki) Serial.print("Sleep pour le dimanche ("); if (Dzienniki) Serial.print(Int_Sleep_Duration - Int_Minutes); if (Logs) Serial.println("minuty)"); sen(Int_Sleep_Duration - Int_Minutes); } // Zarządzanie stroikami 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é!"); sieć (prawda); opóźnienie(5000); MQTT_Pubilsh(IDX_Letter_Box, 0, "0"); opóźnienie(5000); MQTT_Pubilsh(IDX_Parcel_Box, 0, "0"); opóźnienie(5000); sieć (fałsz); } } 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 ("przybycie kurierem!"); sieć (prawda); opóźnienie(5000); MQTT_Pubilsh(IDX_Letter_Box, 1, "Kurier"); opóźnienie(5000); sieć (fałsz); } } Old_Switch_State_IN_LETTER = Switch_State_IN_LETTER; } Switch_State_IN_PARCEL = odczyt cyfrowy (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é!"); sieć (prawda); opóźnienie(5000); MQTT_Pubilsh(IDX_Parcel_Box, 1, "Colis"); opóźnienie(5000); sieć (fałsz); } } Old_Switch_State_IN_PARCEL = Switch_State_IN_PARCEL; } } void SendBatteryLevel(){ delay(5000); vcc = odczyt analogowy (PIN_ANALOG)/10.24; if (Dzienniki) Serial.println ("\tTension relevée: " + String(vcc, 0)); MQTT_Pubilsh(IDX_Letter_Box_Battery, 0, Ciąg (vcc, 0)); opóźnienie(5000); } void sleep(int Min_Duration){ ESP.deepSleep(Min_Duration * 60e6); } void network(bool UpDown){ if (UpDown){ Serial.print("Rozpoczęcie sieci "); WiFi.forceUśpijWybudź(); opóźnienie(1); // init WIFI WiFi.config(ip, dns, brama, podsieć); WiFi.begin(SSid, hasło); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } opóźnienie(5000); Serial.println("."); Serial.print("\tPołączony - adres IP: "); Serial.println(WiFi.localIP()); // inicjowanie MQTT KlientMQTT.setServer(MQTT_Server_IP, MQTT_Server_Port); // Rozpocznij NTP Serial.print("\tSynchronizacja czasu."); 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("Zatrzymanie sieci.");WiFi.disconnect(); delay(1000); WiFi.mode(WIFI_OFF); delay(1000); WiFi.forceSleepBegin(); delay(1); } } void reconnect() { while (!ClientMQTT.connected()) { Serial.print(" \tPróba połączenia MQTT…"); // Próba połączenia if (ClientMQTT.connect("ESP8266ClientBAL")) { Serial.println("connected"); } else { Serial.print("failed, rc="); Serial.print(ClientMQTT.state()); Serial.println("spróbuj ponownie za 5 sekund"); // Odczekaj 5 sekund przed ponowną próbą delay(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("\tWyślij informacje do 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); KlientMQTT.disconnect(); }

Krok 11: Domoticz

Domoticz
Domoticz
Domoticz
Domoticz
Domoticz
Domoticz

W Domoticzu:

Do ogólnego użytku:

  • Utwórz dwa „Atrapy (nic nie robi, użyj do przełączników wirtualnych)”:

    1. Pierwszy na listy…
    2. Drugi za paczkę…
  • Dla każdego z nich spersonalizuj powiadomienia;
  • Oczywiście musisz skonfigurować swój token Tegegram.

Opcjonalnie:

Możesz dodać „Czujnik narzędzi”, aby nadzorować poziom naładowania baterii.

Wskazówki: tutaj znajdziesz wiele darmowych ikon niestandardowych…

Krok 12: Wniosek

Wniosek
Wniosek
Wniosek
Wniosek

Mam nadzieję, że ta instrukcja pomoże ci:

  • czy zrobić własną podłączoną skrzynkę na listy;
  • lub po prostu podsunąć Ci pomysły na Twoje projekty!

Jeśli masz pomysły na ulepszenia, słucham!

PS: przepraszam za mój angielski, tłumaczenie Google bardzo mi pomaga, ale prawdopodobnie nie jest idealne;-)

Zalecana: