fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa en sv fr de de fa fa fa fa ar fa ar fa ar fa ar fa ar fa ar fa ar fa fa fa ar en fa fa fa fa fa fa fa fa fa fa fa en fa en fa fa fa fa en fa en es fa fa fa en fa en fa en fa fa fa fa fa fa fa fa fa en en fa en fa en fa fa en fa fa fa en en fa en pt fa fr en fa de en fa fr en fa en fa fa en fa fa fa en fa en en fa fa fa fa fa fa en fa en fa en en fa pt es en en en en fa en en fa en fa en fa en ja fa en en fa fa fa fa fa en fa en fa en en fa en fa en en fa fa fa fa fa fa fa fa fa fa fa fa es de fa fa fa fa fa fa fa fa fa fa fa fa fa ar en ar fa fa fa fa ar en fa fa fa en en fa ar fa en fa fa fa pt en fa ar fa en fa fa fa zh en fa ar fa fa en fa fa fa hbs_lat en fa ar fa fa fa en fa fa fa hbs_lat en fa ar fa fa fa en fa fa fa en en fa ar fa fa fa en fa fa fa en en fa ar fa fa en fa fa fa en en fa ar fa fa fa en fa fa fa en en fa ar fa en fa fa fa en en fa ar fa fa fa fa en fa fa fa en en ar ar fa en fa fa fa en en fa ar ar fa fa en fa fa fa en en ar ar fa fa en fa fa fa de en fa ar ur fa en en fa en fa fa fa de en fa ar fa en fa fa fa en en fa ar fa fa en fa en fa fa fa de en fa fa fa fa fa fa fa azb fa fa fa ar fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa en
این مطلب قسمت چهاردهم از آموزش جامع آردوینو (مبتدی و پیشرفته) است. در این قسمت قصد داریم به معرفی ماژول‌های بی‌سیم یا وایرلس بپردازیم. با اضافه کردن یک ماژول وایرلس به پروژه‌تان، می‌توانید کاربردهای آن را به کلی دگرگون کنید. ماژول‌های وایرلس بهترین ابزار برای تبدیل یک وسیله یا سنسور معمولی به یک پروژه IoT یا اینترنت اشیا هستند. تصور کنید که با استفاده از گوشی هوشمندتان بتوانید وسیله‌های خانه مانند روشنایی، درب پارکینگ، پرده‌ها، کولر و هر چیز دیگری را کنترل کنید. یا مثلا فرض کنید که بخواهید دما و رطوبت گلهای خانه را زمانی که در محل دیگری هستید نظارت کرده و در صورت لزوم آنها را آبیاری کنید. همه این کارها که پروژه‌هایی از جنس اینترنت اشیا هستند، نیاز به وسیله‌ای برای ارتباط دارند که بهترین گزینه، یک ماژول وایرلس خواهد بود. در ماژول‌های وایرلس مانند خود ارتباطات بی‌سیم، تنوع زیادی وجود دارد و این موضوع دستتان را برای انتخاب یک محصول متناسب با خواسته‌تان باز می‌گذارد. در پایان این آموزش با تعدادی از ماژول‌های پرکاربرد وایرلس آشنا شده و هر کدام را راه‌اندازی خواهید کرد. با ما همراه باشید!
برد آردوینو UNO و کابل رابط
هرگاه صحبت از وایرلس باشد، پای طیف بسیار وسیعی از وسیله‌های الکترونیکی به میان می‌آید. در یک تعریف کلی وایرلس به ارتباطی گفته می‌شود که در آن از سیم به عنوان واسط اطلاعات استفاده نشده باشد! این تعریف خیلی بدیهی است و به همین خاطر ارتباط وایرلس تا این حد گسترده است. تقریبا در تمام روش‌های ارتباطات بی‌سیم از امواج الکترومغناطیسی استفاده می‌شود. این امواج در اثر تغییرات میدان الکترومغناطیسی در فرستنده ایجاد می‌شود. ویژگی اصلی این نوع از امواج عدم نیاز به محیط مادی برای انتشار است. سرعت تغییرات این میدان، فرکانس موج الکترومغناطیسی را تعیین می‌کند. در تئوری، این فرکانس می‌تواند هر مقداری داشته باشد. امواج الکترومغناطیسی بر اساس فرکانس‌شان به چند دسته کلی تقسیم شده‌اند: رادیویی، مایکروویو، فروسرخ، مرئی، فرابنفش، اشعه X و اشعه گاما (به ترتیب از فرکانس کم به زیاد).
در این بین امواج رادیویی یا RF فرکانس‌های 30Hz تا 300GHz را پوشش می‌دهند و به این ترتیب می‌توان گفت تقریبا تمام روش‌های ارتباطی بی‌سیم در این محدوده قرار می‌گیرند. به همین دلیل معمولا در ارتباطات بی‌سیم از امواج رادیویی صحبت شده و از مابقی امواج الکترومغناطیسی چشم‌پوشی می‌شود. بر خلاف چیزی که شاید در اول تصور کرده باشید، امواج رادیویی مختص "دستگاه رادیو" نیست و سایر ارتباطات مانند شبکه‌های تلویزیونی، اینترنت بی‌سیم، تلفن همراه و غیره نیز از این امواج استفاده می‌کنند. هرچه فرکانس موج رادیویی بیشتر باشد، انرژی بیشتر اما طول موج و قدرت نفوذ کمتری دارد. به همین دلیل معمولا استفاده از فرکانس‌های بالا برای کاربردهای نزدیک و فرکانس‌های پائین برای مسافت‌های دور مناسب‌تر هستند (البته نه همیشه).
با در اختیار داشتن طیف گسترده امواج رادیویی و نیز روش‌های مختلف ارسال و دریافت اطلاعات، پروتکل‌های بسیار متنوعی برای ایجاد یک ارتباط وایرلس معرفی شده است. WiFi، GPS، GSM، RFID، VHF و … هر کدام از پروتکل مخصوص خود برای برقراری ارتباط بهره می‌برند. بحث فنی در مورد نحوه ایجاد و دریافت امواج رادیویی و نیز نحوه ارسال و دریافت اطلاعات از این طریق، کاملا یک بحث تخصصی است و در اینجا قصد نداریم به آن بپردازیم.
اولین ماژولی که برای ارتباط وای‌فای به ذهن می‌آید، یک قطعه معروف به نام ESP8266 ساخت شرکت چینی Espressif است. وای‌فای پروتکل خاصی از وایرلس است که امکان دسترسی به اینترنت و برقراری ارتباط با روترهای (Router) وای‌فای را فراهم می‌کند. این پروتکل برای انجام پروژه‌های IoT – چه مواردی که قصد تبادل اطلاعات در شبکه اینترنت را دارید و چه مواردی که می‌خواهید یک شبکه محلی از سنسورها و ماژول‌ها داشته باشید- بسیار مناسب است. تنوع زیادی از ماژول‌های وای‌فای وجود دارد و قسمت عمده آنها از ماژول ESP8266 در درون خود استفاده کرده‌اند.
اولین و ساده‌ترین عضو خانواده ESP، قطعه کوچکی به نام ESP-01 است. این قطعه قابلیت‌های اولیه اتصال و تبادل اطلاعات در شبکه وای‌فای را در اختیار می‌گذارد. این ماژول از پروتکل UART برای ارتباط با میکروکنترلر استفاده می‌کند. تراشه مرکزی این قطعه (و تقریبا اکثر خانواده ESP) یک IC از نوع ESP8266 است که در حالت پیش‌فرض دارای سرعت پردازشی 80MHz ، حافظه عملیاتی 32KB و 80KB حافظه برای داده‌ها است. این مشخصات نشان می‌دهد که این قطعه بسیار سریعی نسبت به آردوینو است. در ارتباطات وای‌فای سرعت تبادل اطلاعات بسیار بالاست و به همین دلیل ماژول‌های آن هم باید سریع باشند. نکته با اهمیت دیگر این است که ماژول ESP8266 از دو پروتکل مهم در ارتباطات شبکه‌ای یعنی TCP و UDP پشتیبانی می‌کند. در TCP به همراه داده‌های اصلی، داده‌هایی نیز جهت اطمینان از صحت ارسال و دریافت اطلاعات توسط فرستنده و گیرنده مبادله می‌شود. این کار از بروز خطا در اطلاعات جلوگیری می‌کند و در عین حال سرعت انتقال اطلاعات را کاهش می‌دهد. UDP با کنار گذاشتن داده‌های فرعی، سرعت انتقال را بالا برده است البته با پذیرفتن بروز خطا! این روش بیشتر در ارسال داده‌های بلادرنگ (Realtime) مثل پخش تصویری زنده کاربرد دارد.
در این قسمت می‌خواهیم ماژول ESP-01 را به صورت ساده راه‌اندازی کنیم. این ماژول ٨ پایه به صورت زیر دارد:
ابتدا ماژول را به صورت زیر به آردوینو وصل کنید:
نکته قابل توجه در اتصالات ESP-01 این است که تغذیه این ماژول با ولتاژ 3.3V انجام می‌شود. علاوه بر آن سایر پین‌های داده نیز با همین ولتاژ کار می‌کنند و تحمل ولتاژ 5V را ندارند. بنابراین نمی‌توانید آنها را مستقیما به پین‌های آردوینو وصل کنید؛ چون که ولتاژ High آردوینو (البته بیشتر آردوینوها!) 5V است. به همین دلیل از سه مقاومت برای تقسیم ولتاژ استفاده کرده‌ایم تا ولتاژ 5V آردوینو به 3.3V تبدیل شود. این مشکل برای پین Tx ماژول وجود ندارد! دلیل این است که همانطور که گفتیم ولتاژ پین‌های ماژول 3.3V است و این مقدار از حداقل مقدار ولتاژ برای اینکه آردوینو آن را High تلقی کند (یعنی 3V) بیشتر است. نکته دیگر این است که دو پین Reset و CH-EN باید Pull-up شوند تا ماژول شروع به کار کند. دقت کنید که ماژول ESP مصرف بالایی دارد و برای تامین برق آن بهتر است از یک منبع تغذیه خارجی استفاده کنید تا آسیبی به برد آردوینو نرسد.
برای کار با ماژول ESP دو روش وجود دارد: استفاده از دستورهای AT؛ استفاده از کتابخانه ESP8266. در اینجا نحوه استفاده از دستورهای AT را توضیح می‌دهیم و روش دوم را در قسمت راه‌اندازی برد NodeMCU بررسی خواهیم کرد. AT Command ها مجموعه‌ای از دستورهای استاندارد هستند که برای ارتباطات مخابراتی طراحی و تعریف شده‌اند. از طریق این دستورها می‌توانید مستقیما و بدون هیچ واسطه‌ای با ماژول حرف بزنید. تعداد این دستورها بسیار زیاد است. در اینجا ما از چند دستور مهم AT استفاده کرده‌ایم. برای اطلاع از سایر دستورهای AT می‌توانید دفترچه راهنمای آن را مطالعه کنید.
کد زیر را در آردوینو آپلود کنید:
در مورد این برنامه چند نکته قابل ذکر وجود دارد. اول اینکه بر روی برد آردوینو تنها یک رابط سریال UART وجود دارد. در صورتی که بخواهید از سریال برای نمایش و دریافت اطلاعات در سریال مانیتور استفاده کنیم، نمی‌توانید همان پورت را به وسیله‌ای که از پروتکل UART استفاده می‌کند وصل کنید. برای حل این مشکل می‌توانید از کتابخانهSoftwareSerial.hاستفاده کنید. این کتابخانه این امکان را به شما می‌دهد تا به صورت مجازی از پایه‌های دیجیتال دیگر برای ارتباط سریال استفاده کنید. در ابتدای این برنامه یک رابط سریال نرم‌افزاری با استفاده از پایه‌های ٢ و ٣ دیجیتال ایجاد کرده و ماژول را به این رابط وصل می‌کنیم:
#include   #define RX 2 #define TX 3 SoftwareSerial esp8266(RX, TX);
در ادامه، برنامه منتظر می‌ماند تا شما دستوری را از طریق سریال وارد کنید. آردوینو این دستور را به ماژول وایرلس می‌فرستد و سپس منتظر می‌ماند تا پاسخی از طرف ماژول فرستاده شود؛ در صورت دریافت پاسخ، نتیجه از طریق سریال نمایش داده می‌شود. دستورهای مورد نظر، همان فرمان‌های AT هستند. در این قسمت از دستورreadStringUntilاستفاده شده است. این دستور داده‌های دریافتی را به صورت رشته‌ای از کارکترها، تا زمانی که کاراکتر خاصی وارد شود، دریافت می‌کند. کاراکترn\به معنای newline یا خط جدید است که وقتی کلید Enter را فشار می‌دهید ارسال می‌شود. بنابراین برنامه دستورات شما را دریافت کرده و منتظر می‌ماند تا کلید Enter را بزنید.
چند دستور اولیه برای کار با این ماژول به صورت زیر است:
دستور AT : در صورتی که ماژول ESP به درستی به برد وصل شده باشد، پاسخ OK را دریافت خواهید کرد:
دستور AT+GMR: این دستور مشخصات ماژول متصل شده را نمایش می‌دهد:
دستور AT+CWLAP: این دستور لیست دستگاه‌های وای‌فای قابل اتصال در دسترس را به همراه مشخصات هر کدام نشان می‌دهد.
دستور "AT+CWJAP="Network Name","Network Password: با استفاده از این دستور می‌توانید به یک روتر وای‌فای وصل شوید:
بر روی برد NodeMCU یک LED وجود دارد که به پین D4 متصل است. می‌توانید به همان روشی که برای آردوینو برنامه می‌نویسید، برای NodeMCU نیز نوشته و اجرا کنید. توجه کنید که این LED با دستور LOW روشن شده و با دستور HIGH خاموش می‌شود. برای استفاده از NodeMCU ابتدا باید برد esp8266 را در قسمت board manager آردوینو نصب کرده و نیز کتابخانه ESP6288WiFi را اضافه کنید. در نرم‌افزار آردوینو بر روی File→Preferences کلیک کرده و در قسمت Additional Borads Manager آدرس زیر را وارد کرده و OK را بزنید.
سپس از قسمت Tools→Board→Boards Manager عبارت esp8266 را جستجو کرده و کتابخانه مورد نظر را نصب کنید.
سپس کتابخانه ESP8266 را به آردوینو اضافه کنید. این کتابخانه را می‌توانید از لینک زیر نیز دانلود کنید.
در آخر از قسمت Tools→Board برد NodeMCU 1.0 را انتخاب کنید.
حالا برنامه زیر را بر روی برد NodeMCU آپلود کنید. معمولا آپلود کد بر روی این برد کمی بیشتر از آردوینو طول می‌کشد؛ البته نه چندان زیاد، نگران نباشید! بر روی برد NodeMCU یک LED آبی رنگ وجود دارد SanatBazar که زمانی که برنامه را آپلود می‌کنید، شروع به چشمک زدن می‌کند.
کار با این کتابخانه بسیار ساده است، فقط کافیست که توابع مهم آن را بشناسید. برای مثال برنامه زیر ماژول را به روتر وای‌فای تان وصل می‌کند:
#include   /* SanatBazar Arduino Tutorial Series Author: Davood Dorostkar Website: www.sanatbazar.com */ void setup() { delay(1000); Serial.begin(115200); WiFi.begin("SanatBazzar", "********"); Serial.print("Connecting "); while (WiFi.status() != WL_CONNECTED) { Serial.print("."); delay(1000); } Serial.println(); Serial.println("Connected Successfully!"); Serial.print("Module's IP: "); Serial.println(WiFi.localIP()); } void loop() { }
سرعت پیش‌فرض کارخانه برای ماژول وای‌فای معمولا ۱۱۵۲۰۰ است، به همین دلیل سرعت پورت سریال را هم همین مقدار قرار داده‌ایم. قبل از هر چیز برای اتصال به یک روتر باید دستور زیر را وارد کنید.
توجه: حتما نام و رمز عبور روترتان را جایگزین مقادیر بالا کنید.
دستور()WiFi.statusوضعیت اتصال ماژول را به صورت یکی از حالات زیر نشان می‌دهد:
زمانی که ماژول در حال تغییر بین دو حالت مختلف است
زمانی که روتر مورد نظر شما در دسترس نباشد
زمانی که ارتباط وای‌فای به درستی برقرار شود
زمانی که رمز عبور اشتباه وارد شده باشد
زمانی که ارتباطی برقرار نباشد
اگر دستور()WiFi.statusرا اجرا کنید، یکی از اعداد فوق را به شما بر می‌گرداند، اما برای راحتی کار با آن می‌توانید در کدتان از عبارت‌های فوق استفاده کنید و برد NodeMCU معنای آن را می‌فهمد؛ مانند آنچه که در برنامه آمده بود.
در ادامه، برنامه منتظر می‌ماند تا به روتر شما وصل شود. زمانی که اتصال برقرار شد، پیغام موفقیت در اتصال به همراه IP ماژول نشان داده می‌شود. در هر شبکه داخلی، تعدادی وسیله مختلف به یکدیگر متصل هستند. هر کدام از این وسایل با یک آدرس به نام IP شناخته می‌شوند. IP را سرور اصلی به دستگاه‌ها اختصاص می‌دهد. این آدرس معمولا با 192.168.1 شروع می‌شود. پنجره سریال مانیتور را باز کرده و baud rate را روی 115200 قرار دهید. در اینجا ماژول NodeMCU به روتر وصل شده و آدرس 192.168.1.15 را دریافت کرده است.
ارتباط وای‌فای برقرار شد. حالا می‌توانید تمام چیزهایی که دوست دارید (سنسورها، ماژول‌ها و برنامه‌های مختلف) را از طریق شبکه به هم وصل کنید.
برد NodeMCU می‌تواند در دو حالت مختلف کار کند: Station و Station .Access Point دستگاهی است که برای اتصال وای‌فای نیاز به یک وسیله دیگر مثل یک روتر دارد. Access Point دستگاهی است که دستگاه‌های دیگر به آن وصل می‌شوند. معمولا وسیله‌ای که به یک اتصال سیمی وصل شده و شبکه را از طریق وایرلس به اشتراک بگذارد را Access Point می‌گویند. در صورتی که این دستگاه از طریق سیم به جایی وصل نشده باشد و کل ارتباطات به صورت بی‌سیم باشد، به آن Soft Access Point یا Soft AP می‌گویند.
NodeMCU می‌تواند هر کدام از نقش‌های Station یا Soft AP را داشته باشد. تا اینجا باید متوجه شده باشید که برنامه‌ قبل در حالت Station کار می‌کرد. در اینجا نشان می‌دهیم که چطور NodeMCU را به یک Soft AP تبدیل می‌کنیم. کد زیر را در برنامه آپلود کنید:
/* SanatBazar Arduino Tutorial Series Author: Davood Dorostkar Website: www.sanatbazar.com */ #include   String networkName = "NodeMCU"; String networkPassword = "12345678"; void setup() { Serial.begin(115200); Serial.println(); Serial.print("Configuring WiFi access point..."); if (WiFi.softAP(networkName, networkPassword) == true) { IPAddress softAP = WiFi.softAPIP(); Serial.println("Soft AP created successfully!"); Serial.println("You can connect to the network using: "); Serial.println("network: " + networkName); Serial.println("Password: " + networkPassword); Serial.println("Host IP Address is: "); Serial.println(softAP); Serial.println(); } else { Serial.println("Could not creat AP!"); } } void loop() { delay(1000); Serial.print("Number of connected devices (stations)"); Serial.println(WiFi.softAPgetStationNum()); }
در این برنامه ابتدا باید یک AP ایجاد کنید. در صورت موفقیت در ایجاد AP مشخصات آن نمایش داده می‌شود:
if (WiFi.softAP(networkName, networkPassword) == true) { IPAddress softAP = WiFi.softAPIP(); Serial.println("Soft AP created successfully!"); Serial.println("You can connect to the network using: "); Serial.println("network: " + networkName); Serial.println("Password: " + networkPassword); Serial.println("Host IP Address is: "); Serial.println(softAP); Serial.println(); }
پس از آن هر یک ثانیه یکبار، تعداد دستگاه‌هایی که به آن وصل شده‌اند را نشان می‌دهد. در آن واحد 5 دستگاه می‌توانند به NodeMCU وصل شوند. با این روش می‌توانید یک ماژول را به صورت AP و دستگاه دیگری را به صورت Station راه‌اندازی کرده و بدون نیاز به روتر خارجی، چند ماژول را به صورت وایرلس به هم وصل کنید.
‌راه اندازی اولیه ماژول nRF
یکی دیگر از ماژول‌های وایرلس کاربردی و خوش‌ساخت، سری ماژول‌های nRF محصول شرکت نروژی nordic semiconductor هستند. این ماژول‌ها به دلیل برد زیاد و کم مصرف بودن معروف‌ هستند. ماژول nRF24L01 یک فرستنده و گیرنده وایرلس ساده و در دسترس است. این ماژول امکان برقراری ارتباط تا فاصله 100 متر و با پهنای باندهای مختلف از  256Kbps تا 2Mbps را فراهم می‌کند. البته این فاصله برای فضای باز است و طبیعتا در فضاهای بسته این مقدار کاهش می‌یابد. این ماژول از طریق پروتکل پرسرعت SPI با میکروکنترلر ارتباط برقرار می‌کند. این پروتکل قبلا در آموزش راه‌اندازی کارت SD معرفی شد.
این ماژول به طرزی باورنکردنی کم مصرف است. مصرف جریان nRF24L01 در حالت آماده به کار نزدیک به صفر است و تنها در حالت دریافت سیگنال با بیشترین نرخ داده (2Mbps) حدود 13.5mA جریان می‌کشد که باز هم برای یک ماژول وایرلس مقدار بسیار ناچیزی است. این ویژگی به شما کمک می‌کند به راحتی بتوانید از آن در پروژه‌های قابل حمل که انرژی از طریق باتری تامین می‌شود استفاده کنید. از این نظر nRF24L01 به هیچ وجه قابل مقایسه با ماژول‌های ESP نیست. البته فراموش نکنید که nRF یک ماژول وایرلس است که قابلیت WiFi ندارد. طبیعی است که یک ماژول وای‌فای پرمصرف باشد. nRF24L01 از یک آنتن درون خود بهره می‌برد. این آنتن کوچک که به صورت یک مسیر مارپیچ بر روی برد مشخص است برای کاربردهای معمولی کاملا مناسب است. برای کاربردهای خاص، نمونه‌هایی از ماژول nRF وجود دارد که قابلیت نصب آنتن خارجی بر روی آن وجود دارد و به کمک آنتن مخصوص، برد آن تا 1 کیلومتر هم می‌رسد.
ولتاژ کاری این ماژول بین 1.9V تا 3.6V است. با این وجود قابلیت اتصال به ولتاژ 5V را نیز دارد. ماژول nRF در بیشترین حالت 13.5mA جریان مصرف می‌کند که این مقدار بسیار کمتر از 40mA تامین جریان در هر پایه دیجیتال آردوینو و 200mA در پایه‌های ولتاژ آن است. بنابراین با خیال راحت می‌توانید پین‌های ماژول را مستقیما به آردوینو وصل کرده و نگران تامین توان آن نباشید.
در اینجا می‌خواهیم یک ارتباط ساده بین دو ماژول nRF ایجاد کرده و پیامی را بین آنها مبادله کنیم. برای این کار علاوه بر دو ماژول nRF (فرستنده و گیرنده) به دو برد آردوینو نیاز داریم که پردازش اطلاعات و انجام دستورات را بر عهده دارند. اتصالات هر کدام از مدارهای فرستنده و گیرنده را مطابق شکل زیر انجام دهید:
برای کار با ماژول nRF از کتابخانه RF استفاده می‌کنیم. کار کردن با این کتابخانه ساده است، تنها باید با توابع آن آشنا شوید. بر روی یکی از آردوینوها به عنوان فرستنده برنامه زیر را آپلود کنید:
/* SanatBazar Arduino Tutorial Series Author: Davood Dorostkar Website: www.sanatbazar.com */ #include   RF24 wirelessSender(7, 8); // (CE , CSN) pins const byte address[] = "00001"; void setup() { Serial.begin(9600); wirelessSender.begin(); Serial.println("Initializing the wireless... "); wirelessSender.setPALevel(RF24_PA_MIN); Serial.println("The Amplification is set to: " + String(wirelessSender.getPALevel())); wirelessSender.openWritingPipe(address); wirelessSender.stopListening(); Serial.println("wireless initialized!"); } void loop() { char message[] = "I am sending something!"; wirelessSender.write(&message, sizeof(message)); delay(2000); }
در ابتدا باید ماژول وایرلس را از طریق پایه‌های CE و CSN تعریف کنید. در اینجا این دو پایه به پایه‌های 7 و 8 آردوینو وصل شده‌اند. این ماژول می‌تواند در آن واحد با چندین ماژول دیگر ارتباط داشته باشد؛ بنابراین برای مشخص شدن هر ارتباط از یک آدرس استفاده می‌شود. آدرس ماژول nRF یک عدد 5 بیتی است.
#include   RF24 wifiSender(7, 8); // (CE , CSN) pins const byte address[] = "00001";
برای راه‌اندازی ماژول نیز چند دستور باید در حلقه setup اجرا شود. با دستورbeginماژول شروع به کار می‌کند. دستورsetPALevelمیزان انرژی مصرفی ماژول را مشخص می‌کند و تابعgetPALevelسطح انرژی فعلی ماژول را به صورت عددی بین 0 تا 3 می‌دهد. هرچه فاصله بین دو ماژول بیشتر باشد باید انرژی بیشتری مصرف شود. این تابع از چهار حالت مختلف پشتیبانی می‌کند که از کم‌مصرف‌ترین تا پر‌مصرف‌ترین وضعیت به ترتیب عبارتند از :
wifiSender.begin(); wifiSender.setPALevel(RF24_PA_MIN); Serial.println("The Amplification is set to: " + String(wifiSender.getPALevel()));
همان طور که در کد بالا می‌بینید، می‌توان چند رشته را با عملگر+به یکدیگر وصل کرد. حالا باید ماژول را در حالت ارسال داده قرار داده و از حالت خواندن خارج کنیم:
در حلقه loop نیز ابتدا یک متغیر کاراکتری که حاوی پیام مورد نظر است ایجاد شده و با دستورwriteاز طریق وایرلس فرستاده می‌شود. این تابع طوری نوشته شده که ورودی اول آن آدرس پیغام ارسالی و ورودی دوم آن طول آن است. در زبان برنامه‌نویسی ++C آدرس یک متغیر به صورت زیر نشان داده می‌شود:
بر روی آردوینوی دیگر نیز به عنوان گیرنده برنامه زیر را آپلود کنید:
/* SanatBazar Arduino Tutorial Series Author: Davood Dorostkar Website: www.sanatbazar.com */ #include   RF24 wirelessReciever(7, 8); // (CE , CSN) pins const byte address[] = "00001"; void setup() { Serial.begin(9600); wirelessReciever.begin(); Serial.println("Initializing the wireless... "); wirelessReciever.setPALevel(RF24_PA_MIN); Serial.println("The Amplification is set to: " + String(wirelessReciever.getPALevel())); wirelessReciever.openReadingPipe(0, address); wirelessReciever.startListening(); Serial.println("wireless initialized!"); } void loop() { if (wirelessReciever.available()) { char message[32] = ""; wirelessReciever.read(&message, sizeof(message)); Serial.println(message); } }
برنامه گیرنده تقریبا مشابه برنامه فرستنده است و تنها چند تفاوت جزئی دارد. اول اینکه در حلقه setup باید ماژول را به حالت خواندن داده‌ها تغییر دهید:
سپس یک متغیر کاراکتری خالی تعریف کرده و داده دریافت شده از وایرلس را در آن ذخیره کرده و در نهایت چاپ کنید:
char message[32] = ""; wifiReciever.read(&message, sizeof(message)); Serial.println(message);
ارتباط دوطرفه ماژول‌ها در شبکه وایرلس
یکی از کارهای جالبی که می‌توان با ماژول وایرلس انجام داد، ایجاد شبکه‌ای از این ماژول‌های متصل به هم و انتقال داده بین آنهاست. از این طریق می‌توانید مجموعه‌ای از سنسورها و عملگرهای مختلف را به هم متصل کنید و یک سیستم هوشمند (مثلا یک خانه هوشمند) بسازید. به عنوان یک مثال ساده در این قسمت قصد دارم به شما نشان دهم که چطور می‌توانید یک موتور و یک LED را از طریق وایرلس کنترل کنید. نحوه اتصال تمام قطعات را قبلا یاد گرفته‌اید و در این قسمت نکته سخت‌افزاری جدیدی وجود ندارد.
یک ماژول nRF را مانند قبل به برد آردوینو وصل کنید. به علاوه، یک سروو موتور را به پایه 3 دیجیتال و یک پتانسیومتر را به پایه A0 آنالوگ آردوینو وصل کنید. یک ماژول nRF دیگر را نیز به یک برد آردوینوی دیگر وصل کنید. همچنین یک LED را به همراه یک مقاومت 220Ω به پایه 3 دیجیتال و یک پتانسیومتر را نیز به پایه A0 آنالوگ آردوینو وصل کنید.
برد اول فرمان میزان روشنایی LED را از طریق وایرلس به برد دوم می‌فرستد و همچنین فرمان زاویه چرخش سروو موتور را گرفته و موتور را به حرکت در می‌آورد. برد دوم برعکس موارد فوق را انجام می‌دهد؛ یعنی فرمان زاویه چرخش موتور را از طریق وایرلس ارسال می‌کند و فرمان میزان روشنایی LED را دریافت کرده آن را روشن می‌کند.
برنامه زیر را بر روی برد اول آپلود کنید:
/* SanatBazar Arduino Tutorial Series Author: Davood Dorostkar Website: www.sanatbazar.com */ #include   #include   #define servoPin 3 #define potentiometer A0 RF24 wireless(7, 8); // (CE , CSN) pins Servo servoMotor; const byte LEDAddress[] = "00001"; const byte servoAddress[] = "00002"; int servoStatus; int LEDStatus; void readWireless() { wireless.startListening(); wireless.read(&servoStatus, sizeof(servoStatus)); } void writeWireless() { wireless.stopListening(); LEDStatus = map(analogRead(potentiometer), 0, 1023, 0, 255); if (LEDStatus<10) LEDStatus=0; wireless.write(&LEDStatus, sizeof(LEDStatus)); } void setup() { Serial.begin(9600); wireless.begin(); Serial.println("Initializing the wireless... "); wireless.setPALevel(RF24_PA_MIN); wireless.openReadingPipe(1, servoAddress); wireless.openWritingPipe(LEDAddress); Serial.println("The Amplification is set to: " + String(wireless.getPALevel())); Serial.println("wireless initialized!"); servoMotor.attach(servoPin); } void loop() { delay(50); writeWireless(); delay(50); readWireless(); servoMotor.write(servoStatus); Serial.println(servoStatus); }
برنامه زیر را نیز بر روی برد دوم آپلود کنید:
/* SanatBazar Arduino Tutorial Series Author: Davood Dorostkar Website: www.sanatbazar.com */ #include   #define LEDpin 3 #define potentiometer A0 RF24 wireless(7, 8); // (CE , CSN) pins const byte LEDAddress[] = "00001"; const byte servoAddress[] = "00002"; int servoStatus; int LEDStatus; void readWireless() { wireless.startListening(); wireless.read(&LEDStatus, sizeof(LEDStatus)); } void writeWireless() { wireless.stopListening(); servoStatus = map(analogRead(potentiometer), 0, 1023, 0, 180); if (servoStatus   170) servoStatus = 180; wireless.write(&servoStatus, sizeof(servoStatus)); } void setup() { Serial.begin(9600); wireless.begin(); Serial.println("Initializing the wireless... "); wireless.setPALevel(RF24_PA_MIN); wireless.openReadingPipe(1, LEDAddress); wireless.openWritingPipe(servoAddress); Serial.println("The Amplification is set to: " + String(wireless.getPALevel())); Serial.println("wireless initialized!"); pinMode(LEDpin, OUTPUT); } void loop() { delay(50); writeWireless(); delay(50); readWireless(); analogWrite(LEDpin, LEDStatus); Serial.println(LEDStatus); }
برنامه آردوینو در این حالت تفاوت زیادی با حالت قبل ندارد. مهمترین تفاوت این است که باید دو مسیر انتقال داده، یکی برای انتقال دستورات حرکتی موتور و دیگری برای انتقال فرمان میزان روشنایی LED تعریف کنید. برد اول فرمان روشنایی LED را از طریق یک مسیر فرستاده و برد دوم فرمان را از همان مسیر دریافت می‌کند. مشابه همین اتفاق برای مسیر دوم (کنترل سروو موتور) نیز تکرار می‌شود. نام‌گذاری‌ها در این پروژه اهمیت زیادی دارد و در صورت وجود اشتباه، سیستم کار نخواهد کرد. در اینجا ما تنها دو ماژول را به هم وصل کردیم، اگر تعداد ماژول‌ها بیشتر شود، نام‌گذاری‌ها نیاز به دقت بیشتری نیز دارد.
const byte LEDAddress[] = "00001"; const byte servoAddress[] = "00002";
از آنجایی که ارسال و دریافت اطلاعات با وایرلس نیازمند اجرای چند دستور است، برای سادگی برنامه، دو تابع یکی برای ارسال و دیگری برای دریافت اطلاعات تعریف شده است. این دو تابع برای برد اول به صورت زیر:
void readWireless() { wireless.startListening(); wireless.read(&servoStatus, sizeof(servoStatus)); } void writeWireless() { wireless.stopListening(); LEDStatus = map(analogRead(potentiometer), 0, 1023, 0, 255); if (LEDStatus<10) LEDStatus=0; wireless.write(&LEDStatus, sizeof(LEDStatus)); }
و برای برد دوم به صورت زیر است:
void readWireless() { wireless.startListening(); wireless.read(&LEDStatus, sizeof(LEDStatus)); } void writeWireless() { wireless.stopListening(); servoStatus = map(analogRead(potentiometer), 0, 1023, 0, 180); if (servoStatus   170) servoStatus = 180; wireless.write(&servoStatus, sizeof(servoStatus)); }
همان طور که مشاهده می‌کنید، مقادیر مرزی سروو موتور و LED فیلتر شده است تا نتیجه بهتری به دست بیاید. همچنین برای اینکه نوسانات جریان باعث چشمک‌های ناخواسته LED نشود، می‌توانید یک خازن 100nF بین دو سر آن قرار دهید.
در این آموزش با مهمترین ماژول‌های وایرلس و وای‌فای آشنا شدید و مباحث مقدماتی برای کار با آنها را یاد گرفتید. همچنین با یک پروتکل سریال دیگر به نام UART تا حدی آشنا شدید.
در آموزش بعدی، نحوه کار با ماژول بلوتوث را خواهید آموخت.
نظرات شما باعث بهبود محتوای آموزشی ما می‌شود. اگر این آموزش را دوست داشتید، همین‌طور اگر سوالی در مورد آن دارید، از شنیدن نظراتتان خوشحال خواهیم شد.
داوود درستکار دانش‌آموخته کارشناسی مهندسی مکانیک از دانشگاه صنعتی اصفهان و کارشناسی ارشد از دانشگاه تهران است. وی همچنین عضو تیم تحقیقاتی مرکز سیستمها و فناوریهای پیشرفته دانشگاه تهران (CAST) است. داود مسلط به طراحی و تحلیل سیستم‌های دینامیکی، طراحی و ساخت ربات، کنترل سیستم‌های غیرخطی و پیاده‌سازی سیستم‌های هوشمند با استفاده از آردوینو است. مهمترین علاقه او در حوزه رباتیک، پرنده‌های بدون سرنشین، رباتهای توانبخشی و ساخت تجهیزات هوشمندسازی و کنترل می‌باشد.
چطور یک آردوینو بسازیم!
دومین دوره فشرده ۱۲ ساعته آردوینو
دوره‌ آموزشی فشرده ۱۲ ساعته آردوینو
میکروکنترلر چیست (قسمت اول)
میکروکنترلر چیست (قسمت دوم)
محتوای بیشتر در این بخش: معرفی و نحوه استفاده از سنسور دمای مادون قرمز MLX90614 »
کاربرانی که در این گفتگو شرکت کرده اند
حدود 1 سال قبل
با سلام خدمت شما و تشکر از مطلب جامعی که گذاشتید.
بنده اون مثال LED و SERVO رو برای nrf اجرا کردم البته فقط قسمت LED رو اجرا کردم و SERVO رو از کد حذف کردم. حالا موقعی که پتانسیومتر رو در یه سمت می چرخونم داده ها نامنظم به سمت دیگه میره مثلا...
با سلام خدمت شما و تشکر از مطلب جامعی که گذاشتید.
بنده اون مثال LED و SERVO رو برای nrf اجرا کردم البته فقط قسمت LED رو اجرا کردم و SERVO رو از کد حذف کردم. حالا موقعی که پتانسیومتر رو در یه سمت می چرخونم داده ها نامنظم به سمت دیگه میره مثلا موقعی که پتانسیومتر عدد 125 رو نشون میده سمت فرستنده, سمت گیرنده یه دونه 125 میگیره 4تا 0 میگیره , سخت افزاری هست یا میشه کاریش کرد؟
دوست ندارم دوست دارم
حدود 1 سال قبل
دوست ندارم دوست دارم
حدود 1 سال قبل
سلام منظورم کد های اردوینو هستش اردوینو مداد او نو
دوست ندارم دوست دارم
حدود 1 سال قبل
چه راهی وجود دارد که بفهمیم که ماژول NRF24L01+PA+LNA سالم است
دوست ندارم دوست دارم
حدود 1 سال قبل
با راه اندازی اولیه اون کار رو شروع کنید و تک تک ارورها رو بررسی کنید ببینید مشکل چی می تونه باشه. برای حالت سخت افزاری هم تمامی قطعات رو برد ماژول رو باید تست کنید و از سالم بودن تک تک اونها مطوئن باشید.
دوست ندارم دوست دارم
حدود 1 سال قبل
سلام ممنون از اطلاعات خوب تون
فقط میشه کد رادیو کنترل ۴ کنال ررو به این شماره بفرستید
دوست ندارم دوست دارم
حدود 1 سال قبل
در صورت امکان بیشتر توضیح بدید که مدنظرتون چه کدی هست تا در همین کامنتها به شما پاسخ داده شود.
دوست ندارم دوست دارم
حدود 1 سال قبل
میشه یک nrfبه آردوینو و یکی به نودامسیو متصل کرد و باهم ارتباط بر قرار کنند؟
دوست ندارم دوست دارم
حدود 1 سال قبل
بله امکان پذیر هست.
دوست ندارم دوست دارم
حدود 1 سال قبل
سلام لطفا در مورد اتصال یک سنسور به برد وایرلس بدون آردینیو(به علت محدودیت وزن و حجم) و ارسال خروجی سنسور به صورت وایرلس به لپ تاب یا کامپیوتر توضیح دهید قبلا از توجهتان تشکر می کنم
دوست ندارم دوست دارم
حدود 1 سال قبل
میتونید از NodeMCU استفاده کنید.
ارتباط سنسورها و ماژول‌ها از طریق اینترنت با NodeMCU: https://b2n.ir/105337
دوست ندارم دوست دارم
حدود 1 سال قبل
سلام مهندس. من تمام این روش ها رو برای راه اندازی nrf طی کردم ولی هیچ داده ای ارسال نمیشه . ممنون میشم راهنمایی کنید .
دوست ندارم دوست دارم
حدود 1 سال قبل
سلام مجدد محمد عزیز
متاسفانه جز موارد قبل مورد دیگری برای اموزش نبود که در اختیارتون بزاریم. شاید بهتره ابتدا کار رو با یک اردوینو uno شروع کنید تا از روند کلی کارتون اطلاع پیدا کنید و خطاهای احتمالی رو راحت تر بتونید رفع کنید.
دوست ندارم دوست دارم
حدود 2 سال قبل
سلام با تشکر از آموزش خوبتون
خواستم ببینم میشه ماژول nRF رو arduino digispark وصل کرد ؟
دوست ندارم دوست دارم
حدود 2 سال قبل
برد arduino digispark از ATTiny 85 استفاده می کنه که لینک های زیر تا حدی کمکتون می کنه چطور از nrf با این برد استفاده کنید:
دوست ندارم دوست دارم
حدود 2 سال قبل
سلام برای راه اندازی nodemcu مسیر Additional board manager وجود نداره که بشه از منوی file و بعد Preferences وجود نداره میشه آدرس رو برام بنویسید ممنون.
دوست ندارم دوست دارم
حدود 2 سال قبل
ادرس زیر را وارد کنید:
دوست ندارم دوست دارم
هیچ نظری در اینجا وجود ندارد
نظر خود را اضافه کنید.
ارسال نظر بعنوان یک مهمان
پیوست ها (0 / 3)
مکان خود را به اشتراک بگذارید
همچنین من را به این موضوع مشترک کنید
موافقم با شرایط و قوانین.
رسپبری پای - Raspberry Pi
اس تی ام - STM
نرم افزار های پرینت سه بعدی
ساخت پرینتر سه بعدی
نکات طراحی و ساخت قطعات
تازه های پرینتر سه بعدی
محتوای آموزشی استفاده شده در این سایت محافظت شده می باشد و هرگونه کپی برداری از محتواهای تولید شده توسط تیم صنعت بازار موجب پیگرد خواهد بود. استفاده از مطالب صنعت بازار تنها با ذکر منبع به صورت لینک فعال بلامانع است