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

ESP32 Xiaomi Hack - احصل على البيانات لاسلكيًا: 6 خطوات (بالصور)
ESP32 Xiaomi Hack - احصل على البيانات لاسلكيًا: 6 خطوات (بالصور)

فيديو: ESP32 Xiaomi Hack - احصل على البيانات لاسلكيًا: 6 خطوات (بالصور)

فيديو: ESP32 Xiaomi Hack - احصل على البيانات لاسلكيًا: 6 خطوات (بالصور)
فيديو: Introduction to Heltec LoRa CubeCell Development Board HTCC-AB01 2024, شهر نوفمبر
Anonim
Image
Image
ESP32 Xiaomi Hack - احصل على البيانات لاسلكيًا
ESP32 Xiaomi Hack - احصل على البيانات لاسلكيًا

أصدقائي الأعزاء مرحبًا بكم في Instructable آخر! سنتعلم اليوم كيفية الحصول على البيانات التي يرسلها جهاز مراقبة درجة الحرارة والرطوبة Xiaomi باستخدام وظيفة Bluetooth في لوحة ESP32.

كما ترى ، أنا أستخدم لوحة ESP32 وشاشة ملونة TFT مقاس 2.8 بوصة. على الشاشة ، نعرض درجة الحرارة والرطوبة. الشيء الرائع هو أنني لم أقم بتوصيل أي مستشعرات بلوحة ESP32. أحصل على درجة الحرارة والرطوبة لاسلكيًا من جهاز مراقبة درجة الحرارة والرطوبة التجاري Xiaomi. كم ذلك رائع! يتم تحديث الشاشة على جهاز Xiaomi كل ثانية ولكني أقوم بتحديث الشاشة المتصلة بلوحة ESP32 كل 10 ثوانٍ للحفاظ على الطاقة على جهاز Xiaomi.

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

الخطوة 1: احصل على جميع الأجزاء

احصل على جميع الأجزاء
احصل على جميع الأجزاء

دعونا نرى الآن كيفية بناء هذا المشروع. نحتاج إلى لوحة ESP32 وشاشة ILI9341 مقاس 2.8 بوصة ومستشعر درجة الحرارة والرطوبة من Xiaomi ولوح تجارب وبعض الأسلاك.

فيما يلي بعض الروابط للأجزاء التي سأستخدمها في Instructable.

  • ESP32 ▶
  • 2.8 "عرض ▶
  • مستشعر Xiaomi ▶
  • اللوح ▶
  • الأسلاك ▶
  • مقياس USB ▶
  • بنك الطاقة ▶

الخطوة 2: لوحة ESP32

Image
Image
مجلس ESP32
مجلس ESP32

إذا لم تكن معتادًا على ذلك ، فإن شريحة ESP32 هي خليفة شريحة ESP8266 الشهيرة التي استخدمناها عدة مرات في الماضي. ESP32 وحش! يوفر 32 نواة معالجة تعمل بسرعة 160 ميجاهرتز وكمية هائلة من الذاكرة وواي فاي وبلوتوث والعديد من الميزات الأخرى بتكلفة حوالي 7 دولارات! الاشياء المدهشة!

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

الخطوة 3: شاشة TFT مقاس 2.8 بوصة لـ Arduino و ESP32

Image
Image
2.8
2.8
2.8
2.8
2.8
2.8

الشاشة كبيرة ، وتوفر دقة 320 × 240 بكسل. مقارنة بأحد الشاشات المفضلة لدي ، شاشة TFT ملونة مقاس 1.8 بوصة يمكنك رؤيتها أكبر بكثير. توفر الشاشة أيضًا وظيفة اللمس وهي ميزة إضافية وفتحة بطاقة SD في الخلف. يستخدم واجهة SPI ، لذا فإن الاتصال بلوحة Arduino أو ESP32 سهل للغاية. تكلفة العرض منخفضة نسبيًا ؛ يكلف حوالي 11 دولارًا وهو في رأيي سعر عادل لما تقدمه هذه الشاشة.

شيء آخر مثل هذه الشاشة هو أنها لا تأتي كدرع مثل شاشة اللمس التي كنا نستخدمها حتى الآن. بهذه الطريقة ، يمكننا توصيل الشاشة بأي لوحة ، مثل Arduino Pro mini و STM32 و ESP8266 و ESP32. هذا مهم جدًا لأن لدينا الآن شاشة عرض منخفضة التكلفة يمكننا استخدامها مع كل لوحة. حتى الآن ، كانت الشاشة اللمسية الوحيدة التي يمكننا استخدامها مع هذه اللوحات هي شاشات Nextion الأغلى ثمناً ، ولكي أكون صادقًا على الرغم من أنني أستخدمها من وقت لآخر ، فأنا لا أحبها حقًا.

الخطوة 4: توصيل الشاشة

توصيل الشاشة
توصيل الشاشة
توصيل الشاشة
توصيل الشاشة
توصيل الشاشة
توصيل الشاشة
توصيل الشاشة
توصيل الشاشة

أولاً ، يتعين علينا توصيل لوحة ESP32 بشاشة مقاس 2.8 بوصة. يمكنك العثور على التخطيطي المرفق بـ Instructable. أنا أستخدم لوحة DOIT ESP32 التي تم إصدارها منذ حوالي عامين. لم يعد هذا الإصدار من اللوحة متاحًا نظرًا لوجود إصدار أحدث متوفر الآن والذي يوفر المزيد من الدبابيس ، هذا الإصدار. السبب الوحيد الذي يجعلني أستخدم الإصدار القديم من اللوحة هو أن دبوس GND للوحة موضوع بجوار دبابيس SPI ، في نفس الجانب من اللوحة ، مما يجعلها صديقة للوح.

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

إذا استخدمنا مقياس USB هذا ، يمكننا أن نرى أن السحب الحالي لهذا المشروع يتراوح بين 120 و 150 مللي أمبير باستخدام هذه الشاشة الكبيرة. إذا استخدمنا شاشة عرض ورقية إلكترونية ، فضع لوحة ESP32 في وضع السكون العميق ، واحصل على بيانات من المستشعر كل بضع دقائق ، يمكننا جعل بطارية هذا المشروع صديقة. سأحاول هذا في فيديو مستقبلي. هذا المشروع هو مجرد عرض توضيحي يمكننا الحصول على البيانات من هذا الجهاز لاسلكيًا.

الخطوة الخامسة: كود المشروع

كود المشروع
كود المشروع

دعنا الآن نرى جانب البرنامج من المشروع.

يعتمد كود المشروع على هذا المشروع:

لقد استخدمت الكود الذي يحصل على هذه البيانات من جهاز Xiaomi وقمت ببناء مشروع مستقل به.

في هذا المتغير ، نعلن أننا بحاجة إلى الحصول على بيانات جديدة كل 10 ثوانٍ.

#define SCAN_TIME 10 // ثواني

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

منطقية METRIC = صحيح ؛ // ضبط صحيحًا للنظام المتري ؛ كاذبة للإمبراطورية

في وظيفة الإعداد ، نقوم بتهيئة العرض ووحدة Bluetooth للوحة ESP32 ثم نقوم برسم واجهة المستخدم على الشاشة.

الإعداد باطل() {

WRITE_PERI_REG (RTC_CNTL_BROWN_OUT_REG، 0) ، // تعطيل جهاز الكشف عن انقطاع التيار الكهربائي

tft.begin () ،

Serial.begin (115200) ؛

Serial.println ("ESP32 XIAOMI DISPLAY") ؛ initBluetooth () ،

drawUI () ،

}

بعد ذلك ، نبحث عن أجهزة Bluetooth القريبة كل 10 ثوانٍ. لا نقوم بإجراء اتصال بجهاز Xiaomi لأنه ليس هناك حاجة إليه. نحن نبحث فقط عن الأجهزة الطرفية القريبة من Bluetooth منخفضة الطاقة ونتحقق من حزم إعلانات البث.

حلقة فارغة () {char printLog [256] ؛ Serial.printf ("بدء مسح BLE لمدة٪ d ثانية … / n" ، SCAN_TIME) ؛ BLEScanResults foundDevices = pBLEScan-> start (SCAN_TIME) ، عدد صحيح = foundDevices.getCount () ، printf ("تم العثور على عدد الأجهزة:٪ d / n" ، العدد) ؛

تأخير (100) ؛

}

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

الخطوة 6: الأفكار والتحسينات النهائية

الأفكار والتحسينات النهائية
الأفكار والتحسينات النهائية
الأفكار والتحسينات النهائية
الأفكار والتحسينات النهائية

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

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

موصى به: