ساخت یک نقشه حرارتی برای سیگنال وای فای با آردوینو و ESP8266

فهرست مطالب

مقدمه

در این آموزش قصد داریم با استفاده از آردوینو و ESP8266 یک نقشه حرارتی از سیگنال های وای فای اطراف خود بسازیم.

آنچه در این آموزش یاد می گیرید

وای فای (Wi-Fi) چیست؟

امروزه بسیاری از مردم در گوشی های هوشمند، تبلت ها و لپ تاپ های خود از سرویس وای فای استفاده می کنند. وای فای یک پروتکل ثبت شده توسط “Wi-Fi Alliance” می باشد که برای ساخت یک شبکه محلی بیسیم با استاندارد IEEE802.11 ساخته شده است.
وای فای نسبت به بلوتوث قدرت بیشتری دارد. از وای فای بیشتر برای اتصال به اینترنت بیسیم استفاده می شود که این موضوع باعث محبوبیت دوچندان این پروتکل شده است. با استفاده از این تکنولوژی می توانید به راحتی در هرجا به اینترنت متصل شوید. استاندارد وای فای حداکثر سرعت 11Mps را در فرکانس 2.4 گیگاهرتز پشتیبانی می کند. برای افزایش سرعت این استاندارد، مدل دیگری بنام IEEE802.11n ساخته شد که سرعت آن تا 200Mps افزایش یافته است. این افزایش سرعت بعلت استفاده از سیستم چند آنتنی(MIMO)، استفاده از دو رنج فرکانسی 2.4 و 5 گیگاهرتز و اجازه دسترسی رسانه ای خاص(Medium Access-MAC)، می باشد. برد وای فای چیزی حدود 20 متر می باشد. در این پروژه می خواهیم با استفاده از ESP8266، آردوینو و 3.5” TFT LCD یک نقشه حرارتی از سیگنال های وای فای اطراف خود بسازیم. ESP8266 می تواند سیگنال وای فای یک SSID مشخص (RSSI) را تشخیص دهد. ماژول ESP-01 برای این پروژه مناسب است، به این منظور باید 4 عدد از این ماژول ها را در 4 گوشه اتاق با الگوی مستطیلی قرار دهیم، پس از دریافت اطلاعات از ماژول های ESP آنهارا برای تحلیل و نمایش به آردوینو ارسال می کنیم.

نقشه حرارتی چیست؟

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

لوازمی که به آن احتیاج دارید

قطعات مورد نیاز

آردوینو UNO R3 × 4
شیلد نمایشگر 3.5 اینچی × 1
ماژول وای فای ESP8266 × 4

نرم افزار های مورد نیاز

Arduino IDE

ساخت یک نقشه حرارتی برای سیگنال وای فای

سیم بندی

تمام ماژول های ESP را درست مانند مدار زیر به آردوینو متصل کنید.
پس از اتصال سیم های مربوط به ماژول های ESP، شیلد نمایشگر TFT را روی آردوینو قرار دهید.

کد

ابتدا برای بررسی قدرت سیگنال و ارسال آن به آردوینو، یک کد برای ماژول های ESP نوشته، سپس به منظور دریافت اطلاعات و نمایش آنها کد دیگری برای آردوینو می نوسیم.

کد زیر را روی تک تک ماژول های ESP خود آپلود کنید. برای مطالعه بیشتر درباره ماژول ESP8266 و نحوه آپلود کردن کد از طریق Arduino IDE می توانید این آموزش را مطالعه کنید.

#include "ESP8266WiFi.h"
char inByte;
void setup() {
  Serial.begin(115200);
  WiFi.mode(WIFI_STA);
  WiFi.disconnect();
  delay(100);
}
 
void loop() {
  if (Serial.available() > 0)
  {
    // get incoming byte:
    inByte = Serial.read();
    if (inByte == '1')
    {
      int n = WiFi.scanNetworks();
      if (n == 0) {
        Serial.println("no networks found");
      } else {
        for (int i = 0; i < n; ++i) {
          if (WiFi.SSID(i) == "Specific SSID") {
            Serial.println(WiFi.RSSI(i));
          }
        }
      }
    }
  }
}

در این کد کاراکتر “1” نشانگر شناسه ماژول ESP می باشد، برای ماژول های بعد این شناسه را تغییر دهید، بعنوان مثال برای ماژول دوم شناسه “2” قرار دهید. بجای “specific SSID” نام SSID مورد نظر خود را وارد کنید.

حال کد زیر را روی آردوینو آپلود کنید.

#include "Adafruit_GFX.h"
#include "MCUFRIEND_kbv.h"
MCUFRIEND_kbv tft;
 
int Pa, Pb, Pc, Pd;
int color;
int r = 0, g = 150, b = 200;
int sam, eq;
int r2, b2, g2;
 
void setup() {
  Serial.begin(115200);
  tft.reset();
  uint16_t ID = tft.readID();
  tft.begin(ID);
  tft.setRotation(1);
  tft.invertDisplay(true);
  tft.fillScreen(0x0000);
}
void loop() {
  Serial.println("1");
  delay(1000);
  if (Serial.available() > 0) {
    // get incoming byte:
    Pa = Serial.read();
  }
 
  Serial.println("2");
  delay(1000);
  if (Serial.available() > 0) {
    // get incoming byte:
    Pb = Serial.read();
  }
 
  Serial.println("3");
  delay(1000);
  if (Serial.available() > 0) {
    // get incoming byte:
    Pc = Serial.read();
  }
 
  Serial.println("4");
  delay(1000);
  if (Serial.available() > 0) {
    // get incoming byte:
    Pd = Serial.read();
  }
 
  sam =  (( sqrt(pow(240, 2) + pow(160, 2)) * Pa + sqrt(pow(480 - 240, 2) + pow(160, 2)) * Pb + sqrt(pow(240, 2) + pow(320 - 160, 2)) * Pc + sqrt(pow(480 - 240, 2) + pow(320 - 160, 2)) * Pd ) / ( sqrt(pow(240, 2) + pow(160, 2)) + sqrt(pow(480 - 240, 2) + pow(160, 2)) + sqrt(pow(240, 2) + pow(320 - 160, 2)) + sqrt(pow(480 - 240, 2) + pow(320 - 160, 2)) ) );
 
  for (int y = 0; y < 320; y++)
  { for (int x = 0; x < 480; x++) { eq = (( sqrt(pow(x, 2) + pow(y, 2)) * Pa + sqrt(pow(480 - x, 2) + pow(y, 2)) * Pb + sqrt(pow(x, 2) + pow(320 - y, 2)) * Pc + sqrt(pow(480 - x, 2) + pow(320 - y, 2)) * Pd ) / ( sqrt(pow(x, 2) + pow(y, 2)) + sqrt(pow(480 - x, 2) + pow(y, 2)) + sqrt(pow(x, 2) + pow(320 - y, 2)) + sqrt(pow(480 - x, 2) + pow(320 - y, 2)) ) ); // Serial.println(eq); // delay(20); eq = (eq - sam) * -1; //Serial.println(eq); r2 = r + (10 * eq); b2 = b + (10 * eq); g2 = g + (10 * eq); if (r2 > 255)r2 = 255;
      if (r2 < 0)r2 = 0; if (b2 > 255)b2 = 0;
      if (b2 < 0)b2 = 0; if (g2 > 255)g2 = 0;
      if (g2 < 0)g2 = 0;
 
      color = tft.color565(r2, g2, b2);
      tft.drawPixel(x, y, color);
    }
  }
}
در این کد برای نمایش روی LCD از کتابخانه های Adafruit_GFX  و MCUFRIEND_kbv  استفاده شده است که میتوانید آن ها را از لینک های زیر دانلود کنید. Adafruit-GFX Library MCUFRIEND_kbv Library پس از دریافت RSSI از همه ماژول ها، آردوینو با یک فرمول، قدرت سیگنال وای فای را با توجه به مکان محاسبه کند. می توانید با تغییر متغیرهای r، g و b رنگ موردنظر خودتان را بسازید.

یک گام جلوتر

  • سعی کنید SSID های بیشتری را تحلیل کنید.
  • سعی کنید ماژول های بیشتری اضافه کرده و سیگنال را بصورت سه بعدی تحلیل کنید.

از این مطلب خوشتان آمد؟

آخرین مطالت و آموزش ها را در ایمیلتان دریافت کنید:

مطالب بیشتر

Comments (4)

  • غلامرضا Reply

    سلام واقعا خسته نباشید خیلی خیلی ممنونم از زحمات بیش از حد و آموزش های عالی شما آقای مهندس یک سوال از خدمتتون دارم آیا از کد وای فای می‌توان برای ارسال تغییرات سنسور مغناطیس (FLC100)استفاده کرد اگه میشه یه راهنمایی بفرمایید ممنونم از لطفتون

    فوریه 27, 2023 at 9:58 ب.ظ
    • علی عبدالملکی Reply

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

      فوریه 28, 2023 at 2:56 ب.ظ
      • غلامرضا Reply

        سلام و درود مهندس بزرگوار
        همانطور که می‌فرماید سنسور رو به درایور وصل کردم وخروجی درایور رو به بامبدل لب تاب وصل کردم و در حال حاضر در لب تاب نمایش اطلاعات رو دارم سوالم این هست که با این کدی که شما برای ماژول esp زحمتشو کشیدین میتونم خروجی درایور رو به ماژول esp بدم و esp هم اون تغییرات سنسور رو به نرم‌افزار ویژلایزر مخصوص که با وای فای کانکت میشه بفرسم یا تغییراتی در کد esp باید انجام بشه؟وآیا نیاز به تنظیمات AT CEMENT هست يا نه اگه مقدور هست بنده رو راهنمایی بفرمایید ممنونم از لطفتون

        مارس 1, 2023 at 9:40 ب.ظ
  • غلامرضا Reply

    سلام درود بیکران
    مهندس بزرگوار برای ارتباط وای فای به‌ گوشی اندرویدی که از درایور به نرم‌افزار ویژلایزر در کوشی بفرسته رو میخوام وهزینه رو هم میپردازم

    مارس 2, 2023 at 11:52 ب.ظ

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد.