Isi kandungan:

Kotak Surat Bersambung Tenaga Suria: 12 Langkah (dengan Gambar)
Kotak Surat Bersambung Tenaga Suria: 12 Langkah (dengan Gambar)

Video: Kotak Surat Bersambung Tenaga Suria: 12 Langkah (dengan Gambar)

Video: Kotak Surat Bersambung Tenaga Suria: 12 Langkah (dengan Gambar)
Video: Proses pasang Ring Jantung atau Cincin Jantung #cardio #cardiology #ringjantung 2024, Julai
Anonim
Kotak Surat Bersambung Powered
Kotak Surat Bersambung Powered
Kotak Surat Bersambung Powered Solar
Kotak Surat Bersambung Powered Solar

Untuk Ible kedua saya, saya akan menerangkan karya-karya saya mengenai peti surat saya yang bersambung.

Setelah membaca Instructable ini (+ banyak yang lain), dan kerana peti surat saya tidak berdekatan dengan rumah saya, saya ingin memberi inspirasi kepada saya karya Open Green Energy untuk menyambungkan kotak surat saya ke pelayan Domoticz saya.

Matlamat

  • Diberitahu oleh Telegram ketika surat akan datang;
  • Dimaklumkan oleh Telegram ketika bungkusan akan datang;
  • Periksa sama ada surat / bungkusan telah diambil.

Kekangan utama saya

Peti mel agak jauh dari rumah, dan mustahil untuk menarik kabel elektrik ke atasnya untuk menghidupkan apa sahaja.

Saya harus mencari penyelesaian lain: tenaga suria adalah penyelesaian yang baik!

BOM

  • Raspberry Pi (untuk menjadi tuan rumah bahagian MQTT dan Domoticz - tidak dinyatakan di sini)
  • Akaun Telegram Bot
  • Lolin D1 mini (atau Wemos…)
  • Penyambung Blok Terminal Skru Pemalam
  • Papan Pengecasan Bateri Lithium TP4056
  • Panel Suria Fotovoltaik 6V 2W
  • Bateri Li-Ion 18650
  • Pemegang bateri Li-Ion
  • PCB Circuited Printed Prototype PCB Circuit Board
  • Servo Analog SG90
  • 3 Suis Reed (satu untuk huruf, satu untuk bungkusan dan satu untuk pembayaran)
  • Magnet
  • Beberapa wayar
  • Peti kayu: Kerana tidak mendapat pencetak 3D, saya menyedari rumah kecil saya sendiri dengan kayu untuk menerima bahagian elektronik…
  • Kabel Ethernet ganti
  • RJ45 Ethernet Connector Breakout Board

  • Kimpalan J-B
  • Beberapa galas bebola
  • Skru, kacang, mesin basuh

Langkah 1: Skim Global

Skim Global
Skim Global
Skim Global
Skim Global

Lukisan yang indah selalu lebih baik daripada ucapan panjang;-)

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

MQTT (Pengangkutan Telemetri Antrian Mesej), adalah protokol pemesejan, digunakan untuk mengirim data antara peranti dan sistem lain di dunia IoT (Internet of things).

Tanpa terlalu banyak butiran, operasinya berdasarkan prinsip klien menyambung ke pelayan. Dalam MQTT, klien dipanggil Pelanggan atau Penerbit, dan pelayan dipanggil Broker.

Dalam Instructable ini, saya hanya menggunakan satu penerbit, Lolin yang disambungkan ke kotak surat saya: apabila huruf atau bungkusan dikesan melalui kenalan buluh yang dipasang di kotak surat (Langkah 1 dalam keadaan shematic), ia menghantar mesej MQTT melalui WIFI kepada Broker (Langkah 2).

Bahagian Broker dilakukan oleh Mosquitto, yang dipasang pada Raspberry Pi (Langkah 3).

Mengenai Domoticz:

Seperti yang dijelaskan di halaman sumber, Domoticz adalah "sistem automasi rumah", yang memungkinkan anda untuk mengawal pelbagai peranti dan menerima input dari pelbagai protokol: MQTT adalah salah satu protokol yang disokong…

Sebaik sahaja maklumat sampai kepadanya (Langkah 4), Anda dapat menentukan peristiwa: Dalam kotak surat, saya memilih untuk mengirim pemberitahuan Telegram (Langkah 5).

Akhirnya, pelanggan Telegram dikonfigurasikan di telefon saya (dan juga isteri saya! - Langkah 6): matlamat akhirnya tercapai…

Langkah 2: Shematic / Pendawaian

Shematic / Pendawaian
Shematic / Pendawaian
Shematic / Pendawaian
Shematic / Pendawaian
Shematic / Pendawaian
Shematic / Pendawaian
Shematic / Pendawaian
Shematic / Pendawaian

Satu perkataan mengenai analog dibaca:

Pertama sekali, saya perhatikan selepas beberapa kajian bahawa Lolin mini D1 (sebagai Wemos lama), telah membina pembahagi voltan untuk pin A0 (mempertimbangkan 220KΩ untuk R1 dan 100KΩ untuk R2 - lihat di sebelah kanan lembar data yang dihubungkan), membenarkan 3.2 Volt sebagai voltan input analog maksimum.

Memandangkan voltan output maksimum dari bateri adalah 4, 2v (dibatasi oleh papan pengecasan), dan secara teorinya, anda hanya perlu menambahkan resitor luaran (bersiri dengan R1) untuk meningkatkan julat voltan input maksimum. Kemudian, jika anda menambah seri 100K dengan R1, anda akan mendapat hasil ini:

Vin * R1 / (R1 + R2) = Vout

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

Di litar saya, saya memilih untuk dapat menyesuaikan nilainya, sebab itulah saya lebih suka menggunakan perintang boleh laras dalam litar saya: mungkin ia tidak berguna untuk anda, tetapi dalam keadaan saya, saya menetapkan nilainya menjadi sekitar 10KΩ untuk memiliki nilai koheren dalam Domoticz…

Perhatikan bahawa pin A0 mempunyai resolusi 10 bit: ini bermaksud bahawa dalam lakaran anda, bacaan analog anda akan mengembalikan nilai antara 0 hingga 1024.

Oleh kerana saya ingin menghantar nilai peratusan ke Domoticz, saya harus membahagikan hasil bacaan analog dengan 10, 24.

Langkah 3: Pengurusan Daya

Pengurusan Kuasa
Pengurusan Kuasa
Pengurusan Kuasa
Pengurusan Kuasa

Sudah tentu, saya mahu kotak surat menjadi autonomi. Untuk mencapai matlamat saya, saya menggunakan unsur-unsur ini:

  • bateri Li-Ion 18650 4000mAh;
  • panel solar yang boleh menghasilkan 6V / 2W;
  • papan pengecasan Bateri Lithium TP4056.

Untuk memilih panel solar yang paling sesuai, saya melihat beberapa contoh, termasuk yang satu ini: dalam contoh ini, panel solar 5.5V / 0.66W digunakan, dan mungkin mencukupi untuk tujuan tersebut. Dalam kes saya, dan kerana ESP8266 mesti tetap AKTIF pada siang hari dan mesti dapat menjalankan motor servo agar rumah tidak menghadap cahaya matahari, saya memilih model panel solar yang lebih kuat (6V / 2W) - Ia juga membolehkan saya untuk menjangkakan tempoh musim sejuk dan hari mendung;-)

Juga, dan untuk mengurangkan perbelanjaan tenaga secara maksimum, saya telah memilih senario berikut:

  • mengetahui bahawa posmen hanya antara pukul 7 pagi hingga 8 malam, ESP ditempatkan di DeepSleep sepanjang malam;
  • Faktor itu tidak berlaku antara Sabtu siang dan Isnin pagi: ESP juga diletakkan dalam mod DeepSleep dalam tempoh ini.
  • Untuk jangka masa antara 7 pagi dan 8 malam, dan untuk mengurangkan penggunaan kuasa, saya hanya mematikan antara muka rangkaian ESP: rangkaian dimulakan semula hanya apabila tiba bungkusan atau surat, cukup masa untuk menghantar maklumat ke Domoticz. Saya tidak perlu diberi amaran segera dan beberapa saat tambahan yang diperlukan untuk memulakan semula antara muka rangkaian tidak berbahaya!

Beberapa nilai mengenai penggunaan dalam mod berbeza yang saya gunakan untuk Lolin - lihat lembaran data, hlm18:

  • Dalam mod biasa (dengan RF berfungsi), penggunaan kuasa dapat meningkat menjadi 170mA! Oleh kerana peti surat saya terletak kira-kira 50 meter dari rumah saya (dan pada had isyarat WIFI …) Saya rasa kuasa yang digunakan untuk mengekalkan sambungan adalah maksimum …
  • Dalam modem-tidur, penggunaan kuasa menurun kepada 15mA. Tetapi seperti yang anda lihat di lembar data, modem tidak sepenuhnya menghentikan modem, kerana ESP "menjaga sambungan Wi-Fi tanpa penghantaran data".
  • Dalam tidur nyenyak, kuasa turun hingga 20uA.

Untuk memastikan bahawa wifi tidak tetap aktif tanpa perlu, saya lebih suka melumpuhkannya dengan arahan berikut. Perhatikan banyak penangguhan () panggilan … Tanpa mereka, kerosakan ESP:

WiFi.disconnect ();

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

Secara keseluruhan, setelah beberapa hari beroperasi, nampaknya berfungsi dan terutama memuat dengan betul:

  • ini membolehkan saya menjalankan servomotor setiap jam untuk meletakkan rumah ke arah cahaya matahari;
  • Saya juga boleh membiarkan diri saya mengaktifkan semula antara muka rangkaian setiap jam untuk menghantar ke tahap kuasa bateri kepada Domoticz.

Langkah 4: Memasang Kenalan Magnet dan Alang-alang

Memasang Kenalan Magnet dan Buluh
Memasang Kenalan Magnet dan Buluh
Memasang Kenalan Magnet dan Buluh
Memasang Kenalan Magnet dan Buluh
Memasang Kenalan Magnet dan Buluh
Memasang Kenalan Magnet dan Buluh

Seperti biasa, saya menggunakan Proxxon saya untuk membentuk tempat Reed dalam sekeping kayu.

Untuk memperbaiki kenalan buluh di dalam lubang, saya menggunakan sedikit pengelasan J-B.

Untuk bungkusan dan keluarannya, sekeping pita kecil, sedikit gergaji besi, dan tujuannya tercapai!

Kelebihan kotak surat saya adalah bahawa ia adalah logam, yang memudahkan kedudukan magnet sehingga berinteraksi dengan betul dengan kenalan buluh.

Langkah 5: Sambungkan ke Rumah Kecil Saya

Sambung ke Rumah Kecil Saya
Sambung ke Rumah Kecil Saya
Sambung ke Rumah Kecil Saya
Sambung ke Rumah Kecil Saya

Untuk dapat dengan mudah menyambungkan dan memutuskan kabel yang masuk ke kenalan buluh dari kotak surat ke rumah, saya memilih untuk menggunakan penyambung Ethernet.

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

Hanya sepatah kata mengenai perisai Arduino Ethernet ini: jangan berharap mempunyai 8 pemacu yang berasingan … 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 pemegang bateri, menetapkan servo, dan penyambung femal RJ45.

Langkah 7: Biarkan Meja Putar…

Biarkan Meja Putar…
Biarkan Meja Putar…
Biarkan Meja Putar…
Biarkan Meja Putar…
Biarkan Meja Putar…
Biarkan Meja Putar…
Biarkan Meja Putar…
Biarkan Meja Putar…

Objektifnya adalah untuk menghadapnya ke sinar matahari …

Untuk membiarkan kemampuan berpusing, saya menggunakan skru panjang sebagai gandar, dengan beberapa kacang dan dua galas bebola…

Sehingga kini, saya menggunakan servo SG90 (tork: 1.8kg / cm pada 4.8v).

Untuk menghidupkan rumah (dan beberapa gramnya) sudah cukup. Sebaliknya, saya tidak pasti bahawa gear plastiknya menahan untuk sekian lama angin kencang yang sering berlaku di rantau saya.

Saya memesan yang lain (tork MG995: 9.4kg / cm pada 4.8v), tidak terlalu mahal, tetapi dengan gear logam.

Ini akan menjadi perkara seterusnya apabila saya menerimanya: Saya bergantung pada kotak surat yang saya sambungkan untuk memberitahu saya mengenai kedatangannya!

Langkah 8: Beberapa Ujian

Image
Image

Beberapa nota:

Sketsa ini hanya untuk meniru perubahan jam pada siang hari untuk membolehkan saya mengawal kedudukan servo.

  • Dengan SG90: tanpa keperluan tambahan, ia dapat berfungsi dengan voltan OUT yang berasal dari pengawal bateri.
  • Tetapi, dengan MG 995:

    • Sudut putaran keseluruhan tidak sama (lebih luas): Saya terpaksa menggunakan fungsi tambahan untuk mengurangkannya (Servo_Delta ()).
    • Memerlukan DC / DC Meningkatkan untuk memberikan voltan yang mencukupi kepada servo … untuk diteruskan …

/*

- UJI dengan SG90: tidak ada keperluan tambahan, ia dapat berfungsi dengan voltan OUT yang berasal dari pengawal bateri - UNTUK MG 995: - gunakan fungsi Servo_Delta ()… - Perlu DC / DC Meningkatkan untuk memberikan voltan yang mencukupi kepada servo… hingga bersambung: * / #masuk bool Log = true; Servo myservo; #tentukan PIN_SERVO D2 // kedudukan 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 lama; int pos; int i; persediaan tidak sah () {Serial.begin (115200); } gelung void () {untuk (i = 7; i <= 22; i ++) {lama = i; if (i == 7) {if (Logs) Serial.println ("Positionne le servo pour 7 Heure"); myservo.attach (PIN_SERVO); untuk (indeks int = Arr_Servo_Pos [(sizeof (Arr_Servo_Pos) / sizeof (Arr_Servo_Pos [0])) -1]; indeks 7 && i = Arr_Servo_Pos [i-7]; indeks -) {if (Logs) Serial.println (indeks); jika (Log) Serial.print ("Nilai disesuaikan:"); jika (Log) Serial.println (Servo_Delta (indeks)); kelewatan (200); //myservo.write(Servo_Delta(index)); myservo.write (indeks); } kelewatan (15); myservo.write (Arr_Servo_Pos [i-7]); // tulis semula nilai terakhir untuk mengelakkan pergerakan tersentak ketika datach myservo.detach (); }}} kelewatan (2000); }} int Servo_Delta (nilai int) {int Temp_val; Temp_val = (nilai * 0.80) +9; kembali 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 mendapat pencetak 3D. Oleh itu, saya memutuskan untuk menggunakan peti sayur lama …

Mungkin ia tidak akan bertahan lama, tetapi pada masa itu, saya mempunyai masa untuk mempertimbangkan penyelesaian lain (atau rakan yang memiliki pencetak 3D): untuk melindungi kayu, saya menambah banyak pernis di mana-mana …

Anda dapat melihat "langsir cantik" … Itulah yang berlaku apabila anda meminta isteri anda melakukan pekerjaan ^^

Langkah 10: Lakaran

Sedang berlangsung … Tapi nampaknya stabil

Saya masih mengusahakan kod: kerana ini bukan versi pasti, komen / nasihat anda dialu-alukan;-)

Beberapa komen:

  • Mereka banyak kelewatan () dalam kod: ini untuk mengelakkan banyak kemalangan Lolin, terutama ketika menghentikan rangkaian permulaan…
  • Saya tidak menjumpai cara yang mudah dan boleh dipercayai untuk mendapatkan azimut matahari: sebab itulah saya menetapkan nilai servo sesuai dengan apa yang saya perhatikan… Saya mempunyai cara yang baik (dan sederhana) untuk mendapatkannya, saya berminat! Mungkin trek untuk belajar di sini, walaupun saya lebih suka API dalam talian memberi saya azimuth secara langsung mengikut tarikh, jam, dan kedudukan geografi…
  • Mengenai teknik tidur: kerana Lolin adalah Tensilica Processor 32-bit, nilai maksimumnya untuk bilangan bulat 32-bit yang tidak ditandatangani adalah 4294967295… maka, ia memberi masa sekitar 71 minit maksimum untuk selang tidur nyenyak. Itulah sebabnya saya membuat tidur l'ESP berkali-kali selama kira-kira 60 minit …

EDIT - 2018-10-08:

Saya dapati servo mempunyai banyak gerakan tersentak, terutama sebelum lampiran (), melepaskan () dan setiap kali Lolin bangun dari deepSleep ().

Semasa mempelajari lembaran data sedikit lebih banyak, saya menyedari dua perkara:

  • Pada lembar data Lolin, output D4 sudah dihubungkan dengan BUILTIN_LED…
  • Pada lembar data ESP8266ex, kita mengetahui output D4 digunakan sebagai UART 1 / U 1 TXD (Universal Asynchronous Receiver Transmitter). Juga dinyatakan bahawa UART1 ini digunakan untuk mencetak log.

Dengan membaca maklumat ini, saya menyedari bahawa output D4 bukanlah idea yang baik, terutamanya untuk menguruskan motor servo!

Jadi, sekarang output yang digunakan untuk mengawal servomotor adalah D2, kod di bawah telah dikemas kini dengan sewajarnya.

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

Pembuatan tarikh: 08 / Date mise en prod: 08 / Versi: 0.9.4 Versi IDE Arduino: 1.8.6 Kelajuan muat naik: 921600 Type de carte dans l'IDE: "LOLIN (WEMOS) D1 R2 & mini" Carte physique Employeee: 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 Lokasi Penggunaan Pin ------- -------------------------------------------------- ------------------------------------ TX TXD TXD RX RXD RXD A0 Input analog, input maksimum 3.3V 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 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 (tuangkan lebih dalam.sleep) **************************************** / #masuk bool Log = true; // wifi const char * ssid = "LOL"; const char * kata laluan = "LOL"; IP Alamat IP (192, 168, 000, 000); IPAddress dns (192, 168, 000, 000); Gerbang IPAddress (192, 168, 000, 000); Subnet IPAddress (255, 255, 000, 000); Pelanggan WiFiClient; // Servo #include #define PIN_SERVO D2 Servo myservo; // kedudukan 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 bait Old_Switch_State_OUT; byte Switch_State_OUT; #tentukan PIN_SWITCH_IN_PARCEL D6 bait Old_Switch_State_IN_PARCEL; byte Switch_State_IN_PARCEL; #tentukan PIN_SWITCH_IN_LETTER D7 bait Lama_Switch_State_IN_LETTER; byte Switch_State_IN_LETTER; switchTekan lama yang tidak ditandatangani; const tidak ditandatangani panjang DEBOUCE_TIME = 200; // Analog #define PIN_ANALOG A0 // MQTT #inc 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 =; Pelanggan PubSubClientMQTT (pelanggan); char MQTT_Message_Buff [70]; Rentetan MQTT_Pub_String; // Ketegangan float vcc; // NTP #termasuk masa_tentang; int Old_Time = 0; int Int_Heures = 0; int Int_Minutes = 0; int Int_Sleep_Duration = 63; persediaan tidak sah () {Serial.begin (115200); rangkaian (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 = digitalRead (PIN_SWITCH_IN_LETTER); pinMode (PIN_SWITCH_IN_PARCEL, INPUT_PULLUP); Old_Switch_State_IN_PARCEL = digitalRead (PIN_SWITCH_IN_PARCEL); SendBatteryLevel (); rangkaian (palsu); // NTP set tnow = time (nullptr); Int_Heures = Rentetan (ctime (& tnow)). Substring (11, 13).toInt (); Int_Minutes = String (ctime (& tnow)). Substring (14, 16).toInt (); // Sedang tidur malam jika (! (Int_Heures> = 7) && (Int_Heures <= 20))) {Serial.print ("Sleep pour la nuit ("); Serial.print (Int_Sleep_Duration - Int_Minutes); Serial. println ("minit)"); tidur (Int_Sleep_Duration - Int_Minutes); }} gelung void () {// NTP set tnow = time (nullptr); Int_Heures = Rentetan (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 ()); // Pengurusan servo jika (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); untuk (int index = 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); kelewatan (200); myservo.write (indeks); } kelewatan (15); myservo.write (Arr_Servo_Pos [Int_Heures-7]); // tulis semula nilai terakhir untuk mengelakkan pergerakan tersentak ketika melepaskan myservo.detach (); } rangkaian (benar); SendBatteryLevel (); rangkaian (palsu); }}} // Menidurkan jika sabtu selepas 13h jika ((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 ("minit)"); tidur (Int_Sleep_Duration - Int_Minutes); } // Menidurkan jika hari minggu jika (String (ctime (& tnow)). Substring (0, 3) == "Sun") {if (Logs) Serial.print ("Sleep pour le dimanche ("); if (Logs) Serial.print (Int_Sleep_Duration - Int_Minutes); jika (Log) Serial.println ("minit)"); tidur (Int_Sleep_Duration - Int_Minutes); } // Reeds managment Switch_State_OUT = digitalRead (PIN_SWITCH_OUT); if (Switch_State_OUT! = Old_Switch_State_OUT) {if (milis () - switchPressTime> = DEBOUCE_TIME) {switchPressTime = millis (); jika (Switch_State_OUT == TINGGI) {Serial.println ("courrier relevé!"); rangkaian (benar); kelewatan (5000); MQTT_Pubilsh (IDX_Letter_Box, 0, "0"); kelewatan (5000); MQTT_Pubilsh (IDX_Parcel_Box, 0, "0"); kelewatan (5000); rangkaian (palsu); }} Old_Switch_State_OUT = Switch_State_OUT; } Switch_State_IN_LETTER = digitalRead (PIN_SWITCH_IN_LETTER); if (Switch_State_IN_LETTER! = Old_Switch_State_IN_LETTER) {if (milis () - switchPressTime> = DEBOUCE_TIME) {switchPressTime = millis (); jika (Switch_State_IN_LETTER == TINGGI) {Serial.println ("courrier پہنچے!"); rangkaian (benar); kelewatan (5000); MQTT_Pubilsh (IDX_Letter_Box, 1, "Courrier"); kelewatan (5000); rangkaian (palsu); }} Old_Switch_State_IN_LETTER = Switch_State_IN_LETTER; } Switch_State_IN_PARCEL = digitalRead (PIN_SWITCH_IN_PARCEL); if (Switch_State_IN_PARCEL! = Old_Switch_State_IN_PARCEL) {if (milis () - switchPressTime> = DEBOUCE_TIME) {switchPressTime = millis (); jika (Switch_State_IN_PARCEL == TINGGI) {Serial.println ("colis پہنچے!"); rangkaian (benar); kelewatan (5000); MQTT_Pubilsh (IDX_Parcel_Box, 1, "Colis"); kelewatan (5000); rangkaian (palsu); }} Old_Switch_State_IN_PARCEL = Switch_State_IN_PARCEL; }} batal SendBatteryLevel () {kelewatan (5000); vcc = analogRead (PIN_ANALOG) /10.24; jika (Log) Serial.println ("\ tTension relevée:" + String (vcc, 0)); MQTT_Pubilsh (IDX_Letter_Box_Battery, 0, String (vcc, 0)); kelewatan (5000); } kekosongan tidur (int Min_Duration) {ESP.deepSleep (Min_Duration * 60e6); } kekosongan rangkaian (bool UpDown) {if (UpDown) {Serial.print ("Network start"); WiFi.forceSleepWake (); kelewatan (1); // init WIFI WiFi.config (ip, dns, gateway, subnet); WiFi.begin (ssid, kata laluan); sementara (WiFi.status ()! = WL_CONNECTED) {kelewatan (500); Cetakan bersiri ("."); } kelewatan (5000); Serial.println ("."); Serial.print ("\ tSambungan - Alamat IP:"); Serial.println (WiFi.localIP ()); // init MQTT ClientMQTT.setServer (MQTT_Server_IP, MQTT_Server_Port); // Init NTP Serial.print ("\ tSinkronkan Waktu."); configTime (0, 0," fr.pool.ntp.org "); setenv (" TZ "," CET-1CEST, M3.5.0, M10.5.0 / 3 ", 0); sementara (masa (nullptr) <= 100000) {Serial.print ("."); Delay (100);} Serial.println (".");} Lain-lain {Serial.println ("Network stop."); WiFi.disconnect (); kelewatan (1000); WiFi.mode (WIFI_OFF); kelewatan (1000); WiFi.forceSleepBegin (); tunda (1);}} batalkan penyambungan semula () {sementara (! ClientMQTT.connected ()) {Serial.print (" / tMencuba sambungan MQTT… "); // Cuba sambung jika (ClientMQTT.connect (" ESP8266ClientBAL ")) {Serial.println (" connect ");} lain {Serial.print (" gagal, rc = "); Serial.print (ClientMQTT.state ()); Serial.println ("cuba lagi dalam 5 saat"); // Tunggu 5 saat sebelum mencuba penundaan (5000);}}} batal MQTT_Pubilsh (int Int_IDX, int N_Value, String S_Value) {if (! ClientMQTT.connected ()) reconnect (); vcc = analogRead (PIN_ANALOG) /10.24; Serial.println ("\ tMengirim maklumat ke 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); PelangganMQTT.publish ("domoticz / in", MQTT_Message_Buff); PelangganMQTT.disconnect (); }

Langkah 11: Domoticz

Domoticz
Domoticz
Domoticz
Domoticz
Domoticz
Domoticz

Dalam Domoticz:

Untuk kegunaan umum:

  • Buat dua "Dummy (Tidak ada apa-apa, gunakan untuk suis maya)":

    1. Yang pertama untuk huruf …
    2. Yang kedua untuk bungkusan…
  • Untuk setiap daripada mereka, peribadikan pemberitahuan;
  • Sudah tentu, anda perlu menyediakan token Tegegram anda.

Pilihan:

Anda boleh menambahkan "Utiliti sensor" untuk mengawasi tahap pengisian bateri anda.

Petua: di sini anda boleh menemui banyak ikon tersuai percuma …

Langkah 12: Kesimpulannya

Kesimpulannya
Kesimpulannya
Kesimpulannya
Kesimpulannya

Semoga Instructable ini dapat membantu anda:

  • sama ada untuk membuat kotak surat anda sendiri;
  • atau hanya untuk memberi anda beberapa idea untuk projek anda!

Sekiranya anda mempunyai idea untuk penambahbaikan, saya akan mendengar!

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

Disyorkan: