فهرست مطالب:

ESP8266 ارتباط مستقیم داده ها: 3 مرحله
ESP8266 ارتباط مستقیم داده ها: 3 مرحله

تصویری: ESP8266 ارتباط مستقیم داده ها: 3 مرحله

تصویری: ESP8266 ارتباط مستقیم داده ها: 3 مرحله
تصویری: نحوه ساخت رله Wi-Fi 4 کانال ESP8266 ESP01 | ESP01 اتوماسیون خانگی | RemoteXY | FLProg 2024, نوامبر
Anonim
ESP8266 ارتباط مستقیم داده ها
ESP8266 ارتباط مستقیم داده ها

معرفی

در حالی که برخی پروژه ها را با ماژول های Arduinos و nRF24l01 انجام می دادم ، فکر می کردم آیا می توانم با استفاده از ماژول ESP8266 به جای آن ، در تلاش خود صرفه جویی کنم. مزیت ماژول ESP8266 این است که دارای یک میکرو کنترلر روی برد است ، بنابراین نیازی به برد آردوینو اضافی نیست. علاوه بر این ، حجم حافظه ESP8266 بسیار بزرگتر است و از نظر سرعت ESP8266 حداکثر 160 مگاهرتز به جای 16 مگاهرتز آردوینو کار می کند. البته جنبه های منفی آن نیز وجود دارد.

ESP8266 فقط با ولتاژ 3.3 ولت کار می کند ، پین های کمتری دارد و ورودی های آنالوگ خوبی که آردوینو دارد را از دست می دهد (دارای یک ، اما فقط برای 1.0 ولت و نه 3.3 ولت). علاوه بر این ، نمونه های کد بسیار بیشتری برای Arduino + nRF24l01 و سپس برای ESP8266 وجود دارد ، مخصوصاً در مورد انتقال مستقیم داده ها.

بنابراین با توجه به پروژه ای ، من به موضوع انتقال سریع و سبک داده بین دو ESP8266 بدون تمام WWW و HTTP پرداختم.

هنگام جستجو در اینترنت برای مثال (اکثر کد های زیر از شبکه در نقاط مختلف انتخاب شده است) به س questionsالات زیادی برخورد کردم که چگونه می توان انتقال مستقیم داده را بدون مثالهای خوب "آن را انجام دهید" پیاده سازی کرد. چند کد نمونه وجود داشت ، اما بیشتر با س whyال که چرا کار نمی کند.

بنابراین پس از مطالعه و تلاش برای درک ، مثالهای زیر را ایجاد کردم که امکان انتقال سریع و ساده داده ها بین دو ESP8266 را فراهم می آورد.

مرحله 1: مرزها و پیشینه (TCP در مقابل UDP)

برای رسیدن به آنجا ، برخی از مرزها باید در مقایسه با nRF24l01 روشن شوند.

برای استفاده از ESP8266 در محیط Arduino ، کتابخانه اصلی مورد استفاده ESP8266WiFi.h است. ممکن است موارد مختلف باشد ، اما بیشتر نمونه ها از موارد ذکر شده در بالا استفاده می کنند. هنگام استفاده از این ، باید ارتباط خود را به سطح WiFi برسانید.

بنابراین ، برای برقراری ارتباط باید حداقل یک نقطه دسترسی (AP) / سرور و یک سرویس گیرنده وجود داشته باشد. AP نام شبکه و آدرس های IP را ارائه می دهد و سرویس گیرنده به این سرور متصل می شود.

بنابراین nRF24l01 را مقایسه کنید ، جایی که کد در دو انتها کم و بیش یکسان است (به جز کانال های انتقال) کد ESP8266 اساساً متفاوت است ، زیرا یکی به عنوان AP و دیگری به عنوان سرویس دهنده پیکربندی شده است.

موضوع بعدی این است که به جای ارسال چند بایت به nRF24l01 ، پروتکل های انتقال ESP8266 باید رعایت شوند.

دو پروتکل متداول وجود دارد: TCP و UDP.

TCP (پروتکل کنترل انتقال) یک پروتکل است که امکان انتقال بدون ضرر بین سرور و سرویس گیرنده را فراهم می کند. این پروتکل شامل "دست دادن" (تعداد زیادی پرچم و حق اعزام بین دو طرف) و شماره گذاری و تشخیص بسته ها برای شناسایی و ارسال مجدد بسته های از دست رفته است. علاوه بر این ، با استفاده از همه این دست دادن ها ، پروتکل از از دست رفتن داده ها به دلیل ارسال بسیاری از بسته ها به طور همزمان در شبکه جلوگیری می کند. بسته های داده تا دریافت آنها منتظر می مانند.

UDP (پروتکل اطلاعات کاربر) فاقد همه دست دادن ، شماره گذاری بسته ها و انتقال مجدد است. بنابراین سربار آن کوچکتر است و نیازی به همه دست دادن ها برای حفظ ارتباط نیست. UDP شامل برخی از خطاهای اساسی تشخیص ، اما هیچ تصحیح (بسته خراب شده است فقط حذف). در صورتی که طرف دریافت کننده در دریافت داده ها آزاد باشد ، داده ها بدون اطلاع ارسال می شوند. در عین حال ، بسته های مختلف می توانند با هم برخورد کنند ، زیرا هر طرف داده ها را در هر زمان که نیاز باشد ارسال می کند. با حذف تمام دست دادن ها ، یک ویژگی خوب دیگر از UDP به نام "چند پخش کننده" و "پخش" وجود دارد. در مورد "چندپخشی" بسته های داده به گروه از پیش تعریف شده از اعضا ارسال می شوند ، در "پخش" بسته های داده برای همه اعضای متصل ارسال می شود. این امر به طور قابل توجهی انتقال داده ها را در صورت جریانهایی که توسط چندین عضو دریافت می شود (به عنوان مثال با ارسال یک ویدئو به چندین گیرنده یا ارسال زمان فعلی به چندین دستگاه متصل) کاهش می دهد.

ویدئوهای خوبی در یوتیوب وجود دارد که آن را بهتر توضیح می دهند.

بنابراین هنگام ارسال داده ها ، مهم است که نیازهای خود را بدانید:

  • داده های فاسد نشده ، مدیریت چندین همکار با دست دادن → TCP
  • داده های زمان واقعی ، اتصال سریع → UDP

من ابتدا با پیاده سازی یک ارتباط مبتنی بر TCP (بین یک سرور و یک مشتری) شروع کردم. در حین آزمایش ، من در انتقال مشکلاتی داشتم. در ابتدا داده ها به سرعت تبادل می شد ، سپس پس از مدتی سرعت به طور چشمگیری کاهش یافت. من به این نتیجه رسیدم که این یک مشکل معمولی از رویکرد TCP بود (که اشتباه بود!) ، بنابراین بعداً به یک راه حل مبتنی بر UDP تغییر یافت. بالاخره هر دو به کار نزدیک شدم. بنابراین هر دو راه حل ارائه می شود.

طرحهای زیر برای TCP و UDP مشترک است:

  • مستقل از هر شبکه WiFi موجود هستند. بنابراین در هر نقطه دور از اینترنت و روترهای متصل کار می کند.
  • داده های ASCII را برای چاپ از طریق مانیتور سریال ارسال می کنند.
  • در حال ارسال داده های بدست آمده از تابع millis () برای تجزیه و تحلیل سرعت انتقال هستند.
  • برای چندین مشتری آزمایش نمی شوند (به دلیل داشتن سخت افزار برای راه اندازی شبکه در حال حاضر)

مرحله 2: سخت افزار

سخت افزار
سخت افزار
سخت افزار
سخت افزار
سخت افزار
سخت افزار
سخت افزار
سخت افزار

برای آزمایش کل مجموعه ، از دو ماژول ESP8266 استفاده کردم. یکی از ماژول ها یک آداپتور ESP-01 + USB-to-UART است. ماژول دیگر یک ماژول مبتنی بر ESP-12 است که شامل اتصال USB ، تنظیم کننده ولتاژ و برخی موارد جالب مانند سوئیچ ها ، LDR و LED های چند رنگ است.

ماژول USB-to-UART برای ESP-01 نیاز به کمی اصلاح داشت تا بتوان از آن به عنوان برنامه نویس استفاده کرد (دوباره Youtube توسط Csongor Varga).

برای اجرای طرح ها ، باید کتابخانه های ESP8266 را نصب کنید (همانطور که در بسیاری از نقاط اینترنت توضیح داده شده است). در هر دو مورد (TCP و UDP) هر کدام یک طرح سرور و مشتری وجود دارد. کدام طرح روی کدام ماژول بارگذاری می شود مهم نیست.

تقدیر و تشکر

همانطور که گفته شد ، طرح ها بر اساس بسیاری از قطعاتی است که در وب پیدا کردم. دیگر به خاطر نمی آورم که کجا را پیدا کردم و کد اصلی چیست یا چه چیزی را تغییر دادم. بنابراین من فقط می خواستم به طور کلی از جامعه بزرگ آنجا برای انتشار همه نمونه های عالی تشکر کنم.

مرحله 3: طرح ها

کد شامل دو طرح (هر کدام توضیح داده شد) ، یک طرح سرور و یک طرح مشتری ، برای TCP و UDP هر کدام.

توصیه شده: