جدول المحتويات:

علم صندوق البريد MQTT و Wifi: 7 خطوات (بالصور)
علم صندوق البريد MQTT و Wifi: 7 خطوات (بالصور)

فيديو: علم صندوق البريد MQTT و Wifi: 7 خطوات (بالصور)

فيديو: علم صندوق البريد MQTT و Wifi: 7 خطوات (بالصور)
فيديو: اليوم الثاني - دورة إنترنت الأشياء Internet of Things 2024, شهر نوفمبر
Anonim
MQTT و Wifi-Powered Mailbox Flag
MQTT و Wifi-Powered Mailbox Flag

ملاحظة: محدث ببرنامج ثابت جديد وتخطيطي ونصائح للمبرمج

بعد عامين ، شرعت في مشروع أتمتة المنزل الخاص بي. لقد بدأت من خلال بناء جهاز إرسال يتحكم فيه الخادم 433 ميجاهرتز مع Arduino لتبديل الكثير من المفاتيح البعيدة الرخيصة القائمة على PT2262. في وقت لاحق ، أضفت جهاز استقبال قائم على Arduino لمحطة الطقس الخاصة بي ، وقمت بتوصيل جهة اتصال التحكم لشاحن 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 باستخدام Boards Manager. تحتاج أيضًا إلى محول تسلسلي USB 3.3 فولت لبرمجة وحدة التحكم الصغيرة.

أفترض أيضًا أن لديك وسيط MQTT وخادم Node-RED قيد التشغيل. إذا لم يكن الأمر كذلك ، فهناك العديد من التعليمات على الإنترنت ، لكني أنصح باتباع المسار البطيء واستخدام نص التثبيت الممتاز لبيتر سكارجيل إذا كنت تريد تشغيل هذا على أي Pi أو Ubuntu ، أو استخدام صورة Andreas Spiess لـ Pi Zero W (الروابط في وصف هذا الفيديو) ، مما سيوفر لك بضع ساعات من مشاهدة نصوص التثبيت قيد التشغيل. بدلاً من ذلك ، يمكنك جعل البرامج الثابتة ترسل بريدًا إلكترونيًا مباشرةً ، لكنك ستفقد الكثير من المرونة عند القيام بذلك.

القطع

  • 1 مغلق ، 3 بطاريات AA
  • بطاريتان مقاس AA
  • 1 وحدة ESP8266. بالنسبة لهذا المشروع ، استخدمت ESP-01
  • 1 مفتاح صغير
  • 1 مقاومة 47 كيلو
  • 1 4M7 المقاوم
  • 1 مكثف 2.2 فائق التوهج
  • 1 أنبوب بلاستيكي رفيع. لقد استخدمت قلمًا
  • 1 عصا سميكة ، طويلة أو مصاصة. يجب أن تتلاءم وتتحرك بسهولة في الأنبوب البلاستيكي

الخطوة 2: الأجهزة: الصندوق ، والتبديل ، والأسلاك

الأجهزة: الصندوق والمفتاح والأسلاك
الأجهزة: الصندوق والمفتاح والأسلاك
الأجهزة: الصندوق والمفتاح والأسلاك
الأجهزة: الصندوق والمفتاح والأسلاك
الأجهزة: الصندوق ، والتبديل والأسلاك
الأجهزة: الصندوق ، والتبديل والأسلاك

لقد بدأت بصندوق بطارية قديم من زينة عيد الميلاد البائدة. تم تصميمه لثلاث بطاريات بحجم AA. نظرًا لأن ESP8266 سيعمل بشكل جيد على 3 فولت ، يمكنني استخدام بطاريتين واستخدام الموضع الثالث لوحدة التحكم الدقيقة. لاحظ كيف كان الصندوق يحتوي على مقصورة إضافية صغيرة يمكنني استخدامها لمفتاح التنشيط. لقد استخدمت نوعًا شائعًا جدًا من المفاتيح الموضح في الصور ، لكنني أزلت الزنبرك الذي يغلقه في وضع التشغيل أو الإيقاف. لقد قمت بلحام سلكين رفيعين بجهات اتصال NC ولصقها في الصندوق بقطرة صغيرة من الغراء الفائق.

بعد ذلك ، قمت بحفر ثقب في الغطاء العلوي يطابق أنبوبًا بلاستيكيًا مأخوذًا من قلم كرة. يصطف الثقب تمامًا مع المفتاح ويوجه مكبسًا مصنوعًا من عصا ثقاب سميكة.

أخيرًا ، قمت بلحام سلكين آخرين بملامسات البطارية ووجهت جميع الأسلاك الأربعة إلى موضع البطارية الثالثة ، حيث كانت وحدة التحكم الدقيقة.

الخطوة 3: الأجهزة: ESP-01

المعدات: ESP-01
المعدات: ESP-01
المعدات: ESP-01
المعدات: ESP-01
المعدات: ESP-01
المعدات: ESP-01

نظرًا لمتطلبات WiFi ، فإن المشروع بأكمله يصرخ ESP8266. أصبحت وحدة تحكم WiFi الصغيرة هذه هي العمود الفقري المفضل لمجتمع العبث كوحدة يتم شراؤها مقابل 2.50 يورو وتدمج مكدس WiFi و TCP / IP كاملًا ، مع أكثر من سعة كافية لتجنيب تشغيل البرامج الخاصة بك. يدعم Arduino IDE (أو Atom مع البرنامج المساعد PlatformIO) بشكل كامل ESP8266.

عادةً ما كنت آخذ ESP-12F ، لكن كان لديّ لوحة ESP-01 صغيرة موضوعة حولها والتي كانت مثالية للوظيفة وتتناسب بشكل جيد مع صندوق البطارية. المشكلة الوحيدة هي أن عملية فلاش البرامج الثابتة في ESP-01 معقدة للغاية. المزيد عن ذلك في الخطوة التالية. هناك تعديل واحد يجب إجراؤه: عليك إزالة مؤشر الطاقة الأحمر من اللوحة ، حيث إنه يسحب 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 Serial ، قادرة على توفير 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-to-serial من موقع المزاد المفضل لديك ، انظر الصورة أعلاه. هذا أسهل بكثير وأكثر إحكاما وموثوقية من منصة الحفر. ومع ذلك ، فإن بعض هؤلاء ليسوا مبرمجين ، بل مجرد واجهات تسلسلية. تحتاج إلى لحام جسر سلكي بين GND (pin A1) و GPIO0 (pin C1) على الجانب الخلفي من الواجهة ، انظر الصورة الثانية. لاحظ أنه يجب توصيل ESP-01 بالهوائي الذي يواجه قابس USB ، وليس العكس!

ملاحظة: إنها موجودة أيضًا مع مفتاح ، انظر الصورة الثالثة ، لطيفة جدًا.

قم بتحميل البرنامج الثابت

بافتراض أن Arduino 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 التسلسلية. بالنسبة لجهاز كمبيوتر Ubuntu الخاص بي الذي كان / dev / ttyUSB0

قم بتوصيل المنصة / المبرمج ، قم بتحميل Sketch الذي يمكنك العثور عليه هنا https://gitlab.com/jeroenmeijer/Mailbox.git. قم بتوفير بيانات اعتماد وسيط WiFi و MQTT وتكوين IP الخاص بك في config.h واختر تحميل.

الخطوة 5: تجميع كل شيء

تجميع كل شيء
تجميع كل شيء

لقد قمت بحفر فتحة للأنبوب البلاستيكي في الغطاء الداخلي لصندوق البريد الخاص بي ، بالقرب من المفصلة قدر الإمكان ، ثم قمت بلصق صندوق البطارية على الجانب السفلي من الغطاء. بعد ذلك ، استخدمت عود ثقاب كثيف كمكبس. لقد استخدمت القصاصة لقطع المباراة إلى الطول بحيث يفتح المفتاح إذا كان الغطاء الخارجي مغلقًا. لقد تحققت من الاتصال عن طريق فتح الغطاء أثناء تشغيل mosquitto_sub لمراقبة رسائل MQTT (استبدل mqttbroker والمستخدم وكلمة المرور بتكوين MQTT الخاص بك):

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

بعد ست ثوانٍ تقريبًا من فتح الغطاء الخارجي ، يتم نشر رسالة 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 الخاص بي ، باستخدام gmail كخادم SMTP. سيقوم هاتفي بعد ذلك بتنبيهي بالبريد الجديد.

لقد أضفت تدفق Node-RED إلى مقتطف gitlab حتى تتمكن من استيراده إلى تدفقات Node-RED.

بالطبع يمكنك إضافة المزيد من العقد ، على سبيل المثال لتسجيل أحداث صندوق البريد في MariaDb أو SqlLite ، أو إنشاء إنذارات إضافية عندما يقل جهد البطارية عن 2.7 فولت.

صيد بريد سعيد!

*) انظر الصفحة التالية ، أنا أستخدم PushBullet الآن بدلاً من البريد الإلكتروني.

الخطوة 7: ما بعد الأفكار

هناك دائمًا هذا الشعور الذي كان يمكن القيام به بشكل أفضل.

يحول

كنت أفضل استخدام مغناطيس (فائق) وملامس من القصب بدلاً من نهج المكبس الخرقاء إلى حد ما. كان هناك سببان. إحداها ، لم تكن هناك طريقة يمكنني من خلالها إجراء هذا العمل مع إغلاق جهة الاتصال عند فتح الصندوق ، وإغلاقه دائمًا يعني أن تيارًا صغيرًا سيتدفق دائمًا. في الماضي ، لم يكن تدفق أقل من 1uA عبر المقاوم 4M7 مشكلة كبيرة من حيث عمر البطارية. كان الآخر أكثر عملية. لقد أعددت هذا المشروع يوم السبت وكتبت البرنامج ، وقمت ببنائه جميعًا يوم الأحد مما كان موجودًا. أنا ببساطة لم يكن لدي جهة اتصال من القصب في صندوق البريد غير المرغوب فيه.

ملاحظة: كما علق diy_bloke ، تميل ملامسات القصب للالتصاق عند المغناطيس لفترة طويلة ، لذلك ربما لم يكن المكبس فكرة سيئة على الإطلاق. سنرى. *)

رسالة حول التفريغ

يرسل صندوق البريد رسالة عند إفراغه أيضًا. هذه ليست مشكلة كبيرة ولكن مع وجود المزيد من الأشخاص في المنزل الذين يتلقون التحذير ، قد ينتهي الأمر بالمرء في حلقة للتحقق من صندوق البريد متحديًا غرضه بالكامل! هناك عدة طرق للتغلب على ذلك ، مثل التحقق مما إذا كان الغطاء الداخلي مرفوعًا ، وإذا كان الأمر كذلك ، فلا ترسل رسالة. أو بدلاً من استخدام مفتاح الغطاء ، قم بتثبيت جهاز الكشف في الجزء السفلي من صندوق البريد. أو الضغط على زر إعادة الضبط الصغير عند تفريغه. ومع ذلك ، فإن كل ذلك من شأنه أن يعقد الأمور وربما يؤدي إلى تفاقم الموثوقية.

المراسلة

يعد إرسال البريد الإلكتروني طريقة فعالة إلى حد ما ولكنها فجّة لإخماد التحذير. الطريقة الأكثر أناقة هي تطبيق الهاتف ، لكنني لم أجد تطبيق لوحة معلومات Android MQTT يمكن تهيئته لتشغيل تنبيه نظام التشغيل عند تلقي رسالة معينة. إذا كان هناك واحد حولها ، يرجى إضافة التعليقات. **)

*) بعد أكثر من عام في التشغيل ، اتضح أن عصا المصاصة التي استخدمتها ، وهي ورق ملفوف بشكل أساسي ، تميل إلى التقصير تحت الضغط المستمر لزنبرك التبديل. بعد بعض استكشاف الأخطاء وإصلاحها ، قمت باستبدالها بعصا خشبية.

**) أنا أستخدم PushBullet الآن لرسائل الدفع ، منفصلة عن لوحة معلومات MQTT. يمكن العثور هنا على واجهات Node-RED منخفضة منخفضة لواجهة برمجة التطبيقات. تأكد من توفير رمز الوصول في العقدة "Prepare for pushbullet" وعنوان بريدك الإلكتروني للأغراض الاحتياطية في العقدة "Retry".

موصى به: