يمنحك هذا المستودع كل ما تحتاجه بسهولة (إنه مشروع DIY!) بوابة Lora-to-MQTT ذات جودة عالية ، استنادًا إلى وحدات Ebyte Lora و ESP32 وتعمل إما مع Wi-Fi أو Ethernet ، وهي تنفد 5V. هناك نسختان مختلفتان من البوابة ، وتفاصيل عن تلك الإصدارات والتي يجب أن تختار أدناه:
لإعطاء إمكانية Ethernet المجلس ، أنا أستخدم قبعة ESP32 ESP32 Quinled ESP32. بالطبع ، من الطبيعي أن أكون قد استخدمت أيضًا ESP32 Quinled ، لكن كان لدي عدد قليل من DevBoards القياسية الاحتياطية التي تتجول بدون استخدام ، لذلك قمت بتصميم اللوحة حولها. لكن بعد قولي هذا ، قد أقوم يومًا ما بتصميم نسخة تستند تمامًا إلى Quinled-ESP32.
للتبديل بسهولة بين شبكة Wi-Fi و Ethernet ، هناك طائر على السبورة للقيام بذلك. هذا يعمل حتى مع المجلس مدعوم ؛ لا حاجة لخفض الطاقة.
مرة أخرى ، هذا مشروع DIY! لذا ، فأنت بحاجة أولاً ، فأنت بحاجة إلى بعض مهارات اللحام ، وأنا أوصي بشدة إما لوحة ساخنة SMD أو بندقية الهواء الساخن لحام وحدة EBYTE E32. من الصعب جدا لحامه مع مجرد مكواة!
لذا ، فأنت تريد طباعة مركبات ثنائي الفينيل متعدد الكلور في مصنع النموذج الأولي من PCB من اختيارك ، مثل JLCPCB أو PCBway. لقد قمت بتضمين ملفات Gerber لكليهما في مجلد Respectiv. إذا كنت ترغب في استخدام مزود خدمة مختلف ، فأنت بحاجة إلى التحقق مما إذا كان قد يقبلون هؤلاء المهرجين أو إنشاءها بنفسك.
أوصي بشدة أن تطلب هذا ثنائي الفينيل متعدد الكلور مع استنسل ، وإلا فإنك ستواجه صعوبة في وضع العجينة على منصات وحدة Ebyte!
يحتوي كل مجلد PCB على ملف IBOM HTML الذي يمنحك تعليمات / نظرة عامة على لحام لطيف ، والعثور عليه في مجلد ibom في كل مجلد الإصدارات. عندما تقوم بحام اللوحة ، ما عليك سوى توصيله بمصدر طاقة 5 فولت وهناك تذهب! يستهلك أقل من 200 مللي أمبير ، بحيث يمكنك بسهولة استخدام شاحن الهاتف القديم 500MA أو 1A (أو أعلى) لذلك.
المصدر متاح في مجلد src . قم بتنزيل Arduino IDE ، والتحقق من ملف config.h واستبدل العناصر النائبة بإعداداتك ، وتجميعها وتحميلها إلى ESP32. يجب أن يكون ذلك ويجب أن يظهر البوابة في خادم MQTT الخاص بك وإرسال رسائل التحقق الصحية كل 5 ثوان.
يمكن العثور على كيف يمكنك الآن العثور على أجهزة الاستشعار واللوحات التي يتم إرسال رسائل Lora إليها في قسم "الكود / البرامج المصدر" أدناه.
أي واحد يجب أن تختار؟ هذا سهل للغاية ومحدد بعامل واحد:
تحتاج إلى الاختيار بين هؤلاء ، لأن وحدات eByte التي تستخدم الاتصال التسلسلي لا يمكن أن تتواصل مع وحدات RFM95 ، على الرغم من أنها تستخدم نفس رقاقة SMTECH SX1276 LORA. ذلك لأن الوحدات النمطية التي تديرها Ebyte لديها أيضًا عبارة عن Litte MCU على متنها تقوم بالفعل "بأشياء" / بروتوكولها عند إرسال الرسائل عبر Lora. لذلك لا تتحدث مباشرة إلى رقاقة Semtech ، لكن MCU الصغيرة بدلاً من ذلك. قد يحتاج المرء إلى فهم كيفية قيام ذلك بالضبط بقراءة هذه الرسائل باستخدام وحدات Lora التي تستخدم اتصال SPI المباشر إلى شريحة Semtech (مثل وحدة E32 المحددة التي أستخدمها ، أو RFM95) لجعلها تعمل مع بعضها البعض.
يعتمد هذا الإصدار على EBYTE E32-400M20S أو E32-900M20S ، والذي يوفر التواصل التسلسلي المباشر إلى Semtech SX1276. في وقت البحث الأخير (بداية عام 2022) ، هذه هي الوحدة النمطية الوحيدة البايت التي تعمل على ثنائي الفينيل متعدد الكلور ، لذلك لا يمكنك استخدام أي شخص آخر يستخدم التواصل التسلسلي: لن يتناسب مع اللوحة / لديهم pinout مختلف! اختر اليمين لمنطقتك (TL ؛ DR: 400 بالنسبة لنا/آسيا ، 900 لأوروبا).
الوحدة ليست موجودة في ملف BOM CSV ، فأنت بحاجة إلى إيقاف تشغيله:
إذا كنت تعمل عادةً في النظام البيئي Ebyte مع وحداته المسلسل المسببة للتشكيل ، فإن هذا اللوحة مفيدة لك. ومع ذلك ، لم أقم بمنفذ من برامج E32 الخاصة بي لهذا اللوحة. وأنا في الواقع لا أخطط للقيام بذلك ، لأنني شخصياً أستخدم إصدار E32. لكنك مرحبًا بك في المنفذ باستخدام مكتبة Renzo Mischiantis Arduino.
الوحدة ليست موجودة في ملف BOM CSV ، فأنت بحاجة إلى إيقاف تشغيله:
من المفترض أن يكون البرنامج الذي طورته من أجل هذا أمرًا قابلاً للتوسيع بسهولة دون لمس المنطق الفعلي للبوابة نفسها ، ولكن بدلاً من ذلك إضافة جزء صغير من التعليمات البرمجية إلى ملف منفصل.
ألقِ نظرة على lora-ids.h . من المفترض أن يتم مشاركة هذا الملف بين هذه البوابة وجميع أجهزة الاستشعار التي تطورها. يحتوي على قائمة بأنواع الرسائل المختلفة ويمكنك بسهولة إضافة خاصة بك. على سبيل المثال ، يحتوي على نوع "صندوق البريد" الذي يحدد بعض الخصائص التي يرسلها صندوق البريد. هذا يجعل من السهل جدًا قراءة هذه الرسائل ومعالجتها وإنشاء موضوعات في خادم MQTT الخاص بك والتي يمكنك بعد ذلك الاستماع إليها. هناك أيضًا نوع "مخصص" يحتوي على نص مجاني أساسًا وربما يكون جيدًا لتصحيح الأخطاء.
لا تتردد في إضافة الأنواع الخاصة بك في هذا الملف. ستحتاج إلى إضافة شيئين:
#define LORA_MESSAGE_ID_CUSTOM 0x0struct LoRaMessageCustom : LoRaBaseيتم بناء الموضوع الذي تسقط فيه الرسالة خارج معرف البوابة ومعرف الجهاز ومعرف الرسالة. لذلك على سبيل المثال ، نفترض أن:
0xA و mailbox-sensorLORA_MESSAGE_ID_MAILBOX و0x1 واسم lora-gateway-e32 يستقبلها. لذلك دعونا نأخذ أولاً نوع رسالة mailbox كمثال. يحدد هذه الخصائص:
بالإضافة إلى ذلك ، فإنه يحدد اسمه الخاص (ومع ذلك: الوالد لهذه الخصائص):
String getMqttTopicName() { return "mailbox"; }لذلك عندما تتلقى البوابة رسالة من هذا النوع ، ستقرأ الخصائص منه وإسقاطها في هذه الموضوعات:
???/messages/mailbox/duration???/messages/mailbox/distance???/messages/mailbox/humidity???/messages/mailbox/temperature ولكن أين تأتي /messages/ الجزء ما هو ???/ . هذا سهل: يجب أيضًا تسجيل جهاز / مستشعر سهل تطويره في lora-ids.h . في الجزء العلوي ، هناك قائمة بالأجهزة ، لكل منها:
ستقوم البوابة بفرز جميع الرسائل التي تتلقاها بواسطة الجهاز وتبادلها باسم الجهاز ، بالإضافة إلى فرز جميع الرسائل ضمن موضوع messages للسماح للجهاز بأن يكون لها مواضيع أخرى بجوار الرسائل الفعلية. يتيح لك ذلك الاستماع إلى حقول/قيم محددة لأنواع الرسائل المحددة من جهاز معين!
لذلك نحن نعرف الآن هذا:
???/mailbox-sensor/messages/mailbox/duration???/mailbox-sensor/messages/mailbox/distance???/mailbox-sensor/messages/mailbox/humidity???/mailbox-sensor/messages/mailbox/temperatureآخر قطعة مفقودة هي البوابة التي تتلقى الرسائل. يتم تعريفه أيضًا كجهاز ، لذلك يحتوي أيضًا على اسم ، بحيث يمكننا بسهولة إنشاء اسم الموضوع الكامل لمثالنا:
lora-gateway-e32/devices/mailbox-sensor/messages/mailbox/durationlora-gateway-e32/devices/mailbox-sensor/messages/mailbox/distancelora-gateway-e32/devices/mailbox-sensor/messages/mailbox/humiditylora-gateway-e32/devices/mailbox-sensor/messages/mailbox/temperatureالآن يمكنك بسهولة:
LORA_DEVICE_IDS مع معرف واسم ألقِ نظرة على وظيفة sendLoRaMessage : bool sendLoRaMessage(byte messageID, LoRaBase *loRaMessage, byte recipientId = 0, byte senderId = 0) يتوقع منا أن نعطيه:
يمكننا أيضًا تحديد:
LORA_GATEWAY_IDLORA_DEVICE_ID ، إن لم يتم تحديده لذا في الكود الخاص بك ، ما عليك سوى إنشاء مثيل لمعرف الرسالة الذي تريد إرساله ونقله إلى sendLoRaMessage .
LoRaMessageMailbox *loRaMessage = new LoRaMessageMailbox;
loRaMessage->duration = duration;
loRaMessage->distance = distance;
loRaMessage->humidity = humidity;
loRaMessage->temperature = temperature;
sendLoRaMessage(LORA_MESSAGE_ID_MAILBOX, loRaMessage);
وهذا كل شيء :)
لهذا نلقي نظرة على كيفية بناء الرسالة الفعلية التي يتم إرسالها عبر لورا. يتم سرقة الفكرة الأساسية من مكتبة Arduino-Lora ، التي تستخدم بايت منفردة لتحديد المرسلين ، والمستقبلات ، إلخ.
النظر إلى رسالة واحدة:
| . لذا فإن أخذ مثال رسالة mailbox من الأعلى ، يمكن أن تبدو قيمة الرسالة مثل هذا: 12345|3.56|44.55|27.4