ESP-NOW
أربعة أوامر للتواصل عبر ESP-NOW خارج الشبكة — بلا راوتر، وبلا ارتباط WiFi. المدى: 200 متر فأكثر برؤية مباشرة عند 1 Mbps.
espchat / ec — دردشة مشفّرة خارج الشبكة
CMD> ec # دردشة تفاعلية، بثّ عامّ على القناة 1
CMD> ec bg # وضع مُستمِع في الخلفية
الأوضاع
| الوضع | الوصف |
|---|---|
| عامّ | بثّ على القناة 1 (افتراضي). أي ESP32/ESP8266 بـ ESP-NOW على القناة نفسها يستقبل/يرسل. |
| خاصّ | أُحادي مشفّر بـ AES-128 (ESP-NOW CCMP). يُشتقّ LMK عبر SHA-256(PIN + MACs مرتّبة). |
مسار الاقتران (الوضع الخاصّ)
- يفتح البادئ نافذة الاقتران — يُعرَض PIN من 4 أرقام.
- يُدخِل المستقبِل نفس PIN.
- رحلة ذهاب وإياب مشفّرة من 3 محاولات تتحقّق من PIN (
* pair ok/* pin ack). - PIN خاطئ: يُسقِط عتاد ESP-NOW الإطار — بلا تأكيد مُرسَل.
يظهر شريط طلب اقتران (كهرماني) عند استقبال طلب اقتران وارد.
المفاتيح
| المفتاح | الإجراء |
|---|---|
[+] / [-] | تغيير القناة (يومض أصفر) |
| كرة التتبّع أعلى/أسفل | تمرير سجلّ الرسائل |
| نقر كرة التتبّع | إجراء الاقتران |
| ضغط كرة التتبّع 1.5 ثانية | الخروج |
الإشعارات
| الحدث | الصوت |
|---|---|
| رسالة عامّة | PING (نغمة قصيرة) |
| رسالة خاصّة / جهة معروفة | INFO |
| طلب اقتران | WARNING (نغمة مزدوجة) |
وضع الخلفية
يُنصِت ec bg سلبيًّا دون شغل الشاشة. يظهر شريط منبثق وتُعزَف PING على الرسائل العامّة الجديدة؛ وINFO على جهة خاصّة.
الملفّات
| المسار | المحتوى |
|---|---|
/apps/espchat/contacts.csv | جهات محفوظة (MAC، الاسم، LMK). في الذاكرة فقط بلا SD — تُمسَح عند إعادة التشغيل. |
/apps/espchat/pub/chN.log | سجلّ رسائل القناة العامّة N |
/apps/espchat/prv/<MAC>.log | سجلّ المحادثة الخاصّة لكل نظير |
espsniff / es — مترصّد أُطُر ESP-NOW سلبي
CMD> es # ترصّد على القناة 1
CMD> es 6 # ترصّد على القناة 6
التقاط مختلط سلبي لأُطُر إجراءات ESP-NOW. لا يُرسِل.
المفاتيح
| المفتاح | الإجراء |
|---|---|
[c] | الانتقال للقناة التالية / تثبيت القناة |
[+] / [-] | تغيير القناة |
[j] / [k] أو كرة التتبّع | تحريك تحديد الصفّ |
[Enter] | عرض تفاصيل الإطار |
[a] / [l] | تصفّح |
[s] | حفظ الالتقاط الحالي إلى SD |
[f] | تصفية الأُطُر |
[x] | مسح قائمة الأُطُر |
[q] | الخروج |
الملفّات
| المسار | المحتوى |
|---|---|
/apps/espsniff/NNN.csv | سجلّ أُطُر مفكوكة (مُرقَّم، لا يُستبدَل) |
/apps/espsniff/NNN.pcap | التقاط PCAP خام (نفس رقم الجلسة) |
esptest / est — تشخيص إرسال/استقبال ESP-NOW
CMD> est # اختبار بثّ على القناة 1
CMD> est 6 # اختبار بثّ على القناة 6
يبثّ إطار اختبار كل ثانيتين ويسجّل كل أُطُر ESP-NOW المستقبَلة. استخدمه للتحقّق من المدى والقناة وتوافق النظراء.
espvoice / ev — جهاز لاسلكي ESP-NOW (صوت HD)
CMD> ev # لاسلكي على القناة 1
CMD> ev 6 # لاسلكي على القناة 6
صوت نصف-مزدوج بالضغط-للتحدّث عبر ESP-NOW. بلا راوتر، بلا اقتران — كل T-Deck على القناة نفسها يسمع كل إرسال (بثّ). يتطلّب ميكروفون ES7210 (موجود على كلا الجهازين).
المرمّز (Codec)
ITU-T G.722 واسع النطاق — 16 kHz / 64 kbps (الوضع 1)، عبر libg722 المضمّنة (ملكية عامّة). إطار 20 مِلّي ثانية = 320 عيّنة PCM ← 160 بايت ← حزمة ESP-NOW واحدة. صوت حقيقي بعرض نطاق 7 kHz (صوت HD) في ميزانية الحزمة نفسها لـ G.711 ضيّق النطاق — ضعف الدقّة. وG.722 عديم الحالة عبر الفقد، فالإطار المفقود مجرّد فجوة 25 مِلّي ثانية بلا انحراف.
الضغط-للتحدّث تبديل
لوحة I2C في T-Deck لا تُبلِّغ عن رفع المفتاح، فالضغط-المستمرّ للتحدّث مستحيل. اضغط SPACE لبدء الإرسال؛ واضغطها ثانيةً للعودة للاستماع.
إشارات اللاسلكي
- شاشة المتحدّث تعرض شريط
TRANSMITTINGأحمر. - شاشة المستمع تعرض
>> RECEIVING <mac>أثناء وصول الصوت. - عند الترك، يبثّ المتحدّث علامة نهاية الإرسال (EOT) (×3 — ESP-NOW فاقد). ويعزف الطرفان نغمة Roger. وإن فُقدت كل حزم EOT، ينهي المستمع الإرسال بعد 500 مِلّي ثانية صمت.
تحكّم الصوت (محلّي — لا يمسّ vol العام)
| التحكّم | المفاتيح | المدى | ملاحظات |
|---|---|---|---|
| صوت الاستقبال | [+] / [-] | 0–150 % | 100 % = مستوى مفكوك كامل نظيف؛ >100 % يعزّز (يصير أصفر). محدود بـ 150 %. |
| كسب ميكروفون الإرسال | [o] / [p] | 0–37.5 dB | كسب ES7210، مطبَّق حيًّا. الطريقة النظيفة لتكون أعلى على الطرف البعيد. راقب شريط الميكروفون: إن ثبّت أحمر على الكلام العادي، تراجع خطوة. |
كلاهما يُصفَّر للافتراضي (الصوت 100 %، الكسب 30 dB) كل تشغيل.
ملاحظات
- نصف-مزدوج: أثناء الإرسال لا تسمع الصوت الوارد (متوقّع للاسلكي).
- الميكروفون (I2S1) والمكبّر (I2S0) طرفيّان منفصلان ويبقيان مُثبَّتين طوال الجلسة.
- بلا استخدام SD — بلا مخاوف GDMA.
التوافقية — صيغة سلك القناة العامّة
أي جهاز ESP32 أو ESP8266 بـ ESP-NOW على القناة نفسها ينضمّ للدردشة العامّة بإرسال إطار ثنائي 114 بايت:
type(1) + seq(1) + name[12] + text[100]
type=0x01(دردشة عامّة)seq= رقم تسلسل متزايدname= اسم المُرسِل مُبطَّن بأصفار (12 بايت)text= نصّ الرسالة مُبطَّن بأصفار (100 بايت)- MAC الوجهة:
FF:FF:FF:FF:FF:FF(بثّ)
تتطلّب الدردشة الخاصّة اشتقاق LMK بـ SHA-256، وليست متوافقة مع أجهزة الغير التي لا تنفّذ الاشتقاق نفسه.
قناة الصوت (ev) تستخدم إطارًا منفصلًا على MAC البثّ نفسه:
type(1) + kind(1) + seq(1) + g722[160]
type=0x02(صوت)kind=0x00إطار صوت ·0x01علامة نهاية الإرسال (Roger)g722= 160 بايت = إطار G.722 واحد 20 مِلّي ثانية. يُتجاهَل لـ EOT.
أي جهاز ينفّذ G.722 الوضع 1 عند 16 kHz على type 0x02 يتوافق.
ملاحظات
- الأوامر الأربعة تعمل على نطاق 2.4 GHz ISM. ويجب تطابق القناة على كل النظراء.
- يتقاسم BLE و WiFi هوائيًّا واحدًا — أوقِف أي أمر BLE قبل أوامر ESP-NOW.
- كتابات SD في
esتتبع قاعدة GDMA: يُوقَف الوضع المختلط وجيزًا لكل تفريغ. - جهات
ecالمحفوظة إلى SD تبقى بعد إعادة التشغيل؛ وبلا SD تكون للجلسة فقط.