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

شريط واي فاي LED + مستشعر درجة الحرارة مع ESP8266: 6 خطوات
شريط واي فاي LED + مستشعر درجة الحرارة مع ESP8266: 6 خطوات

فيديو: شريط واي فاي LED + مستشعر درجة الحرارة مع ESP8266: 6 خطوات

فيديو: شريط واي فاي LED + مستشعر درجة الحرارة مع ESP8266: 6 خطوات
فيديو: Turn on and Turn off your home load using ESP 8266 WIFI module |Home Automation | 2024, شهر نوفمبر
Anonim
شريط واي فاي LED + مستشعر درجة الحرارة مع ESP8266
شريط واي فاي LED + مستشعر درجة الحرارة مع ESP8266

يصف هذا البرنامج التعليمي خطوات إعداد ESP8266 وجعله يتحدث إلى كل من مستشعر درجة الحرارة وشريط LED ، مع القدرة أيضًا على تلقي المدخلات وإرسال الإخراج باستخدام MQTT عبر WiFi. تم إعداد المشروع لدورة تم إجراؤها في Cal Poly San Luis Obispo في خريف 2016- CPE 439: Real Time Embedded Systems. كان الهدف العام هو إظهار سهولة إنشاء "شيء" متصل بالإنترنت باستخدام أجهزة رخيصة.

اللوازم / المعدات المطلوبة:

  • لوحة تطوير NodeMCU ESP8266
  • WS2812B شريط LED
  • جهاز استشعار درجة الحرارة MAX31820
  • اللوح
  • 4.7 كيلو أوم المقاوم
  • 220 أوم المقاوم
  • أسلاك العبور
  • كابل micro-usb
  • كمبيوتر شخصي (أو جهاز افتراضي) يعمل بنظام التشغيل Linux (مثل Ubuntu)

الافتراضات / المتطلبات الأساسية:

  • خبرة في استخدام أدوات سطر الأوامر وتثبيت الحزم على توزيعة قائمة على دبيان
  • الفهم الأساسي لبناء جملة Makefile
  • توصيل الأسلاك

الخطوة الأولى: إنشاء بيئة بناء

لإنشاء المشروع ، ستحتاج إلى تثبيت esp-open-sdk على جهازك. اتبع الرابط واقرأ تعليمات البناء. باختصار ، ستقوم ببعض أوامر sudo apt-get لتثبيت التبعيات ، واستنساخ git - متسلسل لاستنساخ / تنزيل esp-open-sdk ، وأخيراً أمر إنشاء لإنشاء esp-open-sdk.

راقبني

الخطوة 2: الحصول على شفرة المصدر والتكوين والبناء

الآن بعد أن تم بناء esp-open-sdk ، قم باستنساخ مستودع المشروع.

استنساخ بوابة

غيّر إلى دليل المشروع وأنشئ مجلدًا محليًا وانسخ إعدادات المثال.

cd esp-rtos- الاختبارات

mkdir -p. إعدادات cp المحلية. مثال. mk. محلي / إعدادات. mk

افتح الآن.local / settings.mk مع أي محرر نصوص وقم بتغيير الإعدادات التالية:

  • OPENSDK_ROOT: المسار المطلق لموقع esp-open-sdk الذي أنشأته في الخطوة 1
  • WIFI_SSID: معرف SSID لشبكة WiFi الخاصة بك
  • WIFI_PASS: كلمة مرور شبكة WiFi الخاصة بك
  • PIXEL_COUNT: عدد وحدات البكسل الموجودة على شريط WS2812B LED

ملاحظة: نظرًا لأن هذا المشروع يستخدم SPI لتشغيل مصابيح LED ويستخدم NodeMCU 3.3v لتزويدها ، فمن المحتمل أنك لن تتمكن من قيادة أكثر من 60 مصباح LED.

ملاحظة: لا يلزم تغيير الإعدادات الأخرى ، ولكن يمكن تغييرها إذا رغبت في ذلك. يوصى بالحفاظ على ترتيب أولويات المهمة. كلما انخفض رقم الأولوية ، قلت أولوية المهمة.

الآن قم ببناء المشروع:

صنع أمثلة C / cpe439

إذا تم إعداد كل شيء بشكل صحيح ، فيجب أن يبدأ التجميع. في النهاية يجب أن ترى:

تم بنجاح إنشاء "firmware / cpe439.bin"

راقبني

الخطوة 3: قم بتوصيل مكونات الأجهزة

قم بتوصيل مكونات الأجهزة
قم بتوصيل مكونات الأجهزة

الآن بعد أن تم تجميع الكود ، حان الوقت لتوصيل أجهزتنا الطرفية.

أولاً ، قم بلصق NodeMCU على اللوح ، ثم استخدم أسلاك التوصيل لإجراء التوصيلات كما هو موضح في الرسم التخطيطي.

هناك أمران يجب أن تكون على دراية بهما:

  1. هام: خط بيانات WS2812B ليس ثنائي الاتجاه. إذا نظرت عن كثب إلى العلامات الموجودة على جانب LED من الشريط ، يجب أن ترى أسهمًا صغيرة تشير إلى اتجاه واحد. يجب أن يتجه الإخراج من D7 الخاص بـ NodeMCU إلى WS2812B بنفس طريقة علامة الاتجاه ، والتي يمكنك رؤيتها في الرسم التخطيطي إذا نظرت عن كثب.
  2. اعتمادًا على نوع الموصلات التي يأتي معها WS2812B ، قد تحتاج إلى إجراء بعض التعديلات لجعلها متصلة بشكل آمن باللوحة. يمكنك أيضًا استخدام مقاطع التمساح لتوصيلها بكابلات توصيل قابلة للوحة توصيل الدوائر.
  3. تتميز دبابيس MAX31820 بمسافة أصغر وأرفع من وصلات العبور القياسية 0.1 بوصة / 2.54 مم ، مما يجعلها صعبة التوصيل. إحدى الطرق للتغلب على ذلك هي استخدام أسلاك توصيل من أنثى إلى ذكر ، وخلع العلبة البلاستيكية من الجانب الأنثوي ، ثم استخدم بعض الزردية لتجعيد نهايات العبور الأنثوي بإحكام حول دبابيس MAX31820 الأصغر.

تحقق جيدًا من التوصيلات قبل تشغيل NodeMCU حتى لا تتلف المكونات.

الخطوة 4: Flash and Run

وامض

مع توصيل جميع الأجهزة ، قم بتوصيل NodeMCU الخاص بك وفلاش باستخدام الأمر التالي:

عمل أمثلة فلاش -C / cpe439 ESPPORT = / dev / ttyUSB0

/ dev / ttyUSB0 هو com التسلسلي الذي يجب أن يظهر NodeMCU تحته. إذا كان لديك أجهزة تسلسلية أخرى متصلة ، فقد تظهر كـ / dev / ttyUSB1 أو بعض الأرقام الأخرى. للتحقق ، يمكنك تشغيل هذا الأمر مرتين ، مرة مع NodeMCU غير متصل ، ومرة مع توصيله ، وقارن الفرق:

ls / dev / ttyUSB *

هناك مشكلة أخرى قد تواجهها وهي عدم الحصول على إذن للوصول إلى الجهاز. طريقتان لإصلاح هذا:

  1. أضف المستخدم الخاص بك إلى مجموعة الاتصال الهاتفي:

    sudo adduser $ (whoami) الطلب الهاتفي

  2. chmod أو chown الجهاز:

sudo chmod 666 / dev / ttyUSB0 sudo chown $ (whoami): $ (whoami) / dev / ttyUSB0يفضل الأسلوب الأول لأنه حل دائم.

ادارة

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

python3 -m serial.tools.miniterm --eol CRLF --exit-char 003 / dev / ttyUSB0 500000 --raw -q

لتوفير الوقت ، يمكنك إضافة هذا إلى ملف ~ /.bashrc الخاص بك:

الاسم المستعار nodemcu = 'python3 -m serial.tools.miniterm --eol CRLF --exit-char 003 / dev / ttyUSB0 500000 --raw -q'

.. الذي يسمح لك ببساطة بكتابة "nodemcu" كاسم مستعار لهذا الأمر.

إذا تم تكوين كل شيء بشكل صحيح ، يجب أن يضيء شريط LED باللون الأخضر ، وفي المسلسل سترى اتصال WiFi ، والحصول على عنوان IP ، والاتصال بـ MQTT ، والرسائل التي تفيد بأن بيانات درجة الحرارة يتم دفعها للخارج.

متصل بـ MyWiFiSSID ، يبدأ عميل القناة 1dhcp… wifi_task: الحالة = 1wifi_task: الحالة = 1ip: 192.168.2.23 ، القناع: 255.255.255.0 ، gw: 192.168.2.1ws2812_spi_init okRequest temp OKwifi_task: status = 5xQueueRece_tue: okwifi_task بدأ: (إعادة) الاتصال بخادم MQTT test.mosquitto.org… xQueueReceive + 25.50xQueueSend طيب تم إرسال MQTT connect… MQTTv311donexQueueReceive +25.56 xQueueSend طيب

الخطوة 5: التفاعل

بافتراض أن جهازك متصل بشبكة WiFi ووسيط MQTT بنجاح ، ستتمكن من إرسال واستقبال البيانات من NodeMCU باستخدام MQTT. إذا لم تكن قد قمت بذلك بالفعل ، فقم بتثبيت حزمة عملاء البعوض:

sudo apt-get install mosquitto-clients. تثبيت عملاء البعوض sudo apt-get install

يجب أن تكون الآن قادرًا على استخدام برامج mosquitto_pub و mosquitto_sub من صدفتك.

تلقي تحديثات درجة الحرارة

لتلقي بيانات درجة الحرارة ، سنرغب في استخدام الأمر mosquitto_sub للاشتراك في الموضوع الذي تنشره NodeMCU.

mosquitto_sub -h test.mosquitto.org -t / cpe439 / temp

يجب أن تشاهد بيانات درجة الحرارة (بالدرجة المئوية) عند وصولك إلى المحطة.

+25.87+25.93+25.68…

ضبط لون شريط LED عن بعد

يتم استخدام تنسيق رسالة بسيط لإرسال قيم RGB إلى NodeMCU عبر MQTT. يبدو تنسيق الأمر كما يلي:

r: RRRg: GGGb: BBB ~

حيث تتوافق RRR و GGG و BBB مع قيم RGB (0-255) للون الذي تريد إرساله. لإرسال أمرنا ، سنستخدم الأمر mosquitto_pub. وهنا بعض الأمثلة:

mosquitto_pub -h test.mosquitto.org -t / cpe439 / rgb -m 'r: 255g: 0b: 0 ~' # redmosquitto_pub -h test.mosquitto.org -t / cpe439 / rgb -m 'r: 0g: 255b: 0 ~ '# greenmosquitto_pub -h test.mosquitto.org -t / cpe439 / rgb -m' r: 0g: 0b: 255 ~ '# blue

إذا كنت تريد أن تكون مبدعًا ، فابحث عن منتقي ألوان عبر الإنترنت مثل هذا ، وقم بتحرير الأمر بأي قيمة RGB تختارها.

احذر

تم تعيين الموضوعات في هذا المشروع على / cpe439 / rgb و / cpe439 / temp على وسيط MQTT عام ، مما يعني أنه لا يوجد شيء يمنع أي شخص آخر من النشر أو الاشتراك في نفس الموضوعات مثلك. لتجربة الأشياء ، يعد استخدام وسيط عام أمرًا جيدًا ، ولكن بالنسبة للمشاريع الأكثر جدية ، سترغب في الاتصال بوسيط يتمتع بحماية كلمة المرور ، أو تشغيل وسيطك الخاص على الخادم.

الخطوة 6: تفاصيل التنفيذ

ون واير

يحتوي ESP8266 على نواة واحدة فقط ، طويلة جدًا ، تمنع المهام مثل الانتظار 750 مللي ثانية حتى يقوم مستشعر درجة الحرارة بأداء قياس درجة الحرارة ، مما يؤدي عادةً إلى عدم عمل WiFi بشكل جيد ، وربما حتى حدوث عطل. في نموذج FreeRTOS ، يمكنك استدعاء vTaskDelay () للتعامل مع فترات الانتظار الطويلة هذه ، ولكن هناك أيضًا العديد من فترات الانتظار الأقصر المطلوبة بين عمليات القراءة والكتابة التي تكون أقصر من علامة نظام FreeRTOS ، وبالتالي لا يمكن تجنبها باستخدام vTaskDelay (). للتغلب على هذه المشكلات أيضًا ، تمت كتابة برنامج التشغيل onewire في هذا المشروع للتشغيل من آلة الحالة التي يتم تشغيلها بواسطة مؤقت الأجهزة الخاص بـ ESP8266 ، والذي يمكن أن يؤدي إلى أحداث منخفضة تصل إلى كل 10 ثوانٍ دقيقة ، والتي تصادف أنها الأقصر الوقت المطلوب بين عمليات القراءة / الكتابة في onewire. تستخدم معظم التطبيقات الأخرى استدعاء حظر لـ delay_us () أو ما شابه للتعامل مع هذا ، ولكن إذا كنت تجري تحديثات درجة الحرارة باستمرار ، فإن كل هذه التأخيرات تبدأ في الزيادة ، مما يؤدي إلى تطبيق أقل استجابة. يوجد مصدر هذا الجزء من التعليمات البرمجية في مجلد extras / onewire.

WS2812B

لا يحتوي ESP8266 على أي خيارات أجهزة قياسية لـ PWM بسرعة كافية لدفع شرائط LED عند 800 كيلو هرتز. للتغلب على هذا ، يستخدم هذا المشروع دبوس SPI MOSI لقيادة مصابيح LED. من خلال ضبط معدل ساعة SPI ، وتغيير حمولة SPI حولها ، يمكنك تحقيق تحكم موثوق به إلى حد ما لكل مصباح LED فردي. هذه الطريقة لا تخلو من العيوب - لأحدها يجب أن يتم تشغيل مصابيح LED بمصدر 5 فولت ويجب إضافة محول مستوى إلى إخراج دبوس SPI. لكن 3.3V يعمل. ثانيًا ، هناك مواطن الخلل التي تحدث بسبب عدم دقة التوقيت باستخدام طريقة SPI. والثالث هو أنه لا يمكنك الآن استخدام SPI لأي شيء آخر. يمكن العثور على خلفية إضافية عن هذه الطريقة هنا ، ومصدر هذا الجزء من الكود موجود في مجلد extras / ws2812.

طريقة أكثر موثوقية لقيادة شرائط LED هي استخدام i2s. ومع ذلك ، تحتوي هذه الطريقة على الكثير من الاختراقات الخاصة بالشرائح ، لذلك بدا أن SPI هو الخيار الأفضل كتمرين تعليمي.

موصى به: