برد ESP8266 برد Nodemcu پروژه های آردوینو

طراحی و پیاده سازی ضبط صوت با قابلیت کنترل از طریق وای فای Wifi

create-wifi-music-player-with-nodemcu-local-web-server-digispark
نوشته شده توسط معین صابری

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

 


نحوه عملکرد ضبط صوت با قابلیت کنترل از طریق تلفن همراه


در پروژه ضبط صوت وای فای به پیاده سازی یک ضبط صوت می پردازیم. این ضبط صوت همانند یک مودم خانگی، دارای نام نقطه دسترسی است. پس از اتصال به این نام نقطه دسترسی، می توان از طریق تلفن همراه به ضبط صوت فرمان پخش ارسال نمود. به عنوان مثال می توانیم آهنگ ها را پخش کنیم؛ یا اینکه صدا را کم و زیاد کنیم.

ساخت ضبط صوت با کنترل از طریق وای فای Wifi - دیجی اسپارک

 

جهت پخش آهنگ ها، می بایست آن ها را در کارت SD ذخیره کنید. سپس با ارسال فرمان از طریق تلفن همراه، آهنگ ها پخش خواهند شد. در این پروژه از دو ماژول اصلی NODEMCU و DF PLAYER استفاده می کنیم. در قسمت های بعدی به تشریح هریک از این ماژول ها می پردازیم.

 


ماژول NODEMCU


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

برد Nodemcu بر پایه تراشه ESP8266 - دیجی اسپارک

 

این ماژول می تواند به زبان های مختلف نظیر lua، پایتون و حتی آردوینو به اجرای برنامه های کاربر بپردازد. این برد در بخش پردازش از فرکانس ۱۶۰ مگاهرتزی به همراه حافظه فلش ۴ مگابایتی بهره می برد. این برد به سادگی از طریق کابل به رایانه متصل شده و می تواند برنامه های نوشته شده کاربر رو روی خود آپلود کند. جهت راه اندازی و کار با این ماژول کلیدی و کاربردی سلسله آموزشی طی ۱۱ مرحله تهیه شده که با کلیک بر روی این لینک، می توانید آن را دنبال کنید.

استفاده از برد Nodemcu در ساخت ضبط صوت با کنترل وای فای - دیجی اسپارک

 

در این پروژه به کمک واحد مخابراتی برد NODEMCU یک شبکه وای فای ایجاد می کنیم. سپس از طریق پروتکل TCP/IP، ماژول را در مد سرور جهت دریافت فرامین کاربر قرار می دهیم. در نهایت با اتصال ماژول DF PLAYER به عنوان پخش کننده صوت، آهنگ های مد نظر کاربر را پخش خواهیم نمود. در قسمت بعد با این ماژول کلیدی بیشتر آشنا خواهیم شد.

 


ماژول DF PLAYER


همانطور که پیشتر گفته شد، به کمک ماژول DF PLAYER آهنگ ها را پخش خواهیم نمود. ماژول DF PLAYER یک ماژول با ابعاد کوچک ولی قابلیت های بسیاری است. این ماژول دارای سوکت کارت SD بوده که قادر به پخش آهنگ های ذخیره شده در حافظه SD است.

ماژول DF PLAYER در ساخت ضبط صوت کنترل از طریق وای فای - دیجی اسپارک

 

برای راه اندازی و کار با این ماژول کتابخانه تحت آردوینو توسعه یافته که روند کار را بسیار تسریع می بخشد. در این پروژه هم ما از این کتابخانه استفاده خواهیم نمود. ماژول DF PLAYER به قدری کاربردی است که تاکنون ما پروژه های بسیاری را به کمک آن در دیجی اسپارک اجرا کرده ایم. برخی از این پروژه ها را در زیر قرار می دهیم که با کلیک بر روی آن ها می توانید مطالعه کنید.

پروژه طراحی و پیاده سازی سیستم نوبت دهی بانکی، کلیک کنید

طراحی و پیاده سازی منو صوتی با ماژول DF PLAYER و برد آردوینو

طراحی و پیاده سازی ساعت سخنگو با برد Nodemcu و ماژول DFplayer

پس از آشنایی به قطعات، نوبت به اجرای پروژه می رسد. اما در قسمت بعدی ابتدا به نصب کتابخانه DF PLAYER پرداخته و پس از آن شماتیک و اتصالات را مورد بررسی قرار خواهیم . در نهایت با ارائه کد و اجرای پروژه، خروجی مد نظر را مشاهده خواهیم نمود.

 


نصب کتابخانه DF PLAYER MINI


در این پروژه از  کتابخانه  DF PLAYER استفاده می کنیم. کتابخانه DF PLAYER جهت پخش صدا و ارتباط با ماژول DF استفاده می گردد. به منظور استفاده از کتابخانه، ابتدا می بایست آن را نصب کنیم. در این قسمت به نصب کتابخانه با جستجو در مخازن آردوینو می پردازیم. به همین منظور، ابتدا در نرم افزار آردوینو بر روی گزینه Tools و سپس Manage Libraries را کلیک کنید. پس از کلیک بر روی این گزینه، با تصویر زیر رو به می شوید. این منو کتابخانه های در دسترس را به شما نشان می دهد. شما نیز می توانید با جستجوی نام کتابخانه مورد نظر خود، آن را در مخازن آردوینو یافته و سپس نصب کنید.

روش نصب کتابخانه PCF8574.h - دیجی اسپارک

 

در کادر جست و جو، عبارت DFPlayer_Mini را تایپ کرده و مطابق کادر قرمز رنگ در تصویر زیر، کتابخانه DF ROBOT را با کلیک بر روی گزینه INSTALL نصب نمایید.

روش نصب کتابخانه df player در آردوینو - دیجی اسپارک

 


 شماتیک و اتصالات پروژه


پس از بررسی اجزای پروژه ضبط صوت وای فای، نوبت به بررسی شماتیک و اتصالات پروژه می رسد. ابتدا به تصویر زیر که فرم کلی اتصالات را نمایش می دهد، دقت کنید.

 

 مطابق تصویر فوق، شماتیک و اتصالات پروژه ضبط صوت وای فای را به شکل زیر اجرا کنید.

DF PLAYER NODEMCU
VCC VIN
GND GND
RX D2
TX D1

پس از بررسی شماتیک و اتصالات، نوبت به PCB پروژه می رسد. ابتدا به تصویر زیر که فرم اتصالات PCB را نمایش می دهد، دقت کنید.

 در ادامه نیز، جهت دانلود فایل PCB روی این لینک کلیک کنید. با دانلود این فایل که تحت نرم افزار آلتیوم طراحی شده، می توانید تغییرات مد نظر خود را اعمال کرده و اشکالات احتمالی آن را برطرف نمایید.

توجه۱: در این پروژه تغذیه ماژول از پورت USB تامین می گردد.

توجه۲: در فایل PCB، دو پد J1 و J2 پس از اجرای PCB به کمک جامپر یا مقاومت صفر اهم باید به هم متصل شوند.


 کدهای پروژه


پس از برقراری اتصالات، نوبت به کدهای پروژه ضبط صوت وای فای می رسد. این کدها را برای برد NODEMCU آپلود نمایید.

 

#include "ESP8266WiFi.h"  //کتابخانه  وای فای
#include "ESP8266WebServer.h"  //کتابخانه سررور
ESP8266WebServer server(80);  //تنظیم سرور روی پورت ۸۰ و تعریف شی
#include <SoftwareSerial.h>  //کتابخانه سریال نرم افزاری جهت ارتباط با ماژول mp3
#include "DFRobotDFPlayerMini.h"  // فراخوانی کتابخانه DF
SoftwareSerial mySoftwareSerial(D1, D2); // انتخاب پایه های D1 به عنوان RX و D2 به عنوان TX نرم افزاری جهت ارتباط با DF PLAYER
DFRobotDFPlayerMini myDFPlayer;     //انتخاب یک شی از کلاس DF PLAYER جهت پخش صدا
String command = "";
void data() {  //تابع جهت دریافت داده از کاربر
  if (server.hasArg("data")) {   //داده ها در متغیر data ارسال می گردند.
    command = server.arg("data");   //ذخیره فرمان قرار گرفته در متغیر data در متغیر command
    Serial.println(command);
    Serial.flush();
    if (command == "play")   //پخش صدا
      myDFPlayer.play();
      else if (command == "pause")  //توقف
        myDFPlayer.pause();
      else if (command == "next")  //بعدی
        myDFPlayer.next();
      else if (command == "prv")  //قبلی
        myDFPlayer.previous();
      else if (command == "volup")  //افزایش صدا
        myDFPlayer.volumeUp();
      else if (command == "voldown")
        myDFPlayer.volumeDown();  //کاهش صدا
  }
  server.send(200, "text/html", "data received");  //ارسال پیغام به کاربر پس از دریافت فرمان که در مرورگر نمایش داده می شود.
}
void setup() {
  Serial.begin(115200);
  delay(500);
  mySoftwareSerial.begin(9600);  //باودریت پیشفرض ماژول mp3 عدد ۹۶۰۰ است
  WiFi.mode(WIFI_AP);  //تنظیم مد ماژول در حالت نقطه دسترسی
  WiFi.softAP("PLAY_SOUND", "");  //تنظیم نام SSID به نام play_sound
  //*********************************************** initializing df
  if (!myDFPlayer.begin(mySoftwareSerial)) {  //در صورتیکه ماژول mp3 راه اندازی نشود، برنامه خطا داده و متوقف می شود.
    Serial.println(F("Unable to begin:"));
    Serial.println(F("1.Please recheck the connection!"));
    Serial.println(F("2.Please insert the SD card!"));
    while (true) {
      yield();  //تابع جهت جلوگیری از هنگ ماژول از آنجاییکه ماژول دارای سیستم عامل است، باید جهت جلوگیری از CRASH، از این تابع استفاده می کنیم. چراکه حلقه تکرار بی نهایت
      //نمی توانیم در سیستم عامل ایجاد کنیم.
    }
  }
  server.on("/", HTTP_GET, data);  //ایجاد سرور روی آدرس / با متد GET و با تابع به نام data
  server.begin();  //راه اندازی سرور
  Serial.println(F("DFPlayer Mini online."));
  myDFPlayer.setTimeOut(500); //تنظیم مدت زمان ۵۰۰ میلی ثاینه برای دریافت پاسخ از ماژول mp3
  myDFPlayer.EQ(DFPLAYER_EQ_NORMAL);  //تنظیم اکولایز صدادر حالت نرمال
  myDFPlayer.outputDevice(DFPLAYER_DEVICE_SD);  //تعیین نوع دیوایس ذخیره سازی که در اینجا کارت SD است
  myDFPlayer.volume(20);  //تنظیم ولوم ماژول پخش صدا، میزان ولوم بین ۰ الی ۳۰ قابل انتخاب است
}
void loop() {
  server.handleClient();  //اجرای تابع سرور

}

 


  اجرای پروژه ضبط صوت وای فای


پس از آپلود کدها، نوبت به اجرای پروژه ضبط صوت وای فای می رسد. پس از اجرای پروژه، در لیست وای فای ها، می توانید نام PLAY_SOUND را بیابید. بر روی این نام کلیک کرده و به نقطه دسترسی متصل شوید.

شبکه های در دسترس برای ساخت ضبط صوت وای فای - دیجی اسپارک

 

 در ادامه نیز پس از اتصال، مرورگر خود را باز کنید. در مرورگر آدرس ۱۹۲٫۱۶۸٫۴٫۱/?data= را وارد کنید. پس از این مرحله، پس از مساوی، می توانید مقادیر زیر را قرار دهید.

مفهوم مقدار
پخش آهنگ play
توقف پخش آهنگ pause
پخش آهنگ بعدی next
پخش آهنگ قبلی prv
افزایش صدا volup
کاهش صدا voldown

 

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

پروژه ضبط صوت وای فای با Nodemcu - دیجی اسپارک

 


 تحلیل کدهای پروژه


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

کاربرد تابع
تعیین نام نقطه دسترسی و رمز عبور softAP
فعال سازی سرور و متدد دریافت داده on
کنترل و اجرای تابع سرور handleClient
اجرای تابع سرور، دریافت فرامین اجرا و پخش صدا data

 


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


  1. برد NODEMCU
  2. ماژول DF PLAYER
  3. بلندگو

 


جمع بندی


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

 

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

 

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

معین صابری

کارشناسی ارشد رشته معماری سیستم های کامپیوتری

مالي که ز تو کس نستاند، علم است
حرزي که تو را به حق رساند، علم است
جز علم طلب مکن تو اندر عالم
چيزي که تو را ز غم رهاند، علم است
(شیخ بهایی)

تبادل نظر و رفع عیب با ثبت دیدگاه

۶ دیدگاه

  • سلام آقای صابری من میخوام یه هنذفری بسازم که بشه با وایفا کنترلش کرد مثل این هنذفری بلوتوثی های توی بازار که میشه باهاش آهنگ پخش و قطع کرد به تماس جواب داد کم و زیاد کردن صدای گوشی آهنگ بعدی یا آهنگ قبلی رفتن اما با این تفاوت که این وایفای داره نه بلوتوث
    یه مطلب هم درباره این بزارید ممنون

  • Arduino: 1.8.19 (Windows 8), Board: “NodeMCU 0.9 (ESP-12 Module), 80 MHz, Flash, Disabled (new aborts on oom), Disabled, All SSL ciphers (most compatible), 32KB cache + 32KB IRAM (balanced), Use pgm_read macros for IRAM/PROGMEM, 4MB (FS:2MB OTA:~1019KB), v2 Lower Memory, Disabled, None, Only Sketch, 115200”

    Executable segment sizes:

    ICACHE : 32768 – flash instruction cache

    IROM : 274104 – code in flash (default or ICACHE_FLASH_ATTR)

    IRAM : 28945 / 32768 – code in IRAM (IRAM_ATTR, ISRs…)

    DATA : 1496 ) – initialized variables (global, static) in RAM/HEAP

    RODATA : 1040 ) / 81920 – constants (global, static) in RAM/HEAP

    BSS : 26432 ) – zeroed variables (global, static) in RAM/HEAP

    Sketch uses 305585 bytes (29%) of program storage space. Maximum is 1044464 bytes.

    Global variables use 28968 bytes (35%) of dynamic memory, leaving 52952 bytes for local variables. Maximum is 81920 bytes.

    esptool.py v3.0

    Serial port COM3

    Connecting…….._____….._____….._____….._____….._____….._____…..____Traceback (most recent call last):

    File “C:\Users\Kharazmi_Pc\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.0.2/tools/upload.py”, line 66, in

    esptool.main(cmdline)

    File “C:/Users/Kharazmi_Pc/AppData/Local/Arduino15/packages/esp8266/hardware/esp8266/3.0.2/tools/esptool\esptool.py”, line 3552, in main

    esp.connect(args.before, args.connect_attempts)

    File “C:/Users/Kharazmi_Pc/AppData/Local/Arduino15/packages/esp8266/hardware/esp8266/3.0.2/tools/esptool\esptool.py”, line 529, in connect

    raise FatalError(‘Failed to connect to %s: %s’ % (self.CHIP_NAME, last_error))

    esptool.FatalError: Failed to connect to ESP8266: Timed out waiting for packet header

    _

    the selected serial port _

    does not exist or your board is not connected

    This report would have more information with
    “Show verbose output during compilation”
    option enabled in File -> Preferences.
    سلام برای من این ارور رو میاره میشه راهنماییم کنید

    • سلام
      ارتباط بین کامپیوتر و ماژول صحیح برقرار نیست. از چه ماژولی ESP استفاده می کنید؟

  • ضمن عرض سلام و خسته نباشید
    میخواستم بدونم آیا این امکان وجود داره که یه برنامه برای کنترل این ماژول بجای صفحه مرورگر نوشت بطور مثال یک صفحه با چند کلید کنترل که پس از اجرا کردن برنامه کلیدها بهمراه عملکرد شون نمایش داده بشه