فهرست مطالب:

متصل Letterbox Solar Powered: 12 مرحله (همراه با تصاویر)
متصل Letterbox Solar Powered: 12 مرحله (همراه با تصاویر)

تصویری: متصل Letterbox Solar Powered: 12 مرحله (همراه با تصاویر)

تصویری: متصل Letterbox Solar Powered: 12 مرحله (همراه با تصاویر)
تصویری: How $exual Fantasies Control and Destroy Your Life. What it Actually Does to Your Body. 2024, نوامبر
Anonim
متصل Letterbox Solar Powered
متصل Letterbox Solar Powered
متصل Letterbox Solar Powered
متصل Letterbox Solar Powered

برای دومین ایبل ، کارهای خود را در مورد صندوق نامه متصل شده برای شما شرح خواهم داد.

پس از خواندن این دستورالعمل (+ بسیاری دیگر) ، و چون صندوق نامه من در نزدیکی خانه من نیست ، می خواستم از کارهای Open Green Energy الهام بگیرم تا صندوق نامه خود را به سرور Domoticz من متصل کنم.

اهداف

  • هنگام دریافت نامه ها ، تلگرام به شما توصیه کند ؛
  • هنگام دریافت بسته ، تلگرام به شما توصیه کند ؛
  • بررسی کنید که آیا حروف / بسته ها برداشته شده اند یا خیر.

محدودیت اصلی من

صندوق پستی نسبتاً دور از خانه است ، و کشیدن کابل برق به آن برای تغذیه هر چیزی غیرممکن بود.

باید راه حل دیگری پیدا می کردم: انرژی خورشیدی راه حل خوبی بود!

BOM

  • رزبری پای (برای میزبانی قطعات MQTT و Domoticz - در اینجا ذکر نشده است)
  • یک حساب ربات تلگرام
  • Lolin D1 mini (یا Wemos…)
  • اتصال دهنده بلوک ترمینال پیچ افزونه
  • صفحه شارژ باتری لیتیوم TP4056
  • پنل خورشیدی فتوولتائیک 6 ولت 2 واتی
  • باتری Li-Ion 18650
  • نگهدارنده باتری Li-Ion
  • PCB DIY Soldering Copper Prototype Printed Board Board
  • سرو آنالوگ SG90
  • 3 سوئیچ نی (یکی برای نامه ها ، یکی برای بسته و دیگری برای پرداخت)
  • آهن ربا
  • برخی از سیم ها
  • جعبه چوبی: از آنجا که هیچ چاپگر سه بعدی دریافت نکردم ، متوجه شدم خانه کوچک خودم با چوب برای دریافت قطعات الکترونیکی…
  • کابل یدکی اترنت
  • RJ45 Ethernet Connector Breakout Board

  • J-B Weld
  • برخی از بلبرینگ
  • پیچ ، مهره ، واشر

مرحله 1: طرح جهانی

طرح جهانی
طرح جهانی
طرح جهانی
طرح جهانی

نقاشی های زیبا همیشه بهتر از سخنرانی های طولانی هستند ؛-)

اما چند توضیح در مورد MQTT ، Domoticz و Telegram همیشه خوش آمدید!

MQTT (Message Queuing Telemetry Transport) ، یک پروتکل پیام رسانی است که برای ارسال داده بین دستگاه ها و سایر سیستم های دنیای اینترنت اشیا (اینترنت اشیا) استفاده می شود.

بدون وارد شدن به جزئیات زیاد ، عملکرد آن بر اساس اصل اتصال مشتریان به سرور است. در MQTT ، کلاینت ها Subscriber یا Publisher و سرور Broker نامیده می شوند.

در این دستورالعمل ، من فقط از یک ناشر استفاده می کنم ، Lolin به صندوق نامه من متصل می شود: هنگامی که حروف یا بسته از طریق مخاطبین نی نصب شده در صندوق نامه تشخیص داده می شوند (مرحله 1 در شماتیک) ، پیام MQTT را از طریق WIFI به کارگزار ارسال می کند (مرحله 2)

قسمت Broker توسط Mosquitto انجام می شود که روی Raspberry Pi نصب شده است (مرحله 3).

درباره Domoticz:

همانطور که در صفحه منبع توضیح داده شده است ، Domoticz یک "سیستم اتوماسیون خانگی" است که به شما امکان می دهد دستگاه های مختلف را کنترل کرده و ورودی ها را از پروتکل های مختلف دریافت کنید: MQTT یکی از پروتکل های پشتیبانی شده است …

به محض رسیدن اطلاعات به او (مرحله 4) ، می توانید رویدادها را تعریف کنید: در مورد صندوق نامه ، من یک اعلان تلگرام را ارسال کردم (مرحله 5).

سرانجام ، مشتری تلگرام در تلفن من (و همسر من نیز! - مرحله 6) پیکربندی شده است: هدف نهایی…

مرحله 2: سیماتیک / سیم کشی

شماتیک / سیم کشی
شماتیک / سیم کشی
شماتیک / سیم کشی
شماتیک / سیم کشی
شماتیک / سیم کشی
شماتیک / سیم کشی
شماتیک / سیم کشی
شماتیک / سیم کشی

یک کلمه در مورد آنالوگ بخوانید:

اول از همه ، پس از برخی تحقیقات متوجه شدم که Lolin mini D1 (به عنوان Wemos قدیمی) ، تقسیم کننده ولتاژ برای پین A0 را در نظر گرفته است (با در نظر گرفتن 220KΩ برای R1 و 100KΩ برای R2 - در سمت راست صفحه برگه مشاهده شده مشاهده کنید) ، که به 3.2 ولت اجازه می دهد. به عنوان حداکثر ولتاژ ورودی آنالوگ

با توجه به حداکثر ولتاژ خروجی از باتری 4 ، 2 ولت (محدود به برد شارژ) ، و از لحاظ تئوریک ، شما فقط باید یک رزیتور خارجی (سری با R1) اضافه کنید تا حداکثر دامنه ولتاژ ورودی را افزایش دهید. سپس ، اگر 100K را به صورت سری با R1 اضافه کنید ، این نتیجه را خواهید داشت:

Vin * R1/(R1+R2) = Vout

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

در مدارم ، من انتخاب کردم که بتوانم مقدار آن را تنظیم کنم ، به همین دلیل ترجیح دادم از یک مقاومت قابل تنظیم در مدارم استفاده کنم: شاید برای شما بی فایده باشد ، اما در شرایط من ، مقدار آن را در حدود 10 کیلووات تنظیم می کنم تا داشته باشد یک ارزش منسجم در Domoticz…

توجه داشته باشید که پین A0 دارای وضوح 10 بیت است: این بدان معناست که در طرح شما ، خواندن آنالوگ شما مقداری بین 0 تا 1024 را برمی گرداند.

از آنجا که می خواهم یک درصد را برای Domoticz ارسال کنم ، باید نتیجه خواندن آنالوگ را بر 10 ، 24 تقسیم کنم.

مرحله 3: مدیریت قدرت

مدیریت قدرت
مدیریت قدرت
مدیریت قدرت
مدیریت قدرت

البته ، من می خواهم که صندوق نامه مستقل باشد. برای رسیدن به هدفم ، از این عناصر استفاده می کنم:

  • باتری Li-Ion 18650 4000 میلی آمپر ساعت ؛
  • پنل خورشیدی که می تواند 6 ولت / 2 وات را تحویل دهد.
  • یک صفحه شارژ باتری لیتیوم TP4056.

برای انتخاب مناسب ترین پنل خورشیدی ، به نمونه هایی از جمله این نمونه نگاهی انداختم: در این مثال ، از پنل خورشیدی 5.5 ولت / 0.66 وات استفاده شده است و احتمالاً برای این منظور کافی است. در مورد من ، و از آنجا که ESP8266 باید در طول روز روشن بماند و بتواند سروو موتور را فعال کند تا خانه را در برابر خورشید نگه دارد ، من یک مدل پنل خورشیدی قوی تر (6 ولت / 2 وات) را انتخاب کردم - همچنین به من اجازه می دهد برای پیش بینی دوره های تاریک زمستان و روزهای ابری ؛-)

همچنین ، و به منظور کاهش حداکثر مصرف انرژی ، سناریوهای زیر را انتخاب کرده ام:

  • با دانستن اینکه پستچی فقط بین 7 صبح تا 8 شب گذشته است ، ESP بقیه شب در DeepSleep قرار می گیرد.
  • این فاکتور بین ظهر شنبه تا صبح دوشنبه منتقل نمی شود: ESP نیز در این مدت در حالت DeepSleep قرار می گیرد.
  • برای مدت زمان بین 7 صبح تا 8 بعد از ظهر و به منظور کاهش مصرف برق ، من به سادگی رابط شبکه ESP را غیرفعال می کنم: شبکه فقط با ورود یک بسته یا نامه ، فقط زمان کافی برای ارسال اطلاعات به Domoticz. من نیازی به فوراً اخطار ندارم و چند ثانیه اضافی لازم برای راه اندازی مجدد رابط شبکه مضر نیست!

مقداری در مورد مصرف در حالت های مختلف که من برای لولین استفاده می کنم - به برگه داده ، ص 18 نگاه کنید:

  • در حالت عادی (با عملکرد RF) ، مصرف برق می تواند به 170mA افزایش یابد! با توجه به اینکه صندوق نامه من حدود 50 متر از خانه من فاصله دارد (و در حد سیگنال WIFI …) من فکر می کنم که قدرت مورد استفاده برای برقراری ارتباط حداکثر است …
  • در خواب مودم ، مصرف برق به 15 میلی آمپر کاهش می یابد. اما همانطور که در برگه داده مشاهده می کنید ، مودم را به طور کامل متوقف نکرد ، زیرا ESP "اتصال Wi-Fi را بدون انتقال داده حفظ می کند".
  • در خواب عمیق ، قدرت به 20uA کاهش می یابد.

برای اطمینان از اینکه وای فای بدون ضرورت فعال نمی ماند ، ترجیح دادم آن را با دستورات زیر غیرفعال کنم. به فراوانی () فراخوانی توجه کنید … بدون آنها ، ESP خراب می شود:

WiFi.disconnect ()؛

تاخیر (1000) ؛ WiFi.mode (WIFI_OFF) ؛ تاخیر (1000) ؛ WiFi.forceSleepBegin ()؛ تأخیر (1) ؛

به طور کلی ، پس از چند روز کار ، به نظر می رسد کار می کند و به ویژه به درستی بارگیری می شود:

  • این به من این امکان را می دهد که هر ساعت سرووموتور را برای قرار دادن خانه در جهت خورشید اجرا کنم.
  • همچنین می توانم به خودم اجازه دهم هر ساعت یکبار رابط شبکه را دوباره فعال کنم تا سطح شارژ باتری را به Domoticz ارسال کنم.

مرحله 4: نصب مگنت و مخاطبین نی

نصب مخابرات آهن ربا و نی
نصب مخابرات آهن ربا و نی
نصب مخابرات آهن ربا و نی
نصب مخابرات آهن ربا و نی
نصب مگنت های آهن ربا و نی ها
نصب مگنت های آهن ربا و نی ها

طبق معمول ، من از پروکسون خود برای شکل دادن به محل نی در یک تکه چوب استفاده کردم.

برای رفع تماس نی در سوراخ آن ، از کمی جوش J-B استفاده کردم.

برای بسته و خروجی ، یک تکه نوار کوچک ، کمی اره برقی ، و هدف به نتیجه می رسد!

مزیت صندوق پستی من این است که فلزی است و موقعیت آهن ربا را تسهیل می کند به طوری که به درستی با مخاطبین نی تعامل می کند.

مرحله 5: به خانه کوچک من متصل شوید

به خانه کوچک من وصل شوید
به خانه کوچک من وصل شوید
به خانه کوچک من وصل شوید
به خانه کوچک من وصل شوید

برای اینکه بتوانم کابل را که از جعبه نامه به خانه به مخاطبین نی می رود به راحتی وصل کرده و جدا کنم ، استفاده از اتصال اترنت را انتخاب کردم.

می توانید از این مدل استفاده کنید یا مانند من از یک سپر اترنت قدیمی آردوینو که در کشوهای من آویزان است استفاده کنید: او رنج نکشید ، در مقابل اره شجاع بود ، مرگ او سریع بود ^^

فقط یک کلمه در مورد این سپر آردوینو اترنت: انتظار نداشته باشید که 8 راننده جداگانه داشته باشید … کابل ها در داخل سپر با 2 جفت می شوند … این من را برای مدت طولانی دیوانه کرد !!!

مرحله ششم: در خانه…

در خانه …
در خانه …
در خانه …
در خانه …

مکان کافی برای تعمیر نگهدارنده باتری ، تنظیم سروو و اتصال زن RJ45.

مرحله 7: اجازه دهید تا گردان شود…

اجازه دهید صفحه گردان شود…
اجازه دهید صفحه گردان شود…
اجازه دهید آن را بچرخاند…
اجازه دهید آن را بچرخاند…
اجازه دهید صفحه گردان شود…
اجازه دهید صفحه گردان شود…
اجازه دهید صفحه گردان شود…
اجازه دهید صفحه گردان شود…

هدف این است که آن را رو به خورشید نگه داریم…

برای اینکه بتوانم قابلیت چرخش داشته باشم ، از یک پیچ بلند به عنوان محور استفاده کردم ، با چند مهره و دو بلبرینگ…

تا به حال ، من از سرو SG90 (گشتاور: 1.8kg/cm در 4.8v) استفاده می کردم.

برای چرخاندن خانه (و چند گرم آن) کافی است. از سوی دیگر ، من مطمئن نیستم که چرخ دنده های پلاستیکی آن برای مدت طولانی در برابر وزش باد مکرر که در منطقه من وجود دارد مقاومت کند.

من یکی دیگر سفارش دادم (گشتاور MG995: 9.4 کیلوگرم در سانتی متر در 4.8 ولت) ، نه چندان گران ، اما با چرخ دنده های فلزی.

این کار بعدی است که من آن را دریافت می کنم: من به صندوق پستی متصل شده ام تکیه می کنم تا مرا از ورود او مطلع کند!

مرحله 8: برخی از آزمایش ها

Image
Image

چند نکته:

این طرح فقط برای تقلید از تغییرات ساعت در طول روز است تا به من اجازه دهد موقعیت سروو را کنترل کنم.

  • با SG90: بدون نیاز اضافی ، می تواند با ولتاژ OUT ناشی از کنترل کننده باتری کار کند.
  • اما ، با MG 995:

    • زاویه کل چرخش یکسان نیست (وسیع تر): مجبور شدم از یک تابع اضافی برای کاهش آن استفاده کنم (Servo_Delta ()).
    • برای تأمین ولتاژ کافی سروو نیاز به یک DC/DC Step up دارید … ادامه دارد…

/*

- تست با SG90: بدون نیاز اضافی ، می تواند با ولتاژ OUT ناشی از کنترل کننده باتری کار کند - برای MG 995: - از عملکرد Servo_Delta () استفاده کنید … - برای افزایش ولتاژ کافی به سرو نیاز به DC/DC دارید ادامه داده شود: */ #include bool Logs = true؛ Servo myservo؛ #PIN_SERVO D2 // موقعیت سروو برای: 7 ساعت ، 8 ساعت ، 9 ساعت ، 10 ساعت ، 11 ساعت ، 12 ساعت ، 13 ساعت ، 14 ساعت ، 15 ساعت ، 16 ساعت ، 17 ساعت ، 18 ساعت ، 19 ساعت ، 20 ساعت ، 21 ساعت // 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 قدیمی؛ int pos؛ int i؛ void setup () {Serial.begin (115200)؛ } void loop () {for (i = 7؛ i <= 22؛ i ++) {old = i؛ if (i == 7) {if (Logs) Serial.println ("Positionne le servo pour 7 Heure")؛ myservo.attach (PIN_SERVO) ؛ برای (int index = Arr_Servo_Pos [(sizeof (Arr_Servo_Pos) / sizeof (Arr_Servo_Pos [0])) -1] ؛ شاخص 7 && i = Arr_Servo_Pos [i-7] ؛ index-) {if (Logs) Serial.println (فهرست مطالب)؛ if (Logs) Serial.print ("مقدار تعدیل شده:") ؛ if (Logs) Serial.println (Servo_Delta (فهرست)) ؛ تأخیر (200) ؛ //myservo.write(Servo_Delta(index))؛ myservo.write (index)؛ } تأخیر (15) ؛ myservo.write (Arr_Servo_Pos [i-7])؛ // آخرین مقدار را دوباره بنویسید تا از حرکت های تند هنگام datach myservo.detach () جلوگیری شود. }}} تاخیر (2000) ؛ }} int Servo_Delta (مقدار int) {int Temp_val؛ Temp_val = (مقدار*0.80) +9 ؛ بازگشت Temp_val ؛ }

مرحله نهم: خانه کوچک

خانه کوچک
خانه کوچک
خانه کوچک
خانه کوچک
خانه کوچک
خانه کوچک

همانطور که قبلاً گفتم ، من هیچ چاپگر سه بعدی دریافت نکردم. بنابراین تصمیم گرفتم از جعبه سبزیجات قدیمی استفاده کنم…

شاید آب و هوای طولانی دوام نیاورد ، اما تا آن زمان ، من وقت داشتم راه حل دیگری را در نظر بگیرم (یا دوستی که صاحب چاپگر سه بعدی است): برای محافظت از چوب ، همه جا لاک الکل اضافه کردم…

شما می توانید "پرده های زیبا" را ببینید … این زمانی اتفاق می افتد که از همسر خود بخواهید کار را انجام دهد ^^

مرحله 10: طرح

در حال پیشرفت … اما به نظر می رسد پایدار است

من هنوز روی کد کار می کنم: از آنجا که این نسخه قطعی نیست ، نظرات / توصیه های شما خوش آمدید ؛-)

چند نکته:

  • آنها تأخیرهای زیادی () در کد دارند: این کار برای جلوگیری از تصادف زیاد Lolin ، به ویژه در هنگام توقف راه اندازی شبکه…
  • من راهی آسان و قابل اعتماد برای بدست آوردن آزیموت خورشید پیدا نکردم: به همین دلیل مقدار سروو را بر اساس آنچه مشاهده کردم ثابت کردم … من یک راه خوب (و ساده) برای بدست آوردن آن دارم ، من علاقه مند هستم! شاید یک مسیر برای مطالعه در اینجا ، حتی اگر ترجیح می دهم یک API آنلاین آزیموت را مستقیماً با توجه به تاریخ ، ساعت و موقعیت جغرافیایی به من بدهد …
  • درباره تکنیک خواب: از آنجایی که Lolin یک پردازنده Tensilica 32 بیتی است ، حداکثر مقدار آن برای یک عدد صحیح بدون علامت 32 بیتی 4294967295 است … سپس ، حداکثر 71 دقیقه را برای فاصله خواب عمیق در نظر می گیرد. به همین دلیل است که من بارها و بارها حدود 60 دقیقه می خوابم…

ویرایش - 2018/10/08:

متوجه شدم سروو دارای حرکات تکان دهنده زیادی است ، مخصوصاً قبل از اتصال () ، جدا شدن () و هر بار که لولین از خواب عمیق بیدار می شود ().

هنگام مطالعه کمی بیشتر برگه های داده ، من به دو نکته پی بردم:

  • در برگه اطلاعات Lolin ، خروجی D4 قبلاً با BUILTIN_LED وصل شده است…
  • در برگه اطلاعات ESP8266ex ، ما یاد می گیریم که خروجی D4 به عنوان UART 1/U 1 TXD (فرستنده گیرنده جهانی ناهمزمان) استفاده می شود. همچنین مشخص شده است که این UART1 برای چاپ گزارش استفاده می شود.

با خواندن این اطلاعات ، متوجه شدم که خروجی D4 ایده خوبی نیست ، به ویژه برای مدیریت سروو موتور!

بنابراین ، در حال حاضر خروجی مورد استفاده برای کنترل سرو موتور ، D2 است ، کد زیر بر این اساس به روز شده است.

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

تاریخ ایجاد: 08/Date mise en prod: 08/نسخه: 0.9.4 نسخه IDE Arduino: 1.8.6 سرعت بارگذاری: 921600 نوع de carte dans l'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 ورودی آنالوگ ، حداکثر ورودی 3.3 ولت 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 ، SCK GPIO14 Reed relève D6 IO، MISO GPIO12 Reed lettre D7 IO، MOSI GPIO13 Reed colis D8 IO، 10k pull-down، SS GPIO15 G Ground GND 5V 5V-3V3 3.3V 3.3V 3.3V RST Reset RST Connecté à D0 (pour le deep.sleep) ************************************ # #شامل bool Logs = true ؛ // wifi const char* ssid = "LOL"؛ const char* رمز عبور = "LOL"؛ IP IP (192 ، 168 ، 000 ، 000) ؛ IPAddress dns (192 ، 168 ، 000 ، 000) ؛ دروازه IPAddress (192 ، 168 ، 000 ، 000) ؛ زیر شبکه IPAddress (255 ، 255 ، 000 ، 000) ؛ مشتری WiFiClient ؛ // سروو #شامل #تعریف PIN_SERVO D2 Servo myservo؛ // موقعیت سروو برای: 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} ؛ // نی #تعریف PIN_SWITCH_OUT D5 بایت Old_Switch_State_OUT؛ بایت Switch_State_OUT؛ #تعریف PIN_SWITCH_IN_PARCEL D6 بایت Old_Switch_State_IN_PARCEL ؛ بایت Switch_State_IN_PARCEL؛ #تعریف PIN_SWITCH_IN_LETTER D7 بایت Old_Switch_State_IN_LETTER؛ بایت Switch_State_IN_LETTER؛ سوئیچ طولانی بدون علامت PressTime؛ const طولانی بدون امضا DEBOUCE_TIME = 200 ؛ // آنالوگ #تعریف PIN_ANALOG A0 // MQTT #شامل const char* MQTT_Server_IP = "آدرس MQTT شما" ؛ const int MQTT_Server_Port = ؛ int IDX_Letter_Box = ؛ int IDX_Parcel_Box = ؛ int IDX_Letter_Box_Battery = ؛ PubSubClient ClientMQTT (مشتری) ؛ char MQTT_Message_Buff [70] ؛ رشته MQTT_Pub_String ؛ // تنش شناور vcc؛ // NTP #شامل زمان_ tnow؛ int Old_Time = 0 ؛ int Int_Heures = 0 ؛ int Int_Minutes = 0 ؛ int Int_Sleep_Duration = 63؛ void setup () {Serial.begin (115200)؛ شبکه (درست) ؛ 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 ()؛ شبکه (غلط) ؛ // NTP مجموعه tnow = زمان (nullptr)؛ Int_Heures = String (ctime (& tnow)). زیر رشته (11 ، 13).toInt ()؛ Int_Minutes = String (ctime (& tnow)). زیر رشته (14 ، 16).toInt () ؛ // خواب عمیق برای شب اگر (! ((Int_Heures> = 7) && (Int_Heures <= 20))) {Serial.print ("Sleep pour la nuit (") ؛ Serial.print (Int_Sleep_Duration - Int_Minutes) ؛ سریال println ("دقیقه")) ؛ خواب (Int_Sleep_Duration - Int_Minutes) ؛ }} void loop () {// NTP set tnow = time (nullptr)؛ Int_Heures = String (ctime (& tnow)). زیر رشته (11 ، 13).toInt ()؛ Int_Minutes = String (ctime (& tnow)). زیر رشته (14 ، 16).toInt () ؛ //Serial.println(String(ctime(&tnow)))؛ //Serial.println ("Heure:" + String (ctime (& tnow)). زیر رشته (11 ، 13)) ؛ //Serial.println (String (ctime (& tnow)). زیر رشته (11 ، 13).toInt ()) ؛ // مدیریت سرو اگر (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 (فهرست مطالب)؛ تأخیر (200) ؛ myservo.write (index)؛ } تأخیر (15) ؛ myservo.write (Arr_Servo_Pos [Int_Heures-7])؛ // آخرین مقدار را بنویسید تا از حرکت های تند هنگام جدا کردن myservo.detach () جلوگیری کنید. } شبکه (درست) ؛ SendBatteryLevel ()؛ شبکه (غلط) ؛ }}} // خواب عمیق اگر شنبه بعد از ساعت 13 اگر ((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 ("دقیقه" ") ؛ خواب (Int_Sleep_Duration - Int_Minutes) ؛ } // Deepsleep if Sunday یک روز (String (ctime (& tnow)). substring (0، 3) == "Sun") {if (Logs) Serial.print ("Sleep pour le dimanche (")؛ if (Logs) Serial.print (Int_Sleep_Duration - Int_Minutes) ؛ اگر (Logs) Serial.println ("دقیقه" ") ؛ خواب (Int_Sleep_Duration - Int_Minutes) ؛ } // مدیریت نیزار 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!")؛ شبکه (درست) ؛ تأخیر (5000) ؛ MQTT_Pubilsh (IDX_Letter_Box ، 0 ، "0") ؛ تأخیر (5000) ؛ MQTT_Pubilsh (IDX_Parcel_Box ، 0 ، "0") ؛ تأخیر (5000) ؛ شبکه (نادرست) ؛ }} 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é!")؛ شبکه (درست) ؛ تأخیر (5000) ؛ MQTT_Pubilsh (IDX_Letter_Box ، 1 ، "Courrier") ؛ تأخیر (5000) ؛ شبکه (نادرست) ؛ }} 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é!")؛ شبکه (درست) ؛ تأخیر (5000) ؛ MQTT_Pubilsh (IDX_Parcel_Box ، 1 ، "Colis") ؛ تأخیر (5000) ؛ شبکه (غلط) ؛ }} Old_Switch_State_IN_PARCEL = Switch_State_IN_PARCEL؛ }} void SendBatteryLevel () {تأخیر (5000)؛ vcc = analogRead (PIN_ANALOG) /10.24 ؛ if (Logs) Serial.println ("\ t تنش مربوط:" + رشته (vcc ، 0)) ؛ MQTT_Pubilsh (IDX_Letter_Box_Battery، 0، String (vcc، 0))؛ تأخیر (5000) ؛ } void sleep (int Min_Duration) {ESP.deepSleep (Min_Duration * 60e6) ؛ } void network (bool UpDown) {if (UpDown) {Serial.print ("شروع شبکه")؛ WiFi.forceSleepWake ()؛ تأخیر (1) ؛ // init WIFI WiFi.config (ip ، dns ، gateway ، subnet) ؛ WiFi.begin (ssid ، رمز عبور) ؛ while (WiFi.status ()! = WL_CONNECTED) {تأخیر (500)؛ Serial.print (".") ؛ } تأخیر (5000) ؛ Serial.println (".") ؛ Serial.print ("\ tConnected - آدرس IP:")؛ Serial.println (WiFi.localIP ()) ؛ // init MQTT ClientMQTT.setServer (MQTT_Server_IP ، MQTT_Server_Port) ؛ // Init NTP Serial.print ("\ t زمان همگام سازی") ؛ configTime (0 ، 0 ،" fr.pool.ntp.org ") ؛ setenv (" TZ "،" CET-1CEST ، M3.5.0 ، M10.5.0/3 "، 0) ؛ در حالی که (زمان (nullptr) <= 100000) {Serial.print (".")؛ تاخیر (100)؛} Serial.println (".")؛} else {Serial.println ("توقف شبکه.")؛ WiFi.disconnect ()؛ تأخیر (1000) ؛ WiFi.mode (WIFI_OFF) ؛ تاخیر (1000) ؛ WiFi.forceSleepBegin () ؛ تأخیر (1)؛}} void اتصال مجدد () {در حالی که (! ClientMQTT.connected ()) {Serial.print (" / t تلاش برای اتصال MQTT … ") ؛ // تلاش برای اتصال if (ClientMQTT.connect (" ESP8266ClientBAL ")) {Serial.println (" متصل ")؛} else {Serial.print (" fail، rc = ") ؛ سریال چاپ {if (! ClientMQTT.connected ()) اتصال مجدد () ؛ vcc = analogRead (PIN_ANALOG) /10.24 ؛ Serial.println ("\ t ارسال اطلاعات به MQTT …") ؛ MQTT_Pub_String = "{" idx / ":" + رشته (Int_IDX) + "، \" Battery / ":" + رشته (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 ()؛ }

مرحله 11: Domoticz

دووموتیچ
دووموتیچ
دووموتیچ
دووموتیچ
دووموتیچ
دووموتیچ

در Domoticz:

برای استفاده عمومی:

  • دو "Dummy (کاری انجام نمی دهد ، برای سوئیچ های مجازی استفاده کنید)" ایجاد کنید:

    1. اولین مورد برای حروف…
    2. دومی برای بسته…
  • برای هر یک از آنها ، اعلان ها را شخصی کنید.
  • البته ، شما باید رمز Tegegram خود را تنظیم کنید.

به صورت اختیاری:

برای نظارت بر میزان شارژ باتری خود می توانید "حسگر ابزار" را اضافه کنید.

نکات: در اینجا می توانید تعداد زیادی آیکون سفارشی رایگان پیدا کنید…

مرحله 12: نتیجه گیری

نتیجه
نتیجه
نتیجه
نتیجه

امیدوارم این دستورالعمل به شما کمک کند:

  • آیا می خواهید letterlbox متصل خود را بسازید ؛
  • یا فقط به شما ایده هایی برای پروژه های خود بدهید!

اگر ایده ای برای پیشرفت دارید ، من گوش می کنم!

PS: متأسفم برای انگلیسی ، ترجمه گوگل به من بسیار کمک می کند اما احتمالاً کامل نیست ؛-)

توصیه شده: