Daftar Isi:

Kotak Surat Terhubung Tenaga Surya: 12 Langkah (dengan Gambar)
Kotak Surat Terhubung Tenaga Surya: 12 Langkah (dengan Gambar)

Video: Kotak Surat Terhubung Tenaga Surya: 12 Langkah (dengan Gambar)

Video: Kotak Surat Terhubung Tenaga Surya: 12 Langkah (dengan Gambar)
Video: Rangkaian Seri dan Paralel Panel Surya 2024, Juli
Anonim
Kotak Surat Terhubung Tenaga Surya
Kotak Surat Terhubung Tenaga Surya
Kotak Surat Terhubung Tenaga Surya
Kotak Surat Terhubung Tenaga Surya

Untuk Ible kedua saya, saya akan menjelaskan kepada Anda karya-karya saya tentang kotak surat saya yang terhubung.

Setelah membaca Instruksi ini (+ banyak lainnya), dan karena kotak surat saya tidak dekat dengan rumah saya, saya ingin menginspirasi saya tentang karya-karya Open Green Energy untuk menghubungkan kotak surat saya ke server Domoticz saya.

Sasaran

  • Diberitahu oleh Telegram ketika surat datang;
  • Diberitahu oleh Telegram ketika sebuah paket datang;
  • Cek apakah surat/paket sudah diambil.

Kendala utama saya

Kotak surat itu relatif jauh dari rumah, dan tidak mungkin menarik kabel listrik ke sana untuk menyalakan apa pun.

Saya harus mencari solusi lain: tenaga surya adalah solusi yang bagus!

BOM

  • Raspberry Pi (untuk meng-host bagian MQTT dan Domoticz - tidak dijelaskan di sini)
  • Akun Bot Telegram
  • Lolin D1 mini (atau Wemos …)
  • Konektor Blok Terminal Sekrup Plug-In
  • Papan Pengisian Baterai Lithium TP4056
  • Panel Surya Fotovoltaik 6V 2W
  • Baterai Li-Ion 18650
  • Tempat baterai Li-Ion
  • PCB DIY Soldering Tembaga Prototipe Papan Sirkuit Cetak
  • Servo Analog SG90
  • 3 Reed Switch (satu untuk surat, satu untuk parsel dan satu untuk checkout)
  • magnet
  • Beberapa kabel
  • Peti kayu: Karena tidak mendapatkan printer 3D, saya menyadari rumah kecil saya sendiri dengan kayu untuk menerima suku cadang elektronik …
  • Cadangan kabel Ethernet
  • Papan Breakout Konektor Ethernet RJ45

  • las JB
  • Beberapa bantalan bola
  • Sekrup, mur, ring

Langkah 1: Skema Global

Skema Global
Skema Global
Skema Global
Skema Global

Gambar yang indah selalu lebih baik daripada pidato panjang;-)

Tetapi beberapa penjelasan tentang MQTT, Domoticz dan Telegram selalu diterima!

MQTT (Message Queuing Telemetry Transport), adalah protokol pengiriman pesan, yang digunakan untuk mengirim data antara perangkat dan sistem lain di dunia IoT (Internet of things).

Tanpa terlalu banyak detail, operasinya didasarkan pada prinsip klien yang terhubung ke server. Di MQTT, klien disebut Subscriber atau Publisher, dan server disebut Broker.

Dalam Instruksi ini, saya hanya menggunakan satu penerbit, Lolin yang disambungkan ke kotak surat saya: ketika surat atau paket terdeteksi melalui kontak buluh yang dipasang di kotak surat (Langkah 1 dalam shematic), ini mengirim pesan MQTT melalui WIFI ke Broker (Langkah 2).

Bagian Broker dilakukan oleh Mosquitto, yang diinstal pada Raspberry Pi (Langkah 3).

Tentang Domoticz:

Seperti yang dijelaskan di halaman sumber, Domoticz adalah "sistem otomatisasi rumah", memungkinkan Anda untuk mengontrol berbagai perangkat dan menerima masukan dari berbagai protokol: MQTT adalah salah satu protokol yang didukung …

Segera setelah informasi sampai padanya (Langkah 4), Anda dapat menentukan acara: Dalam kasus kotak surat, saya memilih untuk mengirim pemberitahuan Telegram (Langkah 5).

Akhirnya, klien Telegram dikonfigurasi di ponsel saya (dan juga istri saya! - Langkah 6): tujuan akhir tercapai…

Langkah 2: Shematic / Pengkabelan

Shematic / Pengkabelan
Shematic / Pengkabelan
Shematic / Pengkabelan
Shematic / Pengkabelan
Shematic / Pengkabelan
Shematic / Pengkabelan
Shematic / Pengkabelan
Shematic / Pengkabelan

Satu kata tentang analog baca:

Pertama-tama, saya perhatikan setelah beberapa penelitian bahwa Lolin mini D1 (sebagai Wemos lama), telah membangun pembagi tegangan untuk pin A0 (mempertimbangkan 220KΩ untuk R1 dan 100KΩ untuk R2 - lihat di sebelah kanan lembar data yang ditautkan), memungkinkan 3,2 Volt sebagai tegangan input analog maksimum.

Mengingat tegangan output maksimum dari baterai adalah 4, 2v (dibatasi oleh papan pengisi daya), dan secara teori, Anda hanya perlu menambahkan resistor eksternal (secara seri dengan R1) untuk meningkatkan rentang tegangan input maksimum. Kemudian, jika Anda menambahkan 100K secara seri dengan R1, Anda akan mendapatkan hasil ini:

Vin * R1/(R1+R2) = Vout

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

Di sirkuit saya, saya memilih untuk dapat menyesuaikan nilainya, itu sebabnya saya lebih suka menggunakan resistor yang dapat disesuaikan di sirkuit saya: mungkin itu tidak berguna untuk Anda, tetapi dalam situasi saya, saya menetapkan nilainya sekitar 10KΩ untuk memiliki nilai yang koheren di Domoticz …

Perhatikan bahwa pin A0 memiliki resolusi 10 bit: ini berarti bahwa dalam sketsa Anda, pembacaan analog Anda akan mengembalikan nilai antara 0 hingga 1024.

Karena saya ingin mengirim nilai persentase ke Domoticz, saya harus membagi hasil pembacaan analog dengan 10, 24.

Langkah 3: Manajemen Daya

Manajemen Daya
Manajemen Daya
Manajemen Daya
Manajemen Daya

Tentu saja, saya ingin kotak surat itu otonom. Untuk mencapai tujuan saya, saya menggunakan elemen-elemen ini:

  • baterai Li-Ion 18650 4000mAh;
  • panel surya yang dapat menghasilkan 6V / 2W;
  • papan pengisian Baterai Lithium TP4056.

Untuk memilih panel surya yang paling cocok, saya melihat beberapa contoh, termasuk yang ini: dalam contoh ini, panel surya 5,5V / 0,66W digunakan, dan mungkin cukup untuk tujuan tersebut. Dalam kasus saya, dan karena ESP8266 harus tetap AKTIF di siang hari dan harus dapat menjalankan motor servo agar rumah tetap menghadap matahari, saya memilih model panel surya yang lebih kuat (6V / 2W) - Ini juga memungkinkan saya untuk mengantisipasi periode musim dingin yang gelap dan hari berawan;-)

Juga, dan untuk mengurangi pengeluaran energi secara maksimal, saya telah memilih skenario berikut:

  • mengetahui bahwa tukang pos hanya lewat antara jam 7 pagi dan 8 malam, ESP ditempatkan di DeepSleep sepanjang malam;
  • Faktornya tidak lewat antara Sabtu siang dan Senin pagi: ESP juga ditempatkan dalam mode DeepSleep selama periode ini.
  • Untuk periode antara 7 pagi dan 8 malam, dan untuk mengurangi konsumsi daya, saya cukup menonaktifkan antarmuka jaringan ESP: jaringan dimulai ulang hanya pada saat kedatangan paket atau surat, cukup waktu untuk mengirim informasi ke Domoticz. I tidak perlu diperingatkan segera dan beberapa detik tambahan yang diperlukan untuk me-restart antarmuka jaringan tidak berbahaya!

Beberapa nilai tentang konsumsi dalam mode berbeda yang saya gunakan untuk Lolin - lihat lembar data, p18:

  • Dalam mode normal (dengan RF bekerja), konsumsi daya dapat meningkat menjadi 170mA! Karena kotak surat saya berjarak sekitar 50 meter dari rumah saya (dan pada batas sinyal WIFI …) saya kira daya yang digunakan untuk menjaga koneksi adalah maksimal …
  • Dalam modem-sleep, konsumsi daya turun menjadi 15mA. Tetapi seperti yang Anda lihat di lembar data, itu tidak sepenuhnya menghentikan modem, karena ESP "menjaga koneksi Wi-Fi tanpa transmisi data".
  • Dalam tidur nyenyak, daya turun menjadi 20uA.

Untuk memastikan bahwa wifi tidak tetap aktif jika tidak perlu, saya lebih suka menonaktifkannya dengan perintah berikut. Perhatikan banyak panggilan delay() … Tanpa mereka, ESP crash:

WiFi.putuskan();

penundaan (1000); WiFi.mode(WIFI_OFF); penundaan (1000); WiFi.forceSleepBegin(); penundaan (1);

Secara keseluruhan, setelah beberapa hari beroperasi, tampaknya berfungsi dan terutama memuat dengan benar:

  • ini memungkinkan saya untuk menjalankan servomotor setiap jam untuk memposisikan rumah ke arah matahari;
  • Saya juga dapat mengizinkan diri saya untuk mengaktifkan kembali antarmuka jaringan setiap jam juga untuk mengirim ke Domoticz tingkat pengisian daya baterai.

Langkah 4: Memasang Kontak Magnet dan Alang-alang

Memasang Kontak Magnet dan Alang-alang
Memasang Kontak Magnet dan Alang-alang
Memasang Kontak Magnet dan Alang-alang
Memasang Kontak Magnet dan Alang-alang
Memasang Kontak Magnet dan Buluh
Memasang Kontak Magnet dan Buluh

Seperti biasa, saya menggunakan Proxxon saya untuk membentuk tempat Reed di sepotong kayu.

Untuk memperbaiki kontak buluh di lubangnya, saya menggunakan sedikit las J-B.

Untuk bingkisan dan hasilnya, sedikit selotip, sedikit gergaji besi, dan tujuannya tercapai!

Keuntungan dari kotak surat saya adalah bahwa itu adalah logam, yang memfasilitasi penempatan magnet sehingga berinteraksi dengan baik dengan kontak buluh.

Langkah 5: Hubungkan ke Rumah Kecilku

Terhubung ke Rumah Kecilku
Terhubung ke Rumah Kecilku
Terhubung ke Rumah Kecilku
Terhubung ke Rumah Kecilku

Untuk dapat dengan mudah menghubungkan dan melepaskan kabel yang menuju ke kontak buluh dari kotak surat ke rumah, saya memilih untuk menggunakan konektor Ethernet.

Anda dapat menggunakan model ini atau, seperti saya, menggunakan perisai Ethernet Arduino lama yang tergantung di laci saya: Dia tidak menderita, dia berani di depan gergaji, kematiannya cepat ^^

Hanya sepatah kata tentang perisai Ethernet Arduino ini: jangan berharap memiliki 8 driver terpisah … Kabel dipasangkan oleh 2 di dalam perisai … Itu membuat saya gila terlalu lama !!!

Langkah 6: Di Rumah…

Di dalam rumah …
Di dalam rumah …
Di dalam rumah …
Di dalam rumah …

Cukup tempat untuk memasang dudukan baterai, menyetel servo, dan konektor femal RJ45.

Langkah 7: Biarkan Turntable …

Biar Bisa Diputar…
Biar Bisa Diputar…
Biar Bisa Diputar…
Biar Bisa Diputar…
Biar Bisa Diputar…
Biar Bisa Diputar…
Biar Bisa Diputar…
Biar Bisa Diputar…

Tujuannya adalah agar tetap menghadap ke matahari …

Untuk memungkinkan kemampuan turnable, saya menggunakan sekrup panjang sebagai poros, dengan beberapa mur dan dua bantalan bola …

Sampai sekarang, saya menggunakan servo SG90 (torsi: 1,8kg/cm pada 4,8v).

Untuk memutar rumah (dan beberapa gramnya) sudah cukup. Di sisi lain, saya tidak yakin bahwa roda gigi plastiknya tahan lama terhadap hembusan angin yang sering terjadi di wilayah saya.

Saya memesan satu lagi (torsi MG995: 9,4kg/cm pada 4,8v), tidak terlalu mahal, tetapi dengan roda gigi logam.

Ini akan menjadi hal berikutnya yang harus dilakukan ketika saya menerimanya: Saya mengandalkan kotak surat saya yang terhubung untuk memberi tahu saya tentang kedatangannya!

Langkah 8: Beberapa Tes

Image
Image

Beberapa catatan:

Sketsa ini hanya untuk meniru perubahan jam di siang hari untuk memungkinkan saya mengontrol posisi servo.

  • Dengan SG90: tidak perlu tambahan, dapat bekerja dengan tegangan OUT yang berasal dari pengontrol baterai.
  • Tapi, dengan MG 995:

    • Sudut total rotasi tidak sama (lebih lebar): Saya harus menggunakan fungsi tambahan untuk menguranginya (Servo_Delta()).
    • Butuh DC/DC Step up untuk memberikan tegangan yang cukup ke servo … untuk dilanjutkan …

/*

- TEST dengan SG90: tidak perlu tambahan, dapat bekerja dengan tegangan OUT yang berasal dari pengontrol baterai - UNTUK MG 995: - gunakan fungsi Servo_Delta() … - Perlu Step up DC/DC untuk memberikan tegangan yang cukup ke servo … untuk bersambung: */ #include bool Logs = true; Servo myservo; #define PIN_SERVO D2 // posisi servo untuk: 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 tua; int pos; di aku; void setup() { Serial.begin(115200); } void loop() { untuk(i = 7; i <= 22; i++){ lama = i; if (i == 7){ if (Log) Serial.println ("Posisikan servo tuangkan 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 (Log) Serial.println (indeks); if (Log) Serial.print("Nilai yang disesuaikan: "); if (Log) Serial.println(Servo_Delta(indeks)); penundaan (200); //myservo.write(Servo_Delta(indeks)); myservo.write(indeks); } penundaan(15); myservo.write(Arr_Servo_Pos[i-7]); // tulis lagi nilai terakhir untuk menghindari gerakan dendeng saat datach myservo.detach(); } } } penundaan(2000); } } int Servo_Delta(nilai int){ int Temp_val; Temp_val = (nilai*0.80)+9; kembalikan Temp_val; }

Langkah 9: Rumah Kecil

Rumah Kecil
Rumah Kecil
Rumah Kecil
Rumah Kecil
Rumah Kecil
Rumah Kecil

Seperti yang saya katakan sebelumnya, saya tidak mendapatkan printer 3D. Jadi saya memutuskan untuk menggunakan peti sayuran tua …

Mungkin itu tidak akan bertahan lama, tetapi pada saat itu, saya akan punya waktu untuk mempertimbangkan solusi lain (atau seorang teman yang memiliki printer 3D): untuk melindungi kayu, saya menambahkan banyak pernis di mana-mana …

Anda dapat melihat "tirai cantik" … Itulah yang terjadi ketika Anda meminta istri Anda untuk melakukan pekerjaan itu ^^

Langkah 10: Sketsa

Sedang berlangsung … Tapi tampaknya stabil

Saya masih mengerjakan kode: karena ini bukan versi definitif, komentar/saran Anda diterima;-)

Beberapa komentar:

  • Mereka banyak delay() dalam kode: ini untuk menghindari banyak crash dari Lolin, terutama saat menghentikan jaringan yang mulai …
  • Saya tidak menemukan cara yang mudah dan dapat diandalkan untuk mendapatkan azimuth matahari: itu sebabnya saya memperbaiki nilai servo dalam fungsi dari apa yang saya amati … Saya Anda memiliki cara yang baik (dan sederhana) untuk mendapatkannya, saya tertarik !Mungkin trek untuk belajar di sini, bahkan jika saya lebih suka API online memberi saya azimut langsung sesuai dengan tanggal, jam, dan posisi geografis …
  • Tentang teknik tidur: karena Lolin adalah Prosesor Tensilica 32-bit, nilai maksimumnya untuk bilangan bulat tidak bertanda 32-bit adalah 4294967295 … kemudian, ia memberikan sekitar maksimal 71 menit untuk interval tidur nyenyak. Makanya saya bikin sleep l'ESP berkali-kali selama kurang lebih 60 menit…

EDIT - 2018-10-08:

Saya menemukan servo memiliki banyak gerakan tersentak-sentak, terutama sebelum attachment(), detach() dan setiap kali Lolin bangun dari deepSleep().

Saat mempelajari lebih banyak lembar data, saya menyadari dua hal:

  • Pada datasheet Lolin, output D4 sudah terhubung dengan BUILTIN_LED …
  • Pada datasheet ESP8266ex, kita mengetahui bahwa output D4 digunakan sebagai UART 1/U 1 TXD (Universal Asynchronous Receiver Transmitter). Juga ditentukan bahwa UART1 ini digunakan untuk mencetak log.

Dengan membaca informasi ini, saya menyadari bahwa output D4 bukanlah ide yang baik, terutama untuk mengatur motor servo!

Jadi, sekarang output yang digunakan untuk mengontrol servomotor adalah D2, kode di bawah ini telah diperbarui.

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

Tanggal pembuatan: 08/Tanggal mise en prod: 08/Versi: 0.9.4 Versi IDE Arduino: 1.8.6 Kecepatan unggah: 921600 Ketik de carte dans l'IDE: "LOLIN(WEMOS) D1 R2 & mini" Carte fisik karyawan: LOLIN(WEMOS) D1 R2 & mini (https://www.amazon.fr/gp/product/B01ELFAF1S/ref=oh_aui_detailpage_o00_s00?ie=UTF8&psc=1) Fungsi Pin ESP-8266 Lokal Pemanfaatan Pin ------- -------------------------------------------------- ------------------------------------ TX TXD TXD RX RXD RXD A0 Input analog, input maks 3.3V A0 Tension d'alimentaion D0 IO GPIO16 Hubungkan à RST (tuangkan deep.sleep) D1 IO, SCL GPIO5 D2 IO, SDA GPIO4 Servo moteur D3 IO, 10k Pull-up GPIO0 D4 IO, 10k pull-up, BUILTIN_LED IOGPIO2, SCK GPIO14 Reed buluh D6 IO, MISO GPIO12 Huruf buluh D7 IO, MOSI GPIO13 Reed colis D8 IO, pull-down 10k, SS GPIO15 G Ground GND 5V 5V – 3V3 3.3V 3.3V RST Reset RST Connecté D0 (tuangkan le.sleep) ****************************************/ #include bool Log = true; // wifi const char* ssid = "LOL"; const char* kata sandi = "LOL"; IPaddress ip(192, 168,000, 000); IPaddress dns(192, 168,000, 000); Gateway alamat IP(192, 168,000, 000); subnet alamat IP(255, 255, 000, 000); Klien WiFiClient; // Servo #include #define PIN_SERVO D2 Servo myservo; // posisi servo untuk: 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; byte Switch_State_OUT; #define PIN_SWITCH_IN_PARCEL D6 byte Old_Switch_State_IN_PARCEL; byte Switch_State_IN_PARCEL; #define PIN_SWITCH_IN_LETTER D7 byte Old_Switch_State_IN_LETTER; byte Switch_State_IN_LETTER; sakelar panjang yang tidak ditandatanganiTekanWaktu; const unsigned long DEBOUCE_TIME = 200; // Analog #define PIN_ANALOG A0 // MQTT #include const char* MQTT_Server_IP = "Alamat MQTT Anda"; const int MQTT_Server_Port =; int IDX_Letter_Box =; int IDX_Parcel_Box =; int IDX_Letter_Box_Battery =; PubSubClient ClientMQTT(klien); char MQTT_Message_Buff[70]; String MQTT_Pub_String; // Tegangan float vcc; // NTP #termasuk waktu_t sekarang; int Lama_Waktu = 0; int Int_Heures = 0; int Int_Minutes = 0; int Int_Sleep_Duration = 63; void setup(){ Serial.begin(115200); jaringan (benar); 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 = digitalBaca (PIN_SWITCH_IN_LETTER); pinMode(PIN_SWITCH_IN_PARCEL, INPUT_PULLUP); Old_Switch_State_IN_PARCEL = digitalRead (PIN_SWITCH_IN_PARCEL); SendBatteryLevel(); jaringan (salah); // NTP set tnow = waktu(nullptr); Int_Heures = String(waktu(&tnow)).substring(11, 13).toInt(); Int_Minutes = String(waktu(&tnow)).substring(14, 16).toInt(); // Tidur nyenyak semalaman if(!((Int_Heures >= 7) && (Int_Heures <= 20))){ Serial.print("Sleep pour la nuit ("); Serial.print(Int_Sleep_Duration - Int_Minutes); Serial. println("menit)"); tidur(Int_Sleep_Duration - Int_Minutes); } } void loop() { // NTP set tnow = waktu(nullptr); Int_Heures = String(waktu(&tnow)).substring(11, 13).toInt(); Int_Minutes = String(waktu(&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()); // Manajemen servo jika (Waktu_Lama != Int_Heures){ Waktu_Lama = Int_Heures; if (Int_Heures == 7){ if (Log) Serial.println ("Posisikan servo tuangkan 7 Heure"); myservo.attach(PIN_SERVO); for(int indeks = Arr_Servo_Pos[(sizeof(Arr_Servo_Pos) / sizeof(Arr_Servo_Pos[0])) -1]; indeks 7 && Int_Heures = Arr_Servo_Pos[Int_Heures-7]; indeks--){ if (Logs) Serial.println (indeks); penundaan (200); myservo.write(indeks); } penundaan(15); myservo.write(Arr_Servo_Pos[Int_Heures-7]); // tulis lagi nilai terakhir untuk menghindari gerakan tersentak saat melepas myservo.detach(); } jaringan (benar); SendBatteryLevel(); jaringan (salah); } } } // Tidur nyenyak jika Sabtu setelah 13 jam if((String(ctime(&tnow)).substring(0, 3) == "Sab") && (Int_Heures >= 13)){ if (Log) Serial.print("Sleep pour le samedi aprés midi ("); if (Logs) Serial.print(Int_Sleep_Duration - Int_Minutes); if (Logs) Serial.println(" menit)"); tidur(Int_Sleep_Duration - Int_Minutes); } // Tidur nyenyak if sunday if(String(ctime(&tnow)).substring(0, 3) == "Sun"){ if (Logs) Serial.print("Sleep pour le dimanche ("); if (Log) Serial.print(Int_Sleep_Duration - Int_Minutes); if (Log) Serial.println(" menit)"); tidur(Int_Sleep_Duration - Int_Minutes); } // Manajemen buluh Switch_State_OUT = digitalRead (PIN_SWITCH_OUT); if (Switch_State_OUT != Old_Switch_State_OUT){ if (milis () - switchPressTime >= DEBOUCE_TIME){ switchPressTime = milis (); if (Switch_State_OUT == HIGH){ Serial.println ("relevé kurir !"); jaringan (benar); penundaan(5000); MQTT_Pubilsh(IDX_Letter_Box, 0, "0"); penundaan(5000); MQTT_Pubilsh(IDX_Parcel_Box, 0, "0"); penundaan(5000); jaringan (salah); } } 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 = milis (); if (Switch_State_IN_LETTER == HIGH){ Serial.println ("kurir tiba !"); jaringan (benar); penundaan(5000); MQTT_Pubilsh(IDX_Letter_Box, 1, "Kurir"); penundaan(5000); jaringan (salah); } } 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 = milis (); if (Switch_State_IN_PARCEL == HIGH){ Serial.println ("colis arrivé !"); jaringan (benar); penundaan(5000); MQTT_Pubilsh(IDX_Parcel_Box, 1, "Colis"); penundaan(5000); jaringan (salah); } } Old_Switch_State_IN_PARCEL = Switch_State_IN_PARCEL; } } batal SendBatteryLevel(){ delay(5000); vcc = analogRead(PIN_ANALOG)/10.24; if (Log) Serial.println ("\tRelevée tegangan: " + String(vcc, 0)); MQTT_Pubilsh(IDX_Letter_Box_Battery, 0, String(vcc, 0)); penundaan(5000); } batal tidur(int Min_Duration){ ESP.deepSleep(Min_Duration * 60e6); } void jaringan(bool UpDown){ if (UpDown){ Serial.print("Jaringan mulai "); WiFi.forceSleepWake(); penundaan (1); // init WIFI WiFi.config(ip, dns, gateway, subnet); WiFi.begin(ssid, kata sandi); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } penundaan(5000); Serial.println("."); Serial.print("\tTersambung - Alamat IP: "); Serial.println(WiFi.localIP()); // init MQTT ClientMQTT.setServer(MQTT_Server_IP, MQTT_Server_Port); // Init NTP Serial.print("\tWaktu Sinkron."); 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("Jaringan berhenti."); WiFi.disconnect(); delay(1000); WiFi.mode(WIFI_OFF); delay(1000); WiFi.forceSleepBegin(); delay(1); } } void reconnect() { while (!ClientMQTT.connected()) { Serial.print(" \tMencoba koneksi MQTT…"); // Mencoba menghubungkan if (ClientMQTT.connect("ESP8266ClientBAL")) { Serial.println("connected"); } else { Serial.print("gagal, rc="); Serial.print(ClientMQTT.state()); Serial.println(" coba lagi dalam 5 detik"); // Tunggu 5 detik sebelum mencoba lagi 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("\tKirim info ke MQTT …"); MQTT_Pub_String = "{ "idx\": " + String (Int_IDX) + ", \"Baterai\": " + String(vcc, 0) + ", \"nnilai\": " + N_Value + ", \"snilai \": \"" + S_Value + "\"}"; MQTT_Pub_String.toCharArray(MQTT_Message_Buff, MQTT_Pub_String.length()+1); ClientMQTT.publish("domoticz/in", MQTT_Message_Buff); KlienMQTT.disconnect(); }

Langkah 11: Domoticz

Domoticz
Domoticz
Domoticz
Domoticz
Domoticz
Domoticz

Di Domoticz:

Untuk penggunaan umum:

  • Buat dua "Dummy (Tidak melakukan apa-apa, gunakan untuk sakelar virtual)":

    1. Yang pertama untuk surat…
    2. Yang kedua untuk paket…
  • Untuk masing-masing dari mereka, personalisasikan notifikasi;
  • Tentu saja, Anda perlu mengatur token Tegegram Anda.

Opsional:

Anda dapat menambahkan "Sensor utilitas" untuk mengawasi tingkat pengisian daya baterai Anda.

Tips: di sini Anda dapat menemukan banyak ikon kustom gratis …

Langkah 12: Kesimpulan

Kesimpulan
Kesimpulan
Kesimpulan
Kesimpulan

Semoga Instruksi ini akan membantu Anda:

  • apakah akan membuat kotak surat Anda sendiri yang terhubung;
  • atau hanya untuk memberi Anda beberapa ide untuk proyek Anda!

Jika Anda memiliki ide untuk perbaikan, saya mendengarkan!

PS: maaf untuk bahasa Inggris saya, terjemahan Google banyak membantu saya tetapi mungkin tidak sempurna;-)

Direkomendasikan: