قم بإرسال إطارات LoRa بتردد 900 ميجا هرتز بعيدًا بشكل مدهش بدون راديو (وغيرها من خدع الراديو التي تستخدم ADCs وPWMs وحافلات I2S/SPI) بما في ذلك إرسال بيانات RF أخرى، بالإضافة إلى استقبال إشارات RF (على الرغم من أنه ليس جهاز استقبال LoRa).
إذا كنت تبحث عن حديث إذاعي عن Hackaday 2024 حول المتحكمات الدقيقة، فيمكنك النقر هنا.
إذا كنت تبحث عن سلع LoLRa (مثل القمصان وغيرها)، فانقر هنا.
ملحوظة
حذر
نظرًا لأننا نعتمد على التوافقيات والتعرجات، فإن مكونات التردد الأساسية المنبعثة من وحدة التحكم الدقيقة الخاصة بك ستكون في أجزاء من طيف التردد اللاسلكي حيث يتم حظر إرسال الترددات اللاسلكية. يرجى تصفية مخرجاتك أو إجراء اختباراتك في منطقة من غير المرجح أن يحدث فيها تسرب كبير للترددات اللاسلكية. يبلغ إجمالي مخرجات EIRP بشكل عام ≪300uW عبر الطيف بأكمله المنتشر على مئات من ترددات الانبعاث، ولكن لا توجد طريقة تقريبًا يمكن لجهاز يرسل عن عمد على هذه الترددات أن يجتاز الامتثال للجزء 15 من لجنة الاتصالات الفيدرالية، حتى مع التصفية.
لقد كنت دائمًا مفتونًا بإرسال واستقبال إشارات الراديو من وحدات التحكم الدقيقة التي لا تحتوي على أجهزة راديو مخصصة. يعد هذا الريبو بمثابة نظرة عامة على العديد من المشاريع التي قمت بها للقيام بفك التشفير هذا، بالإضافة إلى رمز المثال (على الرغم من أن بعضها مرخص بشكل مقيد)
بشكل عام، يتم تقسيم الريبو إلى العديد من المشاريع، ولكن يتم تصنيفها حسب نوع الجهاز.
نقل LoRa للبرامج الثابتة فقط، لمجموعة متنوعة من المعالجات. أرسل حزم LoRa، بدون أي راديو أو شرائح أو أجهزة خارجية أو أجهزة راديو مدمجة على الإطلاق عبر مجموعة متنوعة من المعالجات الشائعة وغير المكلفة. على الرغم من أنه ليس ضجيجًا حقيقيًا، إلا أن هذا المستودع يوضح كيفية استخدام سجل التحول (أي منفذ I2S أو SPI) أو APLL، حيث يمكنك إرسال حزم LoRa التي يمكن فك تشفيرها عن طريق بوابات LoRa التجارية الجاهزة والرقائق الأخرى.
هناك وضعان رئيسيان يعمل معهما هذا المستودع.
انقر أدناه للحصول على نسخة فيديو يوتيوب من هذه الصفحة:
في أي وقت تتغير فيه الإشارة من حالة منخفضة إلى عالية أو من عالية إلى منخفضة، يتم إنشاء اضطراب في المجالات الكهرومغناطيسية المحيطة بهذا السلك. في أي وقت. الفرق هو، هل أنت، كمهندس، ستخاف منه، وتسحقه، وتخاف من أي تداخل كهربائي قد يسببه، أم أنك ستمسك الثور من قرنيه وتطلق بعض الإشارات المصنوعة يدويًا؟ المبادئ الرئيسية التي ستحتاج إلى فهمها هي:
المبدأ الثاني هو خلط الإشارات. إذا قمت بإنشاء إشارة، ثم "مزجتها" بتردد عالٍ، فستحصل على "صورة" ملفوفة حول هذا التردد العالي. يمكن إجراء الخلط باستخدام الثنائيات، أو معدات الترددات اللاسلكية الخاصة، أو حتى مجرد أخذ العينات، مثل ذلك الذي يتم باستخدام مسجل التحول، وإخراج البتات بمعدل ثابت.
والآن يحدث السحر الحقيقي، عندما تدرك أن هذين المبدأين يعملان معًا بالفعل. تحصل على صورة في النطاق الأساسي، صورة منعكسة حول تردد أخذ العينات، ثم حوالي ×3 تردد أخذ العينات، وتحصل على صورتين أخريين، للأمام والخلف. و×5 و×7 وهكذا.
باستخدام هذا، وبساعة دقيقة بدرجة كافية، يمكننا توليد أي تردد نرغب فيه بشكل عشوائي، بشرط أن يكون هناك ما يكفي من النطاق الترددي المتبقي على GPIO الخاص بالميكرو الخاص بنا لتوليده، حتى لو كانت الإشارة "الفعلية" التي نولدها أقل بكثير في التردد .
المذبذبات الداخلية في وحدات التحكم الدقيقة ليست غير دقيقة فحسب، بل إنها أيضًا غير منتظمة في التردد. قد تعتقد أن هذا أمر سلبي، ولكن في الواقع، فإن استخدام المذبذب الداخلي المدمج في الميكرويف يمكن أن يكون في كثير من الأحيان منقذًا للحياة، مما يجعلك تتجاوز EMI/EMC. نظرًا لأن المذبذبات الداخلية ليست فقط غير دقيقة ولكنها متوترة، فإنها تمنع توافقيات الترددات الفردية الأعلى في الطيف لأن معدل الساعة ينجرف بشدة.
إخراج الكريستال:
إخراج RC:
راجع القسم أدناه للتعرف على التفاصيل الجوهرية لكيفية عمل إشارات LoRa فعليًا أو الأشياء التي لم يكن أي من حاملي الدكتوراه الآخرين على الإنترنت على استعداد لإخبارك عنها.
تعمل LoRa عادةً في نطاق 433 ميجا هرتز أو 900 ميجا هرتز، وعادةً مع قنوات 125 كيلو هرتز. من حيث المبدأ، تقوم LoRa بإنشاء زقزقة، بدءًا من تردد واحد، 62.5 كيلو هرتز أسفل مركز القناة، ثم خلال فترة زمنية قصيرة (1.024uS عند SF7) تزحف النغمة حتى 62.5 كيلو هرتز فوق مركز القناة.
بينما يمكن استخدام LoRa مع العديد من عروض القنوات المختلفة، فإن كلا من 125 كيلو هرتز و500 كيلو هرتز مدعومان جيدًا، في حين أن عروض القنوات الأخرى غير قابلة للتكوين باستخدام أجهزة التوجيه مثل LR9.
يوضح هذا الرسم البياني التردد على المحور X، والوقت على المحور Y (من الأعلى إلى الأسفل)... يمكنك أن ترى:
من الملائم أن تكون نافذة غرد معينة مستقرة اعتمادًا على عامل الانتشار. بالنسبة للحزمة المذكورة أعلاه، مع SF7، تصل إلى 1,024us لكل رمز، أو بالنسبة إلى SF8، 2,048us لكل رمز. يمكن أن يمثل كل رمز/تغريدة عددًا من البتات، عن طريق إزاحة الطور.
يتم ترميز "المرحلة" الأولية للتغريد باللون الرمادي من أجل توزيع خطأ البت بشكل أفضل بين البتات إلى الطبقات العليا من العملية. على سبيل المثال، إذا كنت متخلفًا عن المرحلة التي تعتقد أن التغريدة موجودة فيها، فمن الممكن أن تتجاوز الحدود من 0b1111 و0b10000 على سبيل المثال، وقد تتسبب في حدوث أخطاء بمقدار 5 بت. ومن خلال ترميزه باللون الرمادي، فإنه يقلل من أخطاء البت التي تنشأ عن مرحلة واحدة أو حتى عدد قليل من الطور.
بعد فك تشفير تدفق البتات الخام هذا من التغريدات الفردية وإلغاء تشفيره باللون الرمادي (انظر encodeHamming84sx
) في LoRa-SDR-Code.h
، فإننا نقوم بتبديل/تداخل البتات بحيث يمكن إزالة أي رمز واحد (انظر diagonalInterleaveSx
) إلى نشر أي أخطاء حتى يمكن استرداد رمز واحد مفقود وتبييضه (أعتقد أن هذه في الواقع خطوة لا قيمة لها في هذا البروتوكول، صححني إذا كنت مخطئًا) راجع Sx1272ComputeWhitening
. توجد فوق طبقة التبييض طبقة تصحيح الأخطاء للمساعدة في إصلاح أي من أخطاء البت التي قد تحدث في الطبقة السفلية (انظر encodeFec
).
بشكل عام، تحتوي الرسائل على رأس وحمولة. لاحظ أن هذا قد يكون صعبًا بعض الشيء، لأن الرأس يستخدم أحيانًا إعدادات ترميز مختلفة عن الحمولة. وهذا كل شيء.
بمجرد إنشاء حزم منسقة بشكل صحيح، يمكنك تشفيرها في زقزقة وإرسالها عبر السلك.
يمكن العثور على عرض أكثر تفصيلاً للبروتوكول هنا، للحصول على رؤية أكاديمية أكثر وهنا للحصول على بعض الأمثلة الأفضل (على الرغم من أنني وجدت بعض المشكلات المتعلقة بصحة/وضوح كلتا الوثيقتين).
لقد بدأت المشروع باستخدام ESP32-S2 لمعرفة ما إذا كان بإمكاني إخراج إشارة باستخدام APLL الداخلي المدمج، وتوجيه ساعة APLL/2 للخارج عبر IOMUX، وكان الجواب هو أنني أستطيع ذلك. نظرًا لأن هذا يولد موجة مربعة بسيطة، والموجات المربعة لها توافقيات عند F×3، F×5، F×7، وما إلى ذلك... أعلى الطيف، إذا قمت بتعيين APLL على 139.06 ميجاهرتز، فإنه يخرج 69.53 ميجاهرتز. التوافقي الثالث عشر هو 903.9 ميجا هرتز، أو قناة LoRa الأولى 125 كيلو هرتز. ثم عن طريق ضبط بتات التحكم PLL الأقل أهمية، يمكننا ضبطها من 903.9 ميجا هرتز - 62.5 كيلو هرتز إلى 903.9 + 62.5 كيلو هرتز، عن طريق ضبط APLL على 139.06 ميجا هرتز - 9.62 كيلو هرتز إلى 139.06 ميجا هرتز + 9.62 كيلو هرتز. يتيح لنا هذا إنشاء زقزقة LoRa المميزة وهذا أمر مقبول بالفعل!
لدى ESP32-S2 أيضًا خدعة أخرى - GPIO mux قادر على إخراج إشارة أو عكس تلك الإشارة. وبهذه الطريقة يمكننا إنشاء إشارة 139.06 ميجاهرتز بشكل تفاضلي، مما يعزز خرج الطاقة بمقدار 3 ديسيبل!
ومع ذلك، هناك مشكلات مع ESP32-S2. ومن الجدير بالذكر أن:
بالإضافة إلى ذلك، عدد قليل جدًا من المعالجات لديها APLL، لذلك على الرغم من هذا النجاح السريع، قررت الانتقال إلى...
منذ عدة سنوات، قمت بتنفيذ عدد من المشاريع التي تستخدم التوليف المباشر لتدفق البتات للقيام ببعض الأشياء، مثل بث تلفزيون RF Color NTSC على القناة 3 باستخدام ESP8266 أو استخدام حزم Ethernet لإرسال راديو AM. إحدى الحيل الرائعة هي أنك إذا قمت بإرسال تدفق البتات إلى سجل إزاحة SPI أو I2S، فإن ذلك يؤدي إلى التعرج عند معدل العينة، مع الصور عند F×3، F×5، F×7، وما إلى ذلك. الجزء هو أنه يحافظ على حجم/شكل الشكل الموجي المرسل في الصور/الأسماء المستعارة أعلى الطيف. بالنسبة للقناة 3، تم إعادة إشارة الإشارة 65 ميجا هرتز حول معدل أخذ العينات 40 ميجا هرتز. يمكن لهاري نيكويست أن يعض ليمونة.
توفر هذه التقنية قدرًا لا يصدق من الدقة حتى في المواقف السيئة للغاية، وهذا أمر غير بديهي. يمكنك إنشاء إشارات دقيقة بشكل مدهش خارج أي مكان تتوقعه.
هناك عدة طرق لتحقيق ذلك، ولكن عادةً ما يكون الأمر الأسهل باستخدام سجل التحول. سجل التحول مثل ذلك الموجود في ناقل I2S أو SPI. وإذا كنت تستخدم DMA، فيمكنك بسهولة تغذية سجل التحول بمزيد من البيانات دون تنشيط وحدة المعالجة المركزية في كل دورة. ومع ذلك، هناك طرق أخرى، مثل تبديل الإدخال/الإخراج مباشرةً، أو استخدام مؤقت لتشغيل الإدخال/الإخراج وإيقافه في الوقت المناسب، ولكن من الأسهل كتابة تعليمات برمجية لإنشاء تدفق بتات وتحويله للخارج.
بالنسبة لسجلات الإزاحة، يجب أخذ بعض الاعتبارات، مثل التأكد من صحة عرض النهاية وترتيبات الذاكرة، ولكن بشكل عام، يمكنك المتابعة، وما لم يكن هناك تأخير، مثل الوقت بين كل كلمة، فإنها عادةً ما تكون قادرة على تمثيل نمط بت على الإخراج ليتم نقله وإزاحته من الدبوس بأمانة كافية.
تتضمن عملية "lohrcut" الموصوفة في الفيديو كتابة دالة تحدد سعة الإشارة في نقطة زمنية معينة. يمكن أن تكون هذه الوظيفة هي تحديد سعة إشارة التردد العالي جدًا، ومن ثم، يمكن أن يكون معدل العينة هو أي معدل عينة يمكن تحقيقه فعليًا ومتوفر. سيؤدي هذا إلى إنشاء صورة للإشارة عالية التردد عند إشارة تردد أقل بكثير، مما يؤدي إلى خروجها من الطاقة بين 0 وFs/2.
مصدر قلق آخر هو الفلاش، حيث يتم الوصول إليه بشكل غير متسق في بعض الأنظمة أو لا يعمل بشكل جيد عند ترددات معينة. في تلك الحالات، كما هو الحال في ESP8266، يجب قراءة الجداول في ذاكرة الوصول العشوائي (RAM) وتشغيلها من هناك.
إطارات LoRa مغلفة بالكامل. إذا أردت، يمكننا أن نتوقف هنا. يمكنك حتى استخدام بوابة تجارية، ولكن بدون استخدام LoRaWAN، لا يمكن إرسال الإطارات إلى وسطاء مثل The Things Network. على سبيل المثال، إذا قمت بتشغيل بوابة Raspberry pi، فيمكنك فقط قبول أي إطارات LoRa قديمة تريدها، ولكننا اتخذنا هذه خطوة إلى الأمام من خلال مساعدة الحزم على إعادة توجيهها حول العالم. LoRaWAN هو تشفير "من طرف إلى طرف"، حيث لا يستطيع أي من جيرانك أو البوابات قراءة الرسائل. رغم ذلك، فمن الغريب أن شبكة الأشياء يمكنها قراءة رسائلك لأنها تحتوي على مفاتيح التشفير.
من السهل عليك الاتصال GenerateLoRaWANPacket
في lib/lorawan_simple.h
الذي يتعامل مع كافة عمليات التغليف المطلوبة. ما عليك سوى استخدام هذه الوظيفة لإنشاء الإطارات الخاصة بك وبثها!
يمكننا نقل هذه الرسائل. رائع. ولكن الآن لاستقبالها، سنحتاج إما إلى أجهزة مثل LILYGO® T-Beam Meshtastic أو بوابة مثل MikroTik LR9. هذا الأخير مثير للاهتمام حقًا هنا لأنه يوجد الآلاف منها في جميع أنحاء العالم، ومتصلة بشبكة الأشياء. وهذا يعني أنه إذا قمنا بإرسال حزمة LoRaWAN منسقة بشكل صحيح على مرمى إحدى تلك البوابات، فيمكننا الحصول على الإطار في مكان آخر على الكوكب!
الإعداد رائع جدًا. أنت بحاجة إلى:
ملحوظة
نحن نركز فقط على إطارات LoRa التي تعيد ضبط عدادات الإطارات، ومع ذلك، إذا كان بإمكانك تخزين آخر معرف حزمة مرسلة على فلاش غير متطاير داخل الجزء الخاص بك، فيمكنك تجنب هذه الخطوة. وبدون ذلك، سيكون جهازك عرضة لهجمات إعادة التشغيل.
ملحوظة
إذا كنت تستخدم MikroTik LR9، فتأكد من فتحه فعليًا وتوصيل الهوائي الداخلي. ومن المصنع يتم شحنها موصلة بالمنفذ الخارجي.
العلاقات العامة مفتوحة إذا كان بإمكانك معرفة أي منها! لقد أمضيت للتو كل الوقت الذي أخطط لقضائه في هذا المشروع قبل وصولي إلى هنا.
بالنسبة إلى LoRa على وجه التحديد، تتصرف الموجات بشكل جيد للغاية ويجب أن تكون قابلة للإنشاء بالكامل باستخدام دوائر المؤقت بسرعة ولا تحتاج إلى أي حساب مسبق، لكنني لم أتمكن من ذلك بعد. وهذا من شأنه أن يغني عن الحاجة إلى وجود طاولة كبيرة للتغريدات التي تومض في الجهاز.
أريد أيضًا أن أحاول تنفيذ هذا المشروع باستخدام أنماط البت المخصصة التي يتم إنشاؤها بسهولة أكبر أثناء التنقل. أيضًا، اعتمادًا على الرموز الدقيقة المستخدمة (ربما من خلال استخدام التقنيات المتعلقة بالرموز الذهبية)، يمكن للمرء أيضًا أن يجعل استقبال العديد من الإشارات بنفس التشفير ممكنًا في وقت واحد. إن القيام بذلك سيجعل من المناسب تمامًا تنفيذ "printf" على وحدات التحكم الدقيقة التي يمكن استقبالها لاسلكيًا بواسطة وحدة حقوق السحب الخاصة المركزية مع مساحة منخفضة جدًا للمعالج (والأداء).
بالإضافة إلى ذلك، سيكون من الممتع إضافة مرشح، أو ربما محاولة بناء مرشح في PCB بدون مكونات.
بالإضافة إلى ذلك، سيكون من الرائع جدًا محاولة إنشاء مضخم صوت من الفئة C لإشارة 900 ميجاهرتز. سيكون هذا رائعًا جدًا لأنه يمكن أن يكون فعالاً ورخيصًا وبسيطًا بشكل لا يصدق ويوفر أيضًا ما يصل إلى 10-20 ديسيبل من المكاسب!
تم إجراء الاختبار الحضري بتاريخ 23-02-2024، والضواحي بتاريخ 26-02-2022، وتم إجراء الاختبار الريفي بتاريخ 27-02-2022.
النطاقات هي نطاقات الذروة. تنتهي العملية الموثوقة قبل ذلك بكثير.
بالنسبة إلى TTGO Lora32، تمت إضافة هوائي +3dBi. بالنسبة لـ MikroTik LR9، استخدم الهوائي الداخلي.
تاريخ | مرسل | المتلقي | سادس/كر | الأسلحة البيولوجية | ملحوظة | يتراوح | متوسط نهاية RSSI/SNR | أساس |
---|---|---|---|---|---|---|---|---|
2024-02-23 | CH32V203 | ميكروتيك LR9 | SF8/CR48 | 125 | وسط مدينة بلفيو (حضري) | 435 '132 م | -98 / -9 | أرضي |
2024-02-23 | CH32V203 | ميكروتيك LR9 | SF10/CR48 | 500 | وسط مدينة بلفيو (حضري) | 435 '132 م | -90 / -18 | أرضي |
2024-02-26 | CH32V203 | تي تي جو لورا32 | SF8/CR48 | 125 | متنزه ميرامونت (الضواحي الخفيفة + الغابة) | >576' >176 م | -134 / -12 | أرضي |
2024-02-26 | CH32V203 | تي تي جو لورا32 | SF8/CR48 | 125 | رأس مسار بو بو بوينت (الريفي) | >1117' >340 م | -123 / -6 | أرضي |
2024-02-26 | CH32V203 | تي تي جو لورا32 | SF8/CR48 | 125 | ضاحية إسحاق (+أشجار خفيفة) | 2200 '669 م | -133 / -10 | أرضي |
2024-02-27 | CH32V203 | تي تي جو لورا32 | SF8/CR48 | 125 | ميدوبروك (ريفي) هوائي أحمر أطول | 2220 '677 م | -135 / -13 | بدون طيار |
2024-02-27 | CH32V203 | تي تي جو لورا32 | SF10/CR48 | 500 | ميدوبروك (ريفي) هوائي أحمر أطول | 1752 '534 م | -132 / -16 | بدون طيار |
2024-02-27 | CH32V203 | تي تي جو لورا32 | SF8/CR48 | 125 | ميدوبروك (ريفي) OVERVOLT 5V هوائي أحمر أطول | 3996 '1218 م | -131 / -12 | بدون طيار |
2024-02-27 | CH32V203 | تي تي جو لورا32 | SF8/CR48 | 125 | Meadowbrook (الريفية) هوائي VNA متطابق باللون الرمادي | 2719 '829 م | -131 / -11 | بدون طيار |
2024-02-27 | ESP8266 @ 80 ميجا هرتز | تي تي جو لورا32 | SF8/CR48 | 125 | Meadowbrook (الريفية) هوائي VNA متطابق باللون الرمادي | 2789 '850 م | -138 / -13 | بدون طيار |
2024-02-27 | ESP8266 @ 173 ميجا هرتز | تي تي جو لورا32 | SF7/CR48 | 125 | Meadowbrook (الريفية) هوائي VNA متطابق باللون الرمادي | 2812 '857 م | -131 / -8 | بدون طيار |
2024-02-27 | ESP32-S2 + بيتينا | تي تي جو لورا32 | SF10/CR48 | 125 | ميدوبروك (ريفي) (الملاحظة 1) | 3428 '1044 م | -137 / -13 | أرضي |
2024-02-27 | ESP32-S2 + بيتينا | تي تي جو لورا32 | SF10/CR48 | 125 | ميدوبروك (الريفية) هطول الأمطار الخفيفة | >4895' >1492 م | -130 / -8 | بدون طيار |
2024-02-27 | ESP32-S2 + فونتينا | تي تي جو لورا32 | SF10/CR48 | 125 | جدول المرج (الريفي) هطول خفيف | 705 قدمًا / 215 مترًا | -139 / -15 | بدون طيار |
2024-02-27 | ESP32-S2 + بيتينا | تي تي جو لورا32 | SF10/CR48 | 125 | مسار Snoqualmie، من Dog Park إلى Ribary Creek (الريفي) هطول الأمطار الخفيفة | 8460 قدم / 2580 م | -141 / -16 | بدون طيار |