راه اندازی ماژول zigbee | در این راهنما، ما ماژول XBee را به Arduino متصل کرده و ارتباط ZigBee را برای استفاده به عنوان فرستنده و گیرنده راهاندازی خواهیم کرد. ZigBee یک پروتکل ارتباط بیسیم است که عمدتاً برای برنامههای IoT (اینترنت اشیاء) طراحی شده است. این پروتکل به دستگاههای هوشمند کمک میکند تا به راحتی به یکدیگر متصل شده و در یک شبکه مش با هم ارتباط برقرار کنند. این ساختار مش به این معناست که دستگاههای ZigBee میتوانند دادهها را از یکدیگر عبور دهند که این امر دامنه شبکه را افزایش میدهد و قابلیت اعتماد را بالا میبرد. در ادامه با آموزشگاه خانه رباتیک ایران همراه باشید.
در این آموزش، ما:
– معرفی ماژول XBee: با ویژگیها، کاربردها و دامنه آن آشنا خواهیم شد.
– راهاندازی نرمافزار XCTU: از XCTU برای پیکربندی ماژول XBee به عنوان فرستنده یا گیرنده استفاده خواهیم کرد.
– اتصال ماژولهای XBee به Arduino: یک بورد Arduino را با ماژول XBee به عنوان فرستنده و دیگری را به عنوان گیرنده آماده خواهیم کرد.
– نوشتن کد نمونه: کدی ایجاد خواهیم کرد که دادهها را به صورت بیسیم بین دو بورد Arduino ارسال کند.
– ادغام یک حسگر: یک حسگر به فرستنده متصل خواهیم کرد و کد را برای ارسال دادههای حسگر به صورت بیسیم تغییر خواهیم داد.
– آزمایش ارتباط بیسیم: تأیید خواهیم کرد که دادهها بهطور موفقیتآمیز بین فرستنده و گیرنده در یک فاصله معین منتقل میشوند.
با توجه به این مراحل، در پایان شما یک راهاندازی کاملاً عملیاتی برای ارتباط بیسیم ZigBee با استفاده از ماژول XBee و Arduino خواهید داشت.
قطعات مورد نیاز
برای این آموزش به قطعات زیر نیاز داریم. شما میتوانید این قطعات را از Amazon یا AliExpress خریداری کنید.
| ۱ | Arduino UNO 2
| ۲ | ۲ ماژول XBee
| ۳ | ۲ آداپتور XBee
| ۴ | ۱ حسگر DHT11
| ۵ | LCD 16×2 I2C ۱
| ۶ | سیمهای اتصال ۱۰
| ۷ | بُرد سوراخدار ۲
ارتباط ZigBee
ZigBee یک پروتکل بیسیم با دامنه کوتاه است که مشابه Wi-Fi و Bluetooth طراحی شده و برای پشتیبانی از برنامههای IoT کمهزینه و باتریعملیاتی که طول عمر باتری در آنها حیاتی است، مناسب است. ZigBee بر اساس لایه فیزیکی IEEE 802.15.4 ساخته شده است و یک راهحل ارتباطی قابل اعتماد و کممصرف را با کارایی در نرخ داده پایین ۲۵۰ Kbps در فرکانس استاندارد ۲.۴ GHz فراهم میکند. این نرخ داده پایین یک معامله عمدی است که شبکهای کممصرف و با پهنای باند پایین را امکانپذیر میسازد که میتواند از بسیاری از دستگاههای متصل پشتیبانی کند.
یک دستگاه Zigbee معمولاً دارای محدودهای بین ۱۰ تا ۲۰ متر در داخل ساختمان است که به آن امکان میدهد با سایر دستگاههای Zigbee در شبکه ارتباط برقرار کند و موقعیتیابی کند. برخلاف بلوتوث که بر روی اتصالات مستقیم و نقطه به نقطه تکیه دارد، Zigbee از توپولوژی شبکه مش استفاده میکند. این ساختار مش به دستگاههای Zigbee اجازه میدهد که پیامها را از طریق چندین دستگاه واسط ارسال کنند و در نتیجه پوشش شبکه را گسترش داده و استحکام آن را بهبود ببخشند.
به عنوان مثال، یک لامپ و یک کلید روشنایی که هر دو از Zigbee پشتیبانی میکنند، هنگامی که در همان شبکه متصل شوند، میتوانند به یک زبان پروتکل “صحبت” کنند، به طوری که کلید بدون نیاز به پیکربندی اضافی میتواند لامپ را کنترل کند.
انواع دستگاهها در یک شبکه Zigbee
در یک شبکه Zigbee، سه نوع اصلی دستگاه وجود دارد که هر یک نقش مشخصی ایفا میکنند:
هماهنگکننده (Coordinator)
هماهنگکننده، دستگاه اصلی است که شبکه Zigbee را راهاندازی میکند. این دستگاه وظایف اساسی مانند تخصیص آدرسهای شبکه، مدیریت تنظیمات و تأمین امنیت ارتباطات از طریق رمزنگاری را انجام میدهد. تنها یک هماهنگکننده در یک شبکه Zigbee لازم است.
روتر (Router)
روترها دامنه شبکه را با عبور دادهها بین دستگاهها گسترش میدهند. آنها با سایر روترها یا دستگاههای انتهایی ارتباط برقرار میکنند و مسیرهای ارتباطی متعددی ایجاد میکنند که باعث تقویت شبکه میشود.
دستگاه انتهایی (End Device)
دستگاههای انتهایی معمولاً دستگاههای کممصرفی مانند حسگرها، لامپهای هوشمند یا کلیدها هستند. آنها بهطور مستقیم به یک روتر یا هماهنگکننده متصل میشوند و دادهها را منتقل نمیکنند، که به حفظ انرژی کمک میکند. دستگاههای انتهایی معمولاً با باتری کار میکنند و میتوانند در زمان inactivity به حالت خواب بروند تا انرژی را صرفهجویی کنند.
تفاوتهای بین ZigBee و XBee
هر دو واژه “XBee” و “Zigbee” اصطلاحات درستی هستند، اما به موارد مختلفی اشاره دارند:
– Zigbee: این یک استاندارد پروتکل ارتباطی بیسیم است که برای برنامههای IoT کممصرف طراحی شده و به دستگاهها امکان میدهد که در یک شبکه مشی متصل شوند. این یک پروتکل است که توسط بسیاری از دستگاهها و تولیدکنندگان مورد استفاده قرار میگیرد.
– XBee: این یک خط تولید از Digi International است که شامل ماژولهایی میشود که قادر به پشتیبانی از پروتکلهای بیسیم مختلف، از جمله Zigbee، هستند.
بهطور خلاصه، Zigbee پروتکل است و XBee یک محصول سختافزاری خاص است که میتواند Zigbee و سایر پروتکلها را پشتیبانی کند.
ماژول XBee
ماژولهای XBee ماژولهای ارتباطی بیسیم معروفی هستند که توسط Digi International توسعه یافتهاند و برای سادهسازی شبکهسازی بیسیم در برنامههای IoT و Embedded طراحی شدهاند.
آنها مجموعهای از گزینههای اتصال و پیکربندی را ارائه میدهند که به کاربران راهحلهای بیسیم انعطافپذیر و قابل اعتمادی میدهد. این ماژولها با پروتکلهای مختلفی از جمله Zigbee، ۸۰۲.۱۵.۴، Wi-Fi و شبکههای سلولی سازگار هستند.
ویژگیهای کلیدی ماژولهای XBee
– پشتیبانی از پروتکل: ماژولهای XBee چندمنظوره هستند و از پروتکلهای متعددی پشتیبانی میکنند. رایجترین ماژولهای XBee از Zigbee استفاده میکنند که بر اساس استاندارد IEEE 802.15.4 است، اما Digi نسخههایی را ارائه میدهد که از ۸۰۲.۱۱ (Wi-Fi) و شبکههای LTE پشتیبانی میکنند، به این ترتیب ماژولهای XBee میتوانند نیازهای متنوعی از کاربردها را برآورده کنند.
– توپولوژیهای ارتباطی: ماژولهای XBee از توپولوژیهای مختلف شبکه پشتیبانی میکنند، از جمله:
– نقطه به نقطه: ارتباط مستقیم بین دو دستگاه XBee.
– نقطه به چند نقطه: یک دستگاه XBee با چندین دستگاه ارتباط برقرار میکند.
– شبکه مش: با استفاده از Zigbee، ماژولهای XBee میتوانند شبکههای مش قوی و خودترمیمپذیر ایجاد کنند که با اجازه دادن به ارسال پیامها از طریق چندین گره، پوشش را افزایش میدهند.
– آدرسدهی منبع و مقصد: ماژولهای XBee قابلیتهای پیشرفته آدرسدهی را ارائه میدهند که امکان ارتباطات unicast و broadcast را فراهم میکند. این بدان معناست که میتوانید یک دستگاه خاص در شبکه را هدف قرار دهید یا پیامها را به چندین دستگاه بهطور همزمان پخش کنید، که آنها را برای طراحیهای پیچیده شبکه انعطافپذیر میکند.
– مدولاسیون DSSS: ماژولهای XBee از مدولاسیون Direct Sequence Spread Spectrum (DSSS) استفاده میکنند. DSSS به بهبود مقاومت در برابر تداخل کمک میکند، انتقال دادههای امن را فراهم میآورد و تصادف بستهها را به حداقل میرساند.
– ورودی/خروجی و ADC داخلی: علاوه بر ارتباط بیسیم، بسیاری از ماژولهای XBee دارای قابلیتهای ورودی/خروجی دیجیتال و آنالوگ داخلی هستند. با ADCهای ۱۰ بیتی، پینهای دیجیتال I/O و خروجیهای PWM، ماژولهای XBee میتوانند بهطور مستقیم با حسگرها، عملگرها و میکروکنترلرها ارتباط برقرار کنند و نیاز به سختافزار اضافی را کاهش دهند.
– رابط سری و SPI: ماژولهای XBee عمدتاً از UART برای ارتباط سری استفاده میکنند که ادغام آسانی با میکروکنترلرها و کامپیوترها فراهم میکند. برخی مدلها، مانند XBee S2C، همچنین از SPI پشتیبانی میکنند که یک رابط ارتباطی سریعتر مناسب برای برنامههایی که نیاز به تبادل داده با سرعت بالا دارند، فراهم میآورد.
– دامنه طولانی و گزینههای قدرت: با دامنهای که میتواند از ۱۰ تا ۱۰۰ متر در داخل ساختمان و بیش از یک کیلومتر در خارج از ساختمان (در شرایط دید مستقیم) گسترش یابد، ماژولهای XBee میتوانند برای انتقال کمقدرت یا پرقدرت پیکربندی شوند تا با برنامههای باتریدار یا حساس به قدرت سازگار باشند.
– نرمافزار پیکربندی XCTU :Digi نرمافزار XCTU را بهعنوان یک ابزار رایگان برای پیکربندی و آزمایش ماژولهای XBee ارائه میدهد. با XCTU، کاربران میتوانند پارامترهای شبکه را تنظیم کنند، آدرسها را اختصاص دهند و فعالیت شبکه را بهصورت زنده نظارت کنند و فرآیند راهاندازی و عیبیابی را سادهتر کنند.
پیناوت ماژول XBee
ماژول XBee دارای ۲۰ پین است که هر کدام عملکردهای خاصی را برای پشتیبانی از ویژگیهای مختلف ورودی/خروجی، ارتباط و کنترل ارائه میدهند.
| Pin No | Name | Direction | Description |
|---|---|---|---|
| ۱ | VCC | – | Power Supply |
| ۲ | DOUT | Output | UART Data Out |
| ۳ | DIN/CONFIG | Input | UART Data In |
| ۴ | DO8 | Output | Digital Output 8 |
| ۵ | RESET | Input | Module Reset (reset pulse >= 200 ns) |
| ۶ | PWM0/RSSI | Output | PWM Output 0 / Received Signal Strength Indicator |
| ۷ | PWM1 | Output | PWM Output 1 |
| ۸ | Reserved | – | Do not connect |
| ۹ | DTR/SLEEP_RQ/DI8 | Input | Sleep Control or Digital Input 8 |
| ۱۰ | GND | – | Ground |
| ۱۱ | AD4/DIO4 | Input / Output | Analog Input 4 / Digital I/O 4 |
| ۱۲ | CTS/DIO7 | Input / Output | Clear-To-Send Flow Control or Digital I/O 7 |
| ۱۳ | ON/SLEEP | Output | Module Status Indicator, High = ON, Low = SLEEP |
| ۱۴ | VREF | Input | Reference Voltage for ADC |
| ۱۵ | ASSOCIATE/AD5/DIO5 | Input / Output | Association Indicator, Analog Input 5 or Digital I/O 5 |
| ۱۶ | RTS/AD6/DIO6 | Input / Output | Request-To-Send Flow Control, Analog Input 6 or Digital I/O 6 |
| ۱۷ | AD3/DIO3 | Input / Output | Analog Input 3 or Digital I/O 3 |
| ۱۸ | AD2/DIO2 | Input / Output | Analog Input 2 or Digital I/O 2 |
| ۱۹ | AD1/DIO1 | Input / Output | Analog Input 1 or Digital I/O 1 |
| ۲۰ | AD0/DIO0 | Input / Output | Analog Input 0 or Digital I/O 0 |
بورد آداپتور USB XBee
یکی از معایب ماژول Zigbee عدم سازگاری آن با بوردهای بردبوردی است؛ نقشه پینهای آن متناسب با بوردهای بردبوردی معمولی نیست. علاوه بر این، بیشتر ماژولهای Zigbee در محدوده ولتاژ ۲.۰ ولت تا ۳.۶ ولت کار میکنند و ۳.۳ ولت بهعنوان ولتاژ استاندارد شناخته میشود. این موضوع باعث میشود که آنها با میکروکنترلرهای ۵ ولتی یا هر میکروکنترلری که پینهای دیجیتال با ولتاژ بالاتر دارد، سازگار نباشند.
برای غلبه بر این مشکل، به یک آداپتور Zigbee نیاز است. یکی از گزینههای محبوب، آداپتور USB XBee است که یک برد ارتباطی UART است و بهطور خاص برای اتصال XBee طراحی شده است. این آداپتور یک رابط UART و یک رابط USB را فراهم میکند و شامل دکمهها و LEDهای داخلی است که آن را به یک گزینه کاربرپسند برای توسعه و عیبیابی تبدیل میکند.
ویژگیهای کلیدی آداپتور USB XBee
– سازگاری با میکروکنترلرها: این آداپتور با منطق ۳.۳ ولت کار میکند و به همین دلیل با Arduino و سایر میکروکنترلرهای ۳.۳ ولت سازگار است.
– رابط USB: این آداپتور با یک پورت USB مجهز شده است که امکان ارتباط مستقیم با کامپیوتر را فراهم کرده و تنظیمات و آزمایشها را با استفاده از دستورات AT امکانپذیر میسازد.
– آزمایش و عیبیابی: این آداپتور شامل دکمهها و LEDهایی است که آزمایش آسان ماژولهای XBee را تسهیل میکنند.
استفاده از ماژول XBee با بورد آداپتور XBee
برای استفاده از ماژول Zigbee، ابتدا آن را بهدقت در بورد آداپتور وارد کنید و اطمینان حاصل کنید که تراز و جهت آن درست است.
ماژول باید بهصورت ایمن روی آداپتور قرار گیرد، بنابراین مطمئن شوید که پینها بهطور صحیح تراز شدهاند تا از بروز مشکلات اتصال جلوگیری شود.
راهاندازی ماژول XBee با استفاده از نرمافزار X-CTU
Digi International یک ابزار نرمافزاری به نام X-CTU برای پیکربندی ماژولهای XBee در حالتهای عملیاتی یا نوع عملکرد دستگاه ارائه میدهد. با استفاده از این ابزار، میتوانیم دستگاه را پیکربندی کرده، عملکرد آن را آزمایش کنیم و فریمور آن را بهروزرسانی کنیم.
در اینجا ابتدا باید نرمافزار X-CTU را دانلود کرده و یک مرور کوتاه بر روی راهنمای کاربری X-CTU داشته باشیم.
برای پیکربندی دو ماژول Zigbee—یکی بهعنوان coordinator و دیگری بهعنوان دستگاه انتهایی—با استفاده از نرمافزار X-CTU، مراحل زیر را دنبال کنید.
پیکربندی Coordinator
۱. ماژول ZigBee را متصل کنید: ماژول ZigBee را با استفاده از یک کابل USB به کامپیوتر خود وصل کرده و پورت COM اختصاص داده شده به آن را یادداشت کنید.
۲. نرمافزار X-CTU را باز کنید: نرمافزار X-CTU را اجرا کرده و سپس روی گزینه “Add Device” کلیک کنید.
۱. انتخاب پورت COM: پورت COM مناسب برای ماژول ZigBee متصل شده خود را انتخاب کنید و روی “Next” کلیک کنید. لازم نیست تنظیمات اضافی را تغییر دهید، بنابراین روی “Finish” کلیک کنید تا جستجو برای ماژول آغاز شود.
۲. اضافه کردن دستگاه شناسایی شده: وقتی X-CTU ماژول شما را شناسایی کرد، آن را انتخاب کرده و روی “Add Selected Device” کلیک کنید. این عمل صفحه پیکربندی ماژول را باز میکند.
۳. بهروزرسانی فریمور (در صورت درخواست): اگر X-CTU پیشنهاد بهروزرسانی فریمور را داد، ادامه دهید و بهروزرسانی را انجام دهید تا اطمینان حاصل کنید که ماژول شما از آخرین نسخه استفاده میکند.
تنظیم دستگاه بهعنوان Coordinator:
در بخش تنظیمات رادیویی (Radio Settings)، PAN ID را به یک شناسه منحصر به فرد مانند ۱۰۰۰۱ تغییر دهید. این شناسه باید در تمامی دستگاهها در شبکه یکسان باشد. سپس به سمت پایین پیمایش کرده و نقش دستگاه (Device Role) را به Coordinator تنظیم کنید.
تنظیمات را ذخیره کنید:
بر روی “Write” کلیک کنید تا تغییرات را در ماژول ذخیره کنید. اکنون Coordinator شما پیکربندی شده است.
پیکربندی دستگاه انتهایی (End Device)
۱. ماژول ZigBee دوم را متصل کنید: ماژول ZigBee دوم را به کامپیوتر خود وارد کنید و مراحل مشابه را دنبال کنید.
۲. انتخاب پورت COM: پس از اتصال، پورت COM مناسب را در X-CTU انتخاب کرده، روی “Next” کلیک کنید و سپس “Finish” را برای شروع شناسایی دستگاه انتخاب کنید.
۳. اضافه کردن دستگاه شناسایی شده: پس از پیدا شدن دستگاه، آن را انتخاب کرده و به نرمافزار اضافه کنید. اگر بهروزرسانی فریمور درخواست شد، بهروزرسانی را انجام دهید.
۴. تنظیم دستگاه بهعنوان End Device:
در تنظیمات رادیویی (Radio Settings)، PAN ID را طوری تنظیم کنید که با PAN ID تنظیم شده در Coordinator مطابقت داشته باشد (برای مثال، ۱۰۰۰۱).
سپس به سمت پایین پیمایش کرده و نقش دستگاه (Device Role) را به End Device به جای Coordinator تغییر دهید.
تنظیمات را ذخیره کنید:
بر روی “Write” کلیک کنید تا این تنظیمات را در ماژول ذخیره کنید. اکنون دستگاه انتهایی شما پیکربندی شده است.
پس از اتمام این مراحل، ماژولهای ZigBee شما تنظیم شدهاند، بهطوری که یکی بهعنوان coordinator و دیگری بهعنوان دستگاه انتهایی عمل میکند و آماده برقراری ارتباط هستند.
ارتباط ماژول XBee با آردوینو
اکنون ما ماژول XBee را با برد آردوینو ارتباط دهی خواهیم کرد. اساساً ما ماژول XBee را به آردوینو متصل میکنیم تا بتوانیم ارتباط بیسیم ZigBee را بین coordinator (گیرنده) و دستگاه انتهایی (فرستنده) برقرار کنیم.
در اینجا نمودار اتصال بین آردوینو و آداپتور XBee آورده شده است.
VCC و GND ماژول XBee را به ترتیب به ۵V و GND آردوینو متصل کنید. بهطور مشابه، Tx و Rx آداپتور XBee را به ترتیب به D11 و D10 آردوینو متصل کنید.
شما میتوانید برد آداپتور XBee را بهطور مستقیم با استفاده از سیمهای جامپر متصل کنید. از آنجا که به هر دو مدار فرستنده و گیرنده نیاز داریم، باید همین اتصال را برای هر جفت برد انجام دهیم.
این قسمت آخرین مرحله تنظیم سختافزاری است تا با دمو ارتباط ZigBee آردوینو شروع کنیم.
کد منبع/برنامه برای ارتباط ZigBee آردوینو
پس از راهاندازی بخش سختافزاری، میتوانیم به جفت کد آردوینو نگاهی بیندازیم که میتواند ارتباط ZigBee را بین دو برد آردوینو با استفاده از ماژول XBee برقرار کند.
کد فرستنده (دستگاه انتهایی)
این کد ارتباط سریالی بین آردوینو و ماژول XBee را راهاندازی میکند. سپس بهطور مداوم یک عدد تصادفی بین ۰ و ۲۵۵ تولید میکند. سپس آن را به ماژول XBee ارسال میکند و هر عدد را با علامت (< و >) احاطه میکند. همچنین عدد ارسالشده را در مانیتور سریال برای اهداف اشکالزدایی نمایش میدهد.
|
۱ ۲ ۳ ۴ ۵ ۶ ۷ ۸ ۹ ۱۰ ۱۱ ۱۲ ۱۳ ۱۴ ۱۵ ۱۶ ۱۷ ۱۸ ۱۹ ۲۰ ۲۱ |
#include // Include SoftwareSerial library for communication SoftwareSerial XBee(۱۰, ۱۱); // Define SoftwareSerial pins: RX = 10, TX = 11 void setup() { Serial.begin(۹۶۰۰); // Start communication with the PC for debugging XBee.begin(۹۶۰۰); // Start communication with the XBee module randomSeed(analogRead(۰)); // Seed the random number generator for varied results } void loop() { int randomNumber = random(۲۵۶); // Generate a random number between 0 and 255 XBee.print('<'); // Start of transmission marker XBee.print(randomNumber); // Send the randomly generated number XBee.println('>'); // End of transmission marker Serial.print("Sent number: "); // Debugging output to Serial Monitor Serial.println(randomNumber); delay(۱۰۰۰); // Delay between sends to avoid flooding } |
کد گیرنده (دستگاه Coordinator)
این کد پیامها را از ماژول XBee خوانده و پردازش میکند و دادهها را بین نشانگرهای < و >捕 میکند. هنگامی که یک پیام کامل دریافت میشود، آن را به عدد صحیح تبدیل کرده و در مانیتور سریال برای اشکالزدایی نمایش میدهد.
|
۱ ۲ ۳ ۴ ۵ ۶ ۷ ۸ ۹ ۱۰ ۱۱ ۱۲ ۱۳ ۱۴ ۱۵ ۱۶ ۱۷ ۱۸ ۱۹ ۲۰ ۲۱ ۲۲ ۲۳ ۲۴ ۲۵ ۲۶ ۲۷ ۲۸ ۲۹ ۳۰ ۳۱ ۳۲ ۳۳ ۳۴ ۳۵ ۳۶ ۳۷ ۳۸ ۳۹ |
#include // Include SoftwareSerial library for communication SoftwareSerial XBee(۱۰, ۱۱); // Define SoftwareSerial pins: RX = 10, TX = 11 bool started = false; // True when start marker is detected bool ended = false; // True when end marker is detected char incomingByte; // Storage for each byte read char msg[۴]; // Array to assemble the incoming message byte index = ۰; // Current position in the array void setup() { Serial.begin(۹۶۰۰); // Start communication with the PC for debugging XBee.begin(۹۶۰۰); // Start communication with the XBee module } void loop() { while (XBee.available() > ۰) { // Check if there is data available from the XBee incomingByte = XBee.read(); // Read the incoming byte if (incomingByte == '<') { // Detect start of the message started = true; index = 0; msg[index] = '\0'; // Clear the buffer } else if (incomingByte == '>') { // Detect end of the message ended = true; break; // Stop reading, process the message } else if (started && index < ۳) { // Store the byte in msg array if message has started msg[index] = incomingByte; index++; msg[index] = '\۰'; // Null terminate the string } } if (started && ended) { // If a complete message was received, process it int value = atoi(msg); // Convert the buffer to an integer Serial.print("Received number: "); // Debugging output to Serial Monitor Serial.println(value); started = false; // Reset for the next message ended = false; } } |
هر دو این کدها را به برد آردوینو مربوطه بارگذاری کنید. این به معنی بارگذاری کد برای دستگاه Coordinator و دستگاه انتهایی است.
پس از اتمام بارگذاری، مانیتور سریال را باز کنید.
همانطور که مشاهده میکنید، هر پیامی که توسط فرستنده ارسال میشود، همان پیام توسط دریافتکننده دریافت میشود.
این واقعاً شگفتانگیز است، درست است؟ بنابراین ما با موفقیت ارتباط بین دو دستگاه ZigBee را برقرار کردهایم.
ارسال دادههای حسگر از طریق ارتباط ZigBee
در این مثال، ما دادههای رطوبت و دما از حسگر DHT11 را بهصورت بیسیم از فرستنده (دستگاه انتهایی) به دریافتکننده (هماهنگکننده) ارسال خواهیم کرد. ابتدا سختافزار را تنظیم خواهیم کرد. سپس کدهای فرستنده و دریافتکننده را برای هر دو برد Arduino اصلاح خواهیم کرد.
تنظیم و اتصال سختافزار
اکنون بگذارید حسگر DHT11 را به سمت فرستنده وصل کنیم. پینهای VCC، GND و خروجی حسگر DHT11 را به ترتیب به ۳.۳ ولت، GND و D2 برد Arduino متصل کنید.
در سمت دریافتکننده، نمایشگر LCD 16×۲ با پروتکل I2C را متصل کنید که دادههای حسگر DHT11 دریافتی بهصورت بیسیم را چاپ خواهد کرد.
شما میتوانید از سیمهای جامپر برای اتصال حسگر DHT11 و نمایشگر LCD استفاده کنید، همانطور که در اینجا تنظیم سختافزار را مشاهده میکنید.
کد فرستنده (دستگاه انتهایی)
این کد دادههای دما و رطوبت را از یک حسگر DHT11 خوانده و مقادیر را به یک ماژول XBee ارسال میکند، و آنها را داخل نشانههای < و > برای شناسایی آسان محصور میکند. همچنین، دادهها برای اشکالزدایی در مانیتور سریال نمایش داده میشوند.
|
۱ ۲ ۳ ۴ ۵ ۶ ۷ ۸ ۹ ۱۰ ۱۱ ۱۲ ۱۳ ۱۴ ۱۵ ۱۶ ۱۷ ۱۸ ۱۹ ۲۰ ۲۱ ۲۲ ۲۳ ۲۴ ۲۵ ۲۶ ۲۷ ۲۸ ۲۹ ۳۰ ۳۱ ۳۲ ۳۳ ۳۴ |
#include #include SoftwareSerial XBee(۱۰, ۱۱); // Define SoftwareSerial pins: RX = 10, TX = 11 #define DHTPIN 2 // Define pin connected to the DHT sensor #define DHTTYPE DHT11 // Define the type of DHT sensor DHT dht(DHTPIN, DHTTYPE); // Initialize DHT sensor void setup() { Serial.begin(۹۶۰۰); // Start communication with the PC for debugging XBee.begin(۹۶۰۰); // Start communication with the XBee module dht.begin(); // Initialize the DHT11 sensor } void loop() { float h = dht.readHumidity(); // Read humidity float t = dht.readTemperature(); // Read temperature // Check if any reads failed and exit early (to try again). if (isnan(h) || isnan(t)) { Serial.println("Failed to read from DHT sensor!"); return; } XBee.print("<T:"); // Start of transmission marker with temp label XBee.print(t); // Send the temperature XBee.print(",H:"); // Separator with humidity label XBee.print(h); // Send the humidity XBee.println(">"); // End of transmission marker Serial.print("Sent Temp: "); // Debugging output to Serial Monitor Serial.print(t); Serial.print("C, Hum: "); Serial.print(h); Serial.println("%"); delay(۲۰۰۰); // Delay between sends to avoid flooding } |
کد دریافتکننده (دستگاه هماهنگکننده)
این کد دادههای دما و رطوبت ارسالشده از یک ماژول XBee را خوانده، این مقادیر را استخراج کرده و بر روی یک صفحه نمایش LCD 16×۲ با پروتکل I2C نمایش میدهد، در حالی که آنها را در مانیتور سریال نیز برای اشکالزدایی چاپ میکند.
|
۱ ۲ ۳ ۴ ۵ ۶ ۷ ۸ ۹ ۱۰ ۱۱ ۱۲ ۱۳ ۱۴ ۱۵ ۱۶ ۱۷ ۱۸ ۱۹ ۲۰ ۲۱ ۲۲ ۲۳ ۲۴ ۲۵ ۲۶ ۲۷ ۲۸ ۲۹ ۳۰ ۳۱ ۳۲ ۳۳ ۳۴ ۳۵ ۳۶ ۳۷ ۳۸ ۳۹ ۴۰ ۴۱ ۴۲ ۴۳ ۴۴ ۴۵ ۴۶ ۴۷ ۴۸ ۴۹ ۵۰ ۵۱ ۵۲ ۵۳ ۵۴ ۵۵ ۵۶ ۵۷ ۵۸ ۵۹ ۶۰ ۶۱ ۶۲ ۶۳ ۶۴ ۶۵ ۶۶ ۶۷ ۶۸ ۶۹ ۷۰ |
#include #include SoftwareSerial XBee(۱۰, ۱۱); // Define SoftwareSerial pins: RX = 10, TX = 11 LiquidCrystal_I2C lcd(0x27, ۱۶, ۲); // Set the LCD address to 0x27 for a 16 chars and 2 line display bool started = false; // True when start marker is detected bool ended = false; // True when end marker is detected char incomingByte; // Storage for each byte read char msg[۳۲]; // Array to assemble the incoming message byte index = ۰; // Current position in the array void setup() { Serial.begin(۹۶۰۰); // Start communication with the PC for debugging XBee.begin(۹۶۰۰); // Start communication with the XBee module lcd.init(); // Initialize the LCD lcd.backlight(); // Turn on the backlight } void loop() { while (XBee.available() > ۰) { incomingByte = XBee.read(); // Read the incoming byte if (incomingByte == '<') { started = true; index = ۰; msg[index] = '\۰'; // Clear the buffer } else if (incomingByte == '>') { ended = true; break; } else if (started && index < ۳۱) { msg[index] = incomingByte; index++; msg[index] = '\۰'; } } if (started && ended) { Serial.print("Raw Msg: "); // Print raw message for debugging Serial.println(msg); // Extract temperature and humidity manually char* tempPtr = strstr(msg, "T:"); // Find the start of the temperature string char* humPtr = strstr(msg, "H:"); // Find the start of the humidity string if (tempPtr && humPtr) { float temp = atof(tempPtr + ۲); float hum = atof(humPtr + ۲); // Print to LCD lcd.setCursor(۰, ۰); lcd.print("Temp: "); lcd.print(temp); lcd.print(" C"); lcd.setCursor(۰, ۱); lcd.print("Hum: "); lcd.print(hum); lcd.print(" %"); // Print to Serial Monitor for debugging Serial.print("Received Temp: "); Serial.print(temp); Serial.print(" C, Humi: "); Serial.print(hum); Serial.println(" %"); } else { Serial.println("Failed to parse temp and humidity."); } started = false; // Reset for the next message ended = false; } } |
کد را دوباره به هر دو دستگاه فرستنده و دریافتکننده آپلود کنید. سپس مانیتور سریال را باز کنید.
مانیتور سریال بهطور مداوم مقادیر دما و رطوبت را نشان خواهد داد.
بهطور مشابه، LCD نیز قرائتهای دما و رطوبت را بهصورت بیسیم نمایش میدهد.
این مجدداً عالی است. ما میتوانیم از این تکنیک چندین بار برای ارسال هر نوع داده حسگری بهصورت بیسیم از طریق پروتکل ZigBee با استفاده از Arduino و ماژول XBee استفاده کنیم. شما میتوانید کد MicroPython را برای برقراری ارتباط بیسیم ZigBee با Raspberry Pi Pico و ماژول XBee بنویسید.
” لطفا سوالات خود را با ذکر عنوان مقاله ارسال کنید. تیم خانه رباتیک ایران در کنار شماست. “
آماده سازی فرم
لطفا صبر کنید
فرم ساز آسان
شعبه ساری: خیابان مهدیه، نبش بهمن شرقی
شعبه بابل: پل کارگر به سمت کشوری، روبروی ماکروویو، جنب فروشگاه جانبو
شعبه قائم شهر: خیابان ساری، بین یاس ۲۰ و ۲۲





















