فهرست مطالب:

نوار LED WiFi + سنسور دما با ESP8266: 6 مرحله
نوار LED WiFi + سنسور دما با ESP8266: 6 مرحله

تصویری: نوار LED WiFi + سنسور دما با ESP8266: 6 مرحله

تصویری: نوار LED WiFi + سنسور دما با ESP8266: 6 مرحله
تصویری: ESP8266 ESP01 WIFI-UART | برنامه نویسی LDmicro-Roboremo 2024, جولای
Anonim
نوار LED WiFi + سنسور دما با ESP8266
نوار LED WiFi + سنسور دما با ESP8266

این آموزش مراحل راه اندازی ESP8266 و صحبت کردن آن با سنسور دما و نوار LED را توضیح می دهد ، در حالی که قادر به دریافت ورودی و ارسال خروجی با MQTT از طریق WiFi است. این پروژه به منظور گذراندن دوره ای در Cal Poly San Luis Obispo در پاییز 2016 انجام شد- CPE 439: Real Time Embedded Systems. هدف کلی نشان دادن سهولت ایجاد "چیزی" متصل به اینترنت با سخت افزار ارزان بود.

لوازم/تجهیزات مورد نیاز:

  • برد NodeMCU ESP8266 dev
  • نوار LED WS2812B
  • سنسور دما MAX31820
  • تخته نان
  • مقاومت 4.7 کیلو اهم
  • مقاومت 220 اهم
  • سیم های جهنده
  • کابل micro-usb
  • کامپیوتر (یا VM) دارای لینوکس (به عنوان مثال اوبونتو)

مفروضات/پیش نیازها:

  • تجربه استفاده از ابزارهای خط فرمان و نصب بسته ها در توزیع مبتنی بر debian
  • درک اولیه از نحو Makefile
  • سیم های اتصال

مرحله 1: ایجاد محیط ساخت

برای ساخت پروژه ، به esp-open-sdk نصب شده بر روی دستگاه خود نیاز دارید. پیوند را دنبال کنید و دستورالعمل ساخت را بخوانید. به طور خلاصه شما برخی دستورات sudo apt-get را برای نصب وابستگی ها انجام می دهید ، یک git clone-برای کلون کردن/بارگیری esp-open-sdk و در نهایت دستور make برای ساخت esp-open-sdk.

منو ببین

مرحله 2: کد منبع ، پیکربندی و ساخت را دریافت کنید

اکنون که esp-open-sdk ساخته شده است ، مخزن پروژه را کلون کنید.

git clone

به فهرست پروژه تغییر دهید ، یک پوشه.local ایجاد کنید و تنظیمات نمونه را کپی کنید.

cd esp-rtos-tests

mkdir -p.local cp settings.example.mk.local/settings.mk

اکنون.local/settings.mk را با هر ویرایشگر متن باز کنید و تنظیمات زیر را تغییر دهید:

  • OPENSDK_ROOT: مسیر مطلق مکان esp-open-sdk که در مرحله 1 ایجاد کرده اید
  • WIFI_SSID: SSID شبکه WiFi شما
  • WIFI_PASS: رمز عبور شبکه WiFi شما
  • PIXEL_COUNT: تعداد پیکسل های نوار LED WS2812B شما

توجه: از آنجا که این پروژه از SPI برای هدایت LED ها استفاده می کند و از NodeMCU 3.3v برای تأمین آنها استفاده می کند ، احتمالاً نمی توانید بیش از 60 پوند LED هدایت کنید.

توجه: سایر تنظیمات نیازی به تغییر ندارند ، اما در صورت تمایل می توانند تغییر کنند. توصیه می شود ترتیب اولویت های کار را رعایت کنید. هرچه عدد اولویت کمتر باشد ، اولویت انجام کار کمتر است.

حالا پروژه را بسازید:

439

اگر همه چیز به درستی تنظیم شده باشد ، باید کامپایل شود. در پایان باید ببینید:

'firmware/cpe439.bin' با موفقیت ایجاد شد

منو ببین

مرحله 3: قطعات سخت افزاری را وصل کنید

اتصال قطعات سخت افزاری
اتصال قطعات سخت افزاری

اکنون که کد کامپایل شده است ، وقت آن است که لوازم جانبی خود را به هم متصل کنیم.

ابتدا ، NodeMCU را روی تخته نان بچسبانید ، سپس از سیم های جامپر برای ایجاد اتصالات مطابق نمودار استفاده کنید.

چند نکته که باید از آنها آگاه باشید:

  1. مهم: خط داده WS2812B دو جهته نیست. اگر به علامت های سمت LED نوار دقت کنید ، پیکان های کوچکی را مشاهده می کنید که یک جهت را نشان می دهند. خروجی D7 از NodeMCU باید همانند نشانگر جهت به WS2812B هدایت شود ، که اگر از نزدیک نگاه کنید ، می توانید آن را در نمودار مشاهده کنید.
  2. بسته به نوع اتصال دهنده های WS2812B شما ، ممکن است لازم باشد برخی تغییرات را انجام دهید تا بتوانید آنها را به طور ایمن به صفحه نان متصل کنید. همچنین می توانید از گیره تمساح برای اتصال آنها به کابل های بلوز با قابلیت بردبرد استفاده کنید.
  3. پین های MAX31820 دارای ارتفاع کوچکتر و نازک تر از پرش های استاندارد 0.1 "/2.54 میلی متری هستند که اتصال آنها را مشکل می کند. یکی از راه های استفاده از سیم های بلوز زن به مرد ، برداشتن قاب پلاستیکی از سمت زن ، سپس از انبردست برای محکم کردن انتهای بلوز زنانه در اطراف پین های MAX31820 کوچکتر استفاده کنید.

قبل از روشن کردن NodeMCU ، اتصالات را دوبار بررسی کنید تا به قطعات آسیب نرساند.

مرحله 4: فلش و اجرا کنید

چشمک می زند

با تمام سخت افزارهای متصل ، NodeMCU خود را وصل کرده و با دستور زیر فلش کنید:

نمونه های فلش -C/cpe439 ESPPORT =/dev/ttyUSB0 را ایجاد کنید

/dev/ttyUSB0 مجموعه ای است که NodeMCU باید در آن نشان داده شود. اگر دستگاه های سریال دیگری به هم متصل شده اید ، ممکن است به صورت /dev /ttyUSB1 یا شماره دیگری نشان داده شود. برای بررسی می توانید این دستور را دوبار اجرا کنید ، یک بار با NodeMCU unplugged ، و یک بار با آن وصل شده ، و تفاوت را مقایسه کنید:

ls /dev /ttyUSB*

مشکل دیگری که ممکن است با آن برخورد کنید نداشتن مجوز دسترسی به دستگاه است. دو راه برای رفع این مشکل عبارتند از:

  1. کاربر خود را به گروه dialout اضافه کنید:

    sudo adduser $ (whoami) dialout

  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: status = 1wifi_task: status = 1ip: 192.168.2.23 ، ماسک: 255.255.255.0 ، gw: 192.168.2.1ws2812_spi_init okRequest temp OKwifi_taskm_kaset: (دوباره) اتصال به سرور MQTT test.mosquitto.org… xQueueReceive +25.50xQueueSand ok done ارسال MQTT اتصال… MQTTv311donexQueueReiveive +25.56 xQueueSend ok

مرحله 5: تعامل

با فرض اینکه دستگاه شما به WiFi و کارگزار MQTT متصل شده است ، می توانید داده ها را از NodeMCU با MQTT ارسال و دریافت کنید. اگر قبلاً نصب نکرده اید ، بسته مشتری mosquitto را نصب کنید:

sudo apt-get mosquitto-client را نصب کنید

اکنون باید بتوانید از برنامه 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" # آبی

اگر می خواهید خلاق باشید ، یک انتخاب کننده رنگ مانند این را در اینترنت پیدا کنید و دستور را با هر مقدار RGB که انتخاب می کنید ویرایش کنید.

مواظب باش

موضوعات موجود در این پروژه بر روی /cpe439 /rgb و /cpe439 /temp در یک کارگزار عمومی MQTT تنظیم شده است ، به این معنی که هیچ چیز مانع از انتشار یا اشتراک دیگران در موضوعات مشابه شما نمی شود. برای امتحان کردن موارد ، استفاده از یک کارگزار عمومی خوب است ، اما برای پروژه های جدی تر می خواهید به یک کارگزار با حفاظت از رمز عبور متصل شوید یا بروکر خود را روی سرور اجرا کنید.

مرحله 6: جزئیات پیاده سازی

Onewire

ESP8266 تنها دارای 1 هسته است ، بنابراین مسدود کردن کارهایی مانند انتظار 750 میلی متر برای انجام اندازه گیری دما به طور معمول باعث می شود که WiFi به خوبی کار نکند و حتی ممکن است خراب شود. در پارادایم FreeRTOS ، شما با vTaskDelay () تماس می گیرید تا این انتظارات طولانی را برطرف کند ، اما بین خواندن و نوشتن انتظارات کوتاه تری نیز وجود دارد که کوتاهتر از تیک سیستم FreeRTOS هستند ، و بنابراین نمی توان با vTaskDelay () اجتناب کرد. برای غلبه بر این موارد ، راننده onewire در این پروژه نوشته شده است که از یک دستگاه دولتی خارج می شود که توسط تایمر سخت افزاری ESP8266 هدایت می شود ، که می تواند رویدادهایی را در هر 10 میکرو ثانیه کم کند ، که به نظر می رسد کوتاه ترین باشد. زمان مورد نیاز بین عملیات خواندن/نوشتن onewire اکثر پیاده سازی های دیگر از یک تماس مسدود کننده برای delay_us () یا مشابهی برای مدیریت این مورد استفاده می کنند ، اما اگر دائماً به روزرسانی دما را انجام می دهید ، همه این تاخیرها شروع به جمع شدن می کنند و در نتیجه برنامه ای کمتر پاسخگو است. منبع این بخش از کد در پوشه extras/onewire قرار دارد.

WS2812B

ESP8266 هیچ گزینه سخت افزاری استانداردی برای PWM به اندازه کافی سریع برای حرکت نوارهای LED با سرعت 800KHz ندارد. برای حل این مشکل ، این پروژه از پین SPI MOSI برای هدایت LED ها استفاده می کند. با تنظیم نرخ ساعت SPI و تغییر بار SPI در اطراف ، می توانید به کنترل نسبتاً قابل اعتماد هر LED جداگانه دست پیدا کنید. این روش بدون اشکال نیست- برای یکی ، LED ها باید با منبع 5V تغذیه شوند و یک تغییر دهنده سطح به خروجی پین SPI اضافه شود. اما 3.3 ولت کار می کند. دوم ، اشکالاتی وجود دارد که به دلیل زمان ناقص با استفاده از روش SPI رخ می دهد. و سوم اینکه اکنون نمی توانید از SPI برای موارد دیگر استفاده کنید. پیش زمینه اضافی این روش را می توانید در اینجا پیدا کنید ، و منبع این بخش از کد در پوشه extras/ws2812 قرار دارد.

یک روش مطمئن تر برای رانندگی نوارهای LED استفاده از i2s است. با این حال ، این روش دارای هک های زیادی برای تراشه است ، بنابراین SPI به عنوان یک تمرین یادگیری انتخاب بهتری بود.

توصیه شده: