طراحی شبکه MESH دما با استفاده از ESP-MESH و نمایشگر OLED

منبع :  دیجی اسپارک دسته بندی : اینترنت اشیا IOT کد خبر : 18375 2 سال قبل 982

در پروژه های مختلفی انتقال دیتا به بین برد های ESP را تست کردیم، اما در این آموزش قصد طراحی شبکه MESH مش همراه با تبادل داده سنسور های مخلف را تست کنیم، در واقع با استفاده از این نوع ارتباط تمام برد های ESP موجود در شبکه اقدام به تبادل دیتا با یکدیگر خواهند کرد و در صورت وجود دیتا مقادیر در تمام node ها دریافت خواهد شد. همچنین در این پروژه در یکی از node ها که با استفاده از سنسور دما و فشار BMP180 مقادیر محیطی را اندازه‌گیری می‌کند، یک نمایشگر Oled نیز قرار داده‌ایم تا نمایش مقادیر را در لحظه و در Node مبدا آسان تر کنیم.  در ادامه این آموزش با مرجع تخصصی آردوینو به زبان فارسی، دیجی اسپارک همراه باشید.

 

Temperature MESH network design using ESP-MESH

 

شناخت ESP-MESH

تفاوت ESP-MESH با زیرساخت های شبکه های Wi-Fi سنتی از این جهت است که برای اتصال node ها نیازی به node مرکزی نیست. در عوض، node ها مجاز به اتصال با node های همسایه هستند. node ها متقابلا مسئول انتقال مجدد یکدیگر هستند. این مورد اجازه می دهد تا یک شبکه ESP-MESH منطقه تحت پوشش بیشتری داشته باشد زیرا node ها هنوز می توانند بدون نیاز به قرار گرفتن در node مرکزی به هم اتصال متصل شوند. به همین ترتیب، ESP-MESH نیز کمتر مستعد بارگیری می شود زیرا تعداد node های مجاز در شبکه دیگر توسط یک node مرکزی محدود نمی شود.

Get started with ESP-MESH and test a Mesh network scenario

 

ESP-MESH در سطحی بالاتر از پروتکل Wi-Fi زیرساخت شده است و می توان آن را به عنوان یک پروتکل شبکه در نظر گرفت که بسیاری از شبکه های Wi-Fi را در یک WLAN واحد ترکیب می کند. در Wi-Fi، ایستگاه ها یا STA ها در هر زمان به یک اتصال واحد با یک AP محدود می شوند، در حالی که یک AP می تواند به طور همزمان به چندین STA متصل شود. با این وجود ESP-MESH به node ها اجازه می دهد تا همزمان به عنوان ایستگاه و AP عمل کنند. بنابراین یک node در ESP-MESH می تواند با استفاده از رابط softAP خود چندین اتصال پایین دست داشته باشد، در حالی که همزمان با استفاده از رابط STA خود یک اتصال بالادستی واحد دارد. این به طور طبیعی منجر به یک توپولوژی شبکه درختی با سلسله مراتب والدین و کودکان متشکل از چند لایه می شود.

Temperature MESH network design using ESP-MESH

 

برد ESP32

ESP32 نسل پیشرفته ESP8266 است. یکی از تفاوت‌های آن بلوتوث داخلی‌اش می‌باشد. همچنین دارای هسته وایفای ۲,۴ گیگا هرتزی و بلوتوث داخلی تولید شده با تکنولوژی ۴۰ نانومتری شرکت TSMC می‌باشد. این ماژول دارای بهترین پرفورمنس در مصرف انرژی می‌باشد یعنی با کمترین مصرف انرژی بهترین نتیجه را برای ما به همراه دارد. اگر بخواهیم دقیق‌تر به این برد نگاه کنیم باید بگوییم که این یک chip است که پلتفرم NodeMCU در اون پیاده سازی شده که به این نوع چیپ ها System on a chip microcontrollers هم گفته می‌شود.

 

 

 برد Wemos ویموس

برد Wemos یکی از پرطرافدار ترین برد هایی است که در زمینه iot مورد استفاده قرار میگیرد، یکی از مزیت های این برد نسبت به برد هایی مانند Node MCU اندازه کوچک آن می باشد تراشه وای فای مورد استفاده در این برد ESP8266 می باشد. از دیگر مزیت های این برد وجود شیلد های مختلفی برای این برد می باشد، که انجام هر پروژه ای را برای کاربر بسیار آسان و لذت بخش می کند، شیلد هایی از جمله شیلد باتری، multi sensor ، DHT22 ، رله ، oled تعداد بسیار زیادی شیلد برای این برد توسعه داده شده که در نتیجه تجربه خوبی از iot برای شما به جا خواهد گذاشت.

 

 

روش کار پروژه

در این پروژه یکی از node ها اقدام به خواندن مقادیر دما و فشار با استفاده از سنسور BMP180 کرده و در همین بین، مقادیر را از در شبکه Mesh ساخته شده برای دیگر Node که اشتراک گذاری می‌کند. در ادامه node های دیگر در شبکه Mesh این مقادیر را دریافت کرده و نمایش خواهند داد، همچین این مقادیر در node ارسال کننده توسط نمایشگر Oled نیز نمایش داده می‌شود. در این این پروژه قادر خواهیم بود node هایی با تعداد بالا با کاربرد مشابه بسازیم در واقع تا ۱۰۰۰ node امکان ساخت وجود دارد که تنها برای هر node باید node number بخصوصی را وارد کنیم.

Temperature MESH network design using ESP-MESH

 

وسایل مورد نیاز

  • برد Nodemcu برپایه ESP8266
  • برد ESP32
  • نمایشگر Oled
  • سنسور BMP180

Temperature MESH network design using ESP-MESH

 

نصب و راه‌اندازی کتابخانه

painlessMesh یک شبکه موقت و تک کاره است، به این معنی که کنترل کننده یا node مرکزی یا روتر مورد نیاز نیست. هر سیستمی از ۱ یا چند گره خود به خود، در شبکه ای کاملا کاربردی سازمان می یابد. حداکثر اندازه مش با توجه به مقدار حافظه موجود در انبوهی که می توان به بافر فرعی اختصاص داد، محدود است. برای نصب کتابخانه مطابق مراحل زیر پیش بروید. این کتابخانه به تعدادی موارد پیفرض نیاز دارد که از وابستگی های کتابخانه است. هنگام نصب کتابخانه یک پنجره جدید ظاهر می شود که از شما می خواهد موارد مورد نیاز  را نصب کنید. در این پنجره گزینه “install all” را انتخاب کنید.

  • این مسیر را دنبال کنید Sketch Include Library > Manage Libraries
  • کلمه painlessMesh را جستجو کنید.
  • کتابخانه را نصب کنید.
  •  

     

    شماتیک و اتصالات

    در این پروژه از دو قطعه یعنی نمایشگر Oled و سنسور BMP180 استفاده کردیم، هر دو مورد استفاده شده از رابط i2c استفاده می‌کنند و که به لطف این رابط قادر خواهیم بود هرو قطعه را توسط تنها دو پین SCL و SDA برد ESP8266 کنترل کنیم. در برد های Wemos و Nodemcu که بر پایه تراشه ESP82666 هستند این دوپین از طریق پین D1 و D2 در دسترس هستند.

    • در اولین مراحله اتصالات سنسور BMP180 را با برد Wemos برقرار خواهیم کرد. که پین های SCl و SDA به پایه های D1 و D2 در برد Wemos متصل خواهد شد، همچنین برای تغذیه از ۵v و GND استفاده خواهیم کرد.

     

    • در ادامه اتصالات نمایشگر oled را برقرار خواهیم کرد که مانند سنسور BMP180 به پین های D1 و D2 متصل خواهد شد، زیرا هر ذو از رابط i2c پشتیبانی می‌کنند.

    Temperature MESH network design using ESP-MESH

     

    در نهایت اتصالات به این شکل اتمام میابد، از صحت اتصالات اطمینان حاصل کنید.

    Temperature MESH network design using ESP-MESH

     

     

    کد و راه‌اندازی مدار

    در این پروژه از دو کد برای node های مختلف استفاده خواهیم کرد که یکی از کد ها اقدام به تحلیل مقادیر سنسور و نمایش در Oled و همچنین در شبکه Mesh وارد می‌کند، و دیگری تنها این مقادیر را دریافت و پیامی را ارسال خواهد کرد. برای دریافت مقادیر به تنهایی می توانید از کد استفاده شده در پروژه قبلی از سری ESP-MESH استفاده کنید.در ادامه این مورد را در ذهن داشته باشید در صورتی که node های با تعداد بیشتر از یک نود اقدام به تحلیل دیتا می‌کنند و از نوع شماره دار هستند مانند این پروژه باید در کد های مربوط مقدار node number را در هر کد سفارشی سازی کنید.

    • در این سه خط یک نام و گذر واژه برای شبکه مش خود در نظر گرفته تا با دیگر node دچار اختلال نشوند، همچنین پورت استفاده شده در این مورد مربوط به tcp/udp است.
    #define MESH_PREFIX "Cifer" #define MESH_PASSWORD "DogeCoin" #define MESH_PORT 5555  
    • در این خط باید مقدار node number را در صورت وجود نود های مشابه تغییر دهیم.
    int nodeNumber = 3;  

    کد های کامل این پروژه را از این بخش مشاهده کنید.

    #include <Adafruit_BMP085.h> #include <Adafruit_Sensor.h> #include "painlessMesh.h" #include <Arduino_JSON.h> #include <SPI.h> #include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> Adafruit_SSD1306 display = Adafruit_SSD1306(128, 32, &Wire); #define MESH_PREFIX "Cifer" #define MESH_PASSWORD "DogeCoin" #define MESH_PORT 5555 Adafruit_BMP085 bmp; int nodeNumber = 3; String readings; Scheduler userScheduler; painlessMesh mesh; void sendMessage(); String getReadings(); Task taskSendMessage(TASK_SECOND * 5, TASK_FOREVER, &sendMessage); String getReadings() { JSONVar jsonReadings; jsonReadings["node"] = nodeNumber; jsonReadings["temp"] = bmp.readTemperature(); jsonReadings["pres"] = bmp.readPressure() / 100.0F; readings = JSON.stringify(jsonReadings); return readings; } void sendMessage() { String msg = getReadings(); mesh.sendBroadcast(msg); } void initBMP() { if (!bmp.begin(0x76)) { Serial.println("Could not find a valid BMP280 sensor, check wiring!"); while (1); } } void receivedCallback(uint32_t from, String& msg) { Serial.printf("Received from %u msg=%s\n", from, msg.c_str()); JSONVar myObject = JSON.parse(msg.c_str()); int node = myObject["node"]; double temp = myObject["temp"]; double hum = myObject["hum"]; double pres = myObject["pres"]; Serial.print("Node: "); Serial.println(node); Serial.print("Temperature: "); Serial.print(temp); Serial.println(" C"); Serial.print("Pressure: "); Serial.print(pres); Serial.println(" hpa"); } void newConnectionCallback(uint32_t nodeId) { Serial.printf("New Connection, nodeId = %u\n", nodeId); } void changedConnectionCallback() { Serial.printf("Changed connections\n"); } void nodeTimeAdjustedCallback(int32_t offset) { Serial.printf("Adjusted time %u. Offset = %d\n", mesh.getNodeTime(), offset); } void setup() { Serial.begin(115200); display.begin(SSD1306_SWITCHCAPVCC, 0x3C); initBMP(); display.clearDisplay(); display.display(); mesh.setDebugMsgTypes(ERROR | STARTUP); mesh.init(MESH_PREFIX, MESH_PASSWORD, &userScheduler, MESH_PORT); mesh.onReceive(&receivedCallback); mesh.onNewConnection(&newConnectionCallback); mesh.onChangedConnections(&changedConnectionCallback); mesh.onNodeTimeAdjusted(&nodeTimeAdjustedCallback); userScheduler.addTask(taskSendMessage); taskSendMessage.enable(); } void loop() { display.setTextSize(1); display.setTextColor(SSD1306_WHITE); display.setCursor(0, 0); display.print("Temperature: "); display.println(bmp.readTemperature()); display.print("Pressure: "); display.println(bmp.readPressure()); display.setCursor(0, 0); display.display(); display.clearDisplay(); delay(100); mesh.update(); }

     

    Temperature MESH network design using ESP-MESH

     

    جمع بندی

    در این پروژه مقادیر دیتای دما و فشار را از طریق سنسور BMP180 دریافت کردیم و سپس با استفاده از برد های ESP اقدام به راه‌اندازی یک شبکه مش بین برد های ESP کردیم، که در یک سری از node ها، کد استفاده شده در این پروژه استفاده شد تا به این صورت مقادیر تحلیل شوند، در نمایشگر Oled نمایش داده شوند و در ادامه در شبکه مش ایجاد شده آپلود شوند، و یا یا استفاده از کدی ساده تنها مقادیر مدنظر را دریافت کنیم.

     

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

     

    در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی , از وبسایت دیجی اسپارک حمایت کنید.

    نوشته طراحی شبکه MESH دما با استفاده از ESP-MESH و نمایشگر OLED اولین بار در دیجی اسپارک پدیدار شد.

    مشاهده این خبر در سایت مرجع