فهرست مطالب:

پرچم صندوق پستی MQTT و Wifi: 7 مرحله (همراه با تصاویر)
پرچم صندوق پستی MQTT و Wifi: 7 مرحله (همراه با تصاویر)

تصویری: پرچم صندوق پستی MQTT و Wifi: 7 مرحله (همراه با تصاویر)

تصویری: پرچم صندوق پستی MQTT و Wifi: 7 مرحله (همراه با تصاویر)
تصویری: با یه دختر این کارو نکن😰 2024, جولای
Anonim
پرچم صندوق پستی MQTT و Wifi
پرچم صندوق پستی MQTT و Wifi

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

چند سالی من پروژه اتوماسیون خانه خود را آغاز کردم. این کار با ساختن یک فرستنده کنترل شده با سرور 433 مگاهرتز با یک Arduino شروع شد تا تعداد زیادی سوئیچ از راه دور ارزان قیمت مبتنی بر PT2262 را تغییر دهد. بعداً یک گیرنده مبتنی بر آردوینو برای ایستگاه هواشناسی خود اضافه کردم ، تماس کنترل شارژر EV و غیره را وصل کردم. همه چیز بیش از پیش در هم تنیده شد (و پیچیده شد!). بنابراین ، چند ماه پیش تصمیم گرفتم همه چیز را بر اساس MQTT برای پیام رسانی ، Node-RED برای اتوماسیون (هر دو در یک Raspberry Pi B+) و MariaDb برای ورود به سیستم (در Synology NAS من اجرا می شود) استاندارد کنم. بعداً کارگزار MQTT (Mosquitto) و Node-RED را نیز به NAS منتقل کردم.

این دستورالعمل یک پروژه احمقانه برای سرگرم کننده را توصیف می کند که صندوق پستی خیابان من را در این زیرساخت خانه متصل می کند. ایده این است که اگر کسی صندوق پستی نصب شده روی حصار را در فاصله 10 متری درب ورودی باز کند ، به تلفن من و احتمالاً سایر دستگاه ها به من سیگنال می دهد.

مرحله 1: طرح کلی ، پیش نیازها و قسمت ها

طرح کلی

در سطح بالا ، صندوق پستی باید هنگام باز شدن ، یک پیام منحصر به فرد MQTT به کارگزار ارسال کند تا مشترکان آن موضوع مطلع شوند. Node-RED نیز مشترک می شود و برخی از اتوماسیون را انجام می دهد ، در این مورد یک ایمیل و/یا یک پیام فشار به تلفن من ارسال می کند.

صندوق پستی باید با باتری کار کند و حداقل یک سال کار کند و این کار را با استفاده از شبکه WiFi من انجام دهد. از آنجا که بیدار کردن یک میکرو کنترلر و اتصال به یک شبکه WiFi می تواند چندین ثانیه طول بکشد ، من نمی توانم از سوئیچ فعال سازی برای قطع برق استفاده کنم. در عوض ، پس از بسته شدن درب صندوق پستی ، باید اجازه داد پردازنده کار خود را به پایان برساند.

پیش نیازها

من تصور می کنم که شما مهارت های لحیم کاری کمی دارید ، کمی با Arduino IDE کار کرده اید و تخته های ESP8266 را با استفاده از مدیر بردها نصب کرده اید. همچنین برای برنامه ریزی میکرو کنترلر باید یک آداپتور سریال USB 3.3 ولت داشته باشید.

همچنین فرض می کنم که شما یک کارگزار MQTT و یک سرور Node-RED دارید. در غیر اینصورت ، دستورالعمل های زیادی در اینترنت وجود دارد ، اما من توصیه می کنم اگر می خواهید این برنامه را روی Pi یا Ubuntu اجرا کنید یا از تصویر Andreas Spiess برای Pi Zero W استفاده کنید ، از مسیر تنبل استفاده کنید و از اسکریپت نصب عالی Peter Scargill استفاده کنید. پیوندهای موجود در توضیحات آن ویدئو) ، که چند ساعت از تماشای اجرای اسکریپت های نصب برای شما صرفه جویی می کند. از طرف دیگر ، می توانید سیستم عامل را به طور مستقیم ایمیل ارسال کنید ، اما با این کار انعطاف پذیری زیادی را از دست خواهید داد.

قطعات

  • 1 جعبه بسته ، 3 عدد باتری AA
  • 2 عدد باتری قلمی
  • 1 ماژول ESP8266 برای این پروژه از ESP-01 استفاده کردم
  • 1 سوئیچ میکرو
  • 1 مقاومت 47K
  • 1 مقاومت 4M7
  • 1 خازن 2.2uF
  • 1 لوله پلاستیکی نازک. من از قلم استفاده کردم
  • 1 کبریت ضخیم و بلند یا چوب آب نبات چوبی. باید به راحتی در لوله پلاستیکی جا بگیرد و حرکت کند

مرحله 2: سخت افزار: جعبه ، سوئیچ و سیم کشی

سخت افزار: جعبه ، سوئیچ و سیم کشی
سخت افزار: جعبه ، سوئیچ و سیم کشی
سخت افزار: جعبه ، سوئیچ و سیم کشی
سخت افزار: جعبه ، سوئیچ و سیم کشی
سخت افزار: جعبه ، سوئیچ و سیم کشی
سخت افزار: جعبه ، سوئیچ و سیم کشی

من با یک جعبه باتری قدیمی از یک تزئین منسوخ کریسمس شروع کردم. این دستگاه برای سه باتری اندازه AA طراحی شده است. از آنجا که ESP8266 به خوبی روی 3 ولت کار می کند ، می توانم از دو باتری استفاده کنم و از موقعیت سوم برای میکرو کنترلر استفاده کنم. توجه کنید که چگونه جعبه دارای یک محفظه کوچک اضافی است که می توانم از آن برای سوئیچ فعال سازی استفاده کنم. من از یک سوئیچ بسیار متداول که در تصاویر نشان داده شده استفاده کردم ، اما فنری را که در حالت روشن یا خاموش چفت می کند ، برداشته ام. من دو سیم نازک را به مخاطبین NC لحیم کردم و با یک قطره کوچک از چسب فوق العاده در جعبه چسباندم.

بعد ، من یک سوراخ در جلد بالای آن مطابق با یک لوله پلاستیکی که از یک قلم توپ برداشته شده است ، ایجاد کردم. سوراخ دقیقاً با سوئیچ خط می یابد و یک پیستون ساخته شده از یک چوب کبریت ضخیم را هدایت می کند.

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

مرحله 3: سخت افزار: ESP-01

سخت افزار: ESP-01
سخت افزار: ESP-01
سخت افزار: ESP-01
سخت افزار: ESP-01
سخت افزار: ESP-01
سخت افزار: ESP-01

با توجه به نیاز WiFi ، کل پروژه ESP8266 را فریاد می زند. این کنترل کننده وای فای کوچک به عنوان ماژولی که با قیمت 2.50 یورو خریداری می شود ، تبدیل به اسب کار مورد علاقه جامعه مشغول به کار شده است و یک WiFi کامل و یک پشته TCP/IP را با بیش از ظرفیت کافی برای اجرای برنامه های شخصی خود ادغام می کند. Arduino IDE (یا Atom با افزونه PlatformIO) از ESP8266 به طور کامل پشتیبانی می کند.

من معمولاً از ESP-12F استفاده می کردم ، اما یک تخته کوچک ESP-01 داشتم که برای کار مناسب بود و به خوبی در جعبه باتری جا می شد. تنها مشکل این است که فلش سیستم عامل در ESP-01 بسیار پیچیده است. در مرحله بعد در مورد آن بیشتر توضیح دهید. یک تغییر باید انجام شود: شما باید LED قدرت قرمز را از روی برد بردارید زیرا به طور مداوم 3 میلی آمپر می کشد. با حذف LED ، ماژول فقط از چند ده uA در حالت خواب عمیق استفاده می کند که با دو باتری AA با کیفیت بیش از یک سال دوام می آورد.

معلوم شد که می توانم از دو نوار هدر زن 4 پین و لحیم کاری روی چند قطعه اضافی به صورت رایگان استفاده کنم تا بتوانم ESP-01 را برای به روز رسانی سیستم عامل حذف کنم ، در حالی که هنوز در قسمت سوم باتری قرار می گیرد.

سیم کشی صحیح ESP بسیار مهم است. با استفاده از ورق تقلب بالا ، آن را به صورت زیر سیم کشی کنید.

  1. باتری به علاوه Vcc (D2) ، CH_PD (B2) ، RXD (D1) ، GPIO0 (C1) ، GPIO2 (B1) و یک مقاومت 47K.
  2. باتری منهای GND (A1) و یک سیم سوئیچ.
  3. سیم دیگر سوئیچ به خازن 100nF و مقاومت 4M7.
  4. انتهای باز هر دو مقاومت و خازن به RST (C2).
  5. TXD (A2) می تواند بدون اتصال باقی بماند.

ویرایش: مجبور شدم ESP-01 را جایگزین کنم زیرا اشتباه احمقانه ای انجام دادم و آن را از بین بردم. معلوم شد که در کمال تعجب ESP-01 جدید با خازن 100nF اصلی تنظیم مجدد نشد. احتمالاً طراحی کمی متفاوت دارد. من آن را با یو 2.2 uF جایگزین کردم و اکنون دوباره کار می کند

پس از اتمام کار ، همه چیز را می توان در جعبه نصب کرد ، اما منتظر بمانید ، ابتدا باید ماژول را برنامه ریزی کنیم.

مرحله 4: برنامه نویسی ESP-01

برنامه نویسی ESP-01
برنامه نویسی ESP-01
برنامه نویسی ESP-01
برنامه نویسی ESP-01
برنامه نویسی ESP-01
برنامه نویسی ESP-01

برای فلش کردن سیستم عامل در ESP-01 خود ، می توانید یک دکل کوچک بسازید یا یک برنامه نویس (تقریبا) کامل به قیمت حدود 1 یورو بخرید.

سخت افزار برنامه نویسی

یک دکل کوچک با دو سر زن برای ESP-01 بسازید. همچنین ، شما به یک ماژول سریال USB نیاز دارید که بتواند 3.3 ولت را تأمین کند. توجه داشته باشید که تراشه ESP8266 5 ولت سخت نشده است ، بنابراین اشتباه در اینجا می تواند ماژول شما را از بین ببرد. به هر حال ، دوباره با استفاده از ورق تقلب ، دکل خود را به صورت زیر سیم کشی کنید:

  1. 3.3 ولت از ماژول USBSerial به Vcc ، CH_PD ، RST و GPIO2.
  2. GND ماژول USBSerial به GND و GPIO0.
  3. TXD ماژول USBSerial به RXD.
  4. RDX ماژول USBSerial به TXD.

برنامه نویس پیش ساخته

ساختن وسایل شخصی شما جالب است ، اما روش تنبل تر این است که از سایت حراج مورد علاقه خود یک رابط ESP-01 به سریال دریافت کنید ، تصویر بالا را ببینید. این بسیار راحت تر ، جمع و جورتر و قابل اطمینان تر از یک دکل است. با این حال ، برخی از آنها برنامه نویس نیستند ، فقط رابط های سریال هستند. شما باید یک پل سیم بین GND (پین A1) و GPIO0 (پین C1) را در پشت رابط لحیم کنید ، تصویر دوم را ببینید. توجه داشته باشید که ESP-01 باید با آنتن رو به دوشاخه USB متصل شود ، نه برعکس!

توجه: آنها همچنین با یک سوئیچ وجود دارند ، تصویر سوم را ببینید ، بسیار خوب است.

سیستم عامل را بارگذاری کنید

با فرض IDE آردوینو 1.8.3 یا بالاتر ، Tools> Board را انتخاب کرده و برد مورد نظر خود را انتخاب کنید. برای ESP-01 مانند من ، "Generic ESP8266 Module" را انتخاب کنید و گزینه های زیر را تنظیم کنید (این باید به طور پیش فرض باشد):

  1. حالت فلش: DIO
  2. فرکانس فلش: 40 مگاهرتز
  3. فرکانس پردازنده: 80 مگاهرتز
  4. اندازه فلش: 512 کیلوبایت (64 کیلوبایت SPIFFS) توجه: در صورت استفاده از تخته سیاه ESP-01 ، 1 مگابایت (64 کیلوبایت SPIFFS) را انتخاب کنید
  5. پورت اشکال زدایی: غیرفعال است
  6. سطح اشکال زدایی: ندارد
  7. روش بازنشانی: ck
  8. سرعت بارگذاری 115200
  9. پورت: پورت متصل به رابط سریال USB خود را انتخاب کنید. برای رایانه اوبونتو من /dev /ttyUSB0 بود

دکل/برنامه نویس را وصل کنید ، Sketch را که می توانید در اینجا پیدا کنید بارگذاری کنید https://gitlab.com/jeroenmeijer/Mailbox.git. اعتبار کارگزار WiFi و MQTT و پیکربندی IP خود را در config.h تهیه کرده و Upload را انتخاب کنید.

مرحله 5: جمع آوری همه آن

مونتاژ همه آن
مونتاژ همه آن

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

$ mosquitto_sub -h mqttbroker -v -t "stat/#" -u user -P password

تقریباً 6 ثانیه پس از باز شدن درب بیرونی ، پیام MQTT زیر منتشر می شود. از زمان برای بیدار کردن میکرو کنترلر و ایجاد اتصال WiFi و کارگزار استفاده می شود.

stat/mailbox/trigger {"vcc": 3050 ، "flap": true ، "prev": 0 ، "RSSI": 29 ، "version": "005"}

در این مدت ، میکروکنترلر تقریباً 70 میلی آمپر استفاده کرد. پس از اتمام ، به خواب عمیق می رود و در مورد من کمتر از 20uA استفاده می کرد. "flap" همیشه صادق است ، "vcc" ولتاژ باتری را در mV بیان می کند و "prev" باید 0 باشد. اگر 1 یا 2 باشد ، به این معنی است که صندوق پستی قبلاً قادر به ارسال پیام نبوده است ، زیرا نمی تواند به WiFi ، یا به دلیل عدم اتصال به کارگزار MQTT. "RSSI" قدرت سیگنال WiFi است. هر دو برای تشخیص مشکلات بسیار مفید هستند.

ایده خوبی است که ولتاژ باتری را برای چند روز تحت نظر داشته باشید تا مطمئن شوید دستگاه به خوبی کار می کند و به دلایلی باتری آن را خالی نمی کند.

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

مرحله 6: استفاده از Node-RED برای عمل بر روی پیام MQTT

استفاده از Node-RED برای عمل بر روی پیام MQTT
استفاده از Node-RED برای عمل بر روی پیام MQTT

در نهایت ، من یک جریان ساده در Node-RED ایجاد کردم. اولین گره در موضوع صندوق پستی (stat/postbox/trigger) مشترک می شود. هنگامی که یک پیام دریافت می شود ، گره دوم یک ایمیل *) را فرمت می کند. گره نهایی آن را با استفاده از gmail به عنوان سرور SMTP به آدرس gmail من ارسال می کند. سپس تلفن من مرا از نامه های جدید مطلع می کند.

من جریان Node-RED را به یک قطعه gitlab اضافه کرده ام تا بتوانید آن را به جریانهای Node-RED خود وارد کنید.

البته می توانید چند گره دیگر اضافه کنید ، به عنوان مثال برای ثبت رویدادهای صندوق پستی به MariaDb یا SqlLite یا ایجاد زنگ هشدار اضافی هنگامی که ولتاژ باتری به زیر 2.7 ولت می رسد.

شکار نامه مبارک!

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

گام هفتم: افکار بعدی

همیشه این احساس وجود دارد که می شد کارها را بهتر انجام داد.

تعویض

من ترجیح می دهم از یک آهنربا (فوق العاده) و یک کناره نی به جای رویکرد پیستون تا حدودی ناشیانه استفاده کنم. دو دلیل داشت. یکی این است که هیچ راهی وجود نداشت که بتوانم با بسته شدن تماس هنگام باز کردن جعبه این کار را انجام دهم و بسته بودن آن همیشه به این معنی است که همیشه جریان کوچکی در جریان است. در گذشته ، کمتر از 1uA که از طریق مقاومت 4M7 عبور می کند ، از نظر عمر باتری مشکل بزرگی نخواهد بود. دیگری عملی تر بود. من این پروژه را شنبه تنظیم کردم و نرم افزار را نوشتم ، همه چیز را در روز یکشنبه از آنچه در اطراف بود تهیه کنید. من به سادگی یک تماس نی در جعبه آشغال نداشتم.

توجه: همانطور که diy_bloke اظهار داشت ، کنتاکت های نی تمایل به چسبندگی دارند وقتی برای مدت طولانی مغناطیسی می شوند ، بنابراین شاید پیستون اصلا ایده بدی نبود. خواهیم دید. *)

پیغام تخلیه

صندوق پستی هنگام خالی کردن پیام نیز ارسال می کند. این مسئله بزرگی نیست اما با دریافت هشدار به تعداد بیشتری از افراد در خانه ، ممکن است در یک حلقه چک کنید که صندوق پستی را نادیده می گیرد و هدف کلی آن را رد می کند! در این مورد چند راه وجود دارد ، مانند بررسی اینکه آیا درب داخلی بالا آمده است و در این صورت ، پیامی ارسال نکنید. یا به جای استفاده از کلید درب ، یک آشکارساز در پایین صندوق پستی نصب کنید. یا یک دکمه ریست کوچک برای فشار دادن هنگام خالی کردن آن. با این حال ، همه چیز را پیچیده می کند و احتمالاً قابلیت اطمینان را بدتر می کند.

پیام رسانی

ارسال ایمیل یک راه م effectiveثر اما خام برای خاموش کردن هشدار است. یک راه زیبا تر می تواند یک برنامه تلفن باشد ، اما من یک برنامه داشبورد MQTT Android پیدا نکرده ام که بتواند پیکربندی شود تا هنگام دریافت یک پیام خاص ، هشدار سیستم عامل را فعال کند. اگر یکی در اطراف وجود دارد ، لطفاً به نظرات اضافه کنید. **)

*) پس از بیش از یک سال کار ، معلوم می شود که چوب آب نبات چوبی که من استفاده کردم ، عمدتا کاغذ رول سخت ، تمایل به کوتاه شدن تحت فشار ثابت فنر سوئیچ دارد. پس از عیب یابی ، یک چوب چوبی را جایگزین آن کردم.

**) من در حال حاضر از PushBullet برای پیام های فشار ، جدا از داشبورد MQTT استفاده می کنم. رابط کاربری کوچک Node-RED با API را می توانید در اینجا پیدا کنید. اطمینان حاصل کنید که کد دسترسی را در گره "آماده شدن برای pushbullet" و آدرس ایمیل خود را برای اهداف جایگزین در گره "دوباره امتحان" وارد کنید.

توصیه شده: