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

طراحی و پیاده سازی سیستم هشدار صوتی یادآور دارو با ESP8266

pill-reminder-alarm-with-nodemcu-esp8266-webserver-and-df-player-digispark
نوشته شده توسط معین صابری

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

 


نحوه عملکرد سیستم هشدار صوتی یادآور دارو


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

 


برد NODEMCU


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

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

 

برد NODEMCU که از پردازنده ESP8266-12E بهره می برد؛ قادر به برقراری ارتباط وای فای و اجرای برنامه های کاربر است. این برد دارای رابط USB جهت پروگرام آسان از طریق کابل است. همچنین این ماژول دارای رگولاتور ۳٫۳ جهت تبدیل ولتاژ ۵ USB به ولتاژ مورد نیاز برد است. جهت راه اندازی و کار با این برد، سلسله آموزشی در دیجی اسپارک منتشر شده که با کلیک بر روی این لینک قابل دسترسی است. این پروژه از این برد به عنوان واسط ارتباطی وای فای و پردازنده مرکزی بهره می برد. با دریافت زمان از کاربر، برد شروع به شمارش کرده و در موعد مقرر، به ماژول پخش صدا فرمان لازم را صادر می نماید. قسمت بعدی ماژول پخش صدا را مورد بررسی قرار خواهیم داد. همچنین، در صورتیکه به اطلاعات بیشتر در رابطه با برد NODEMCU علاقه مند هستید، جدول زیر برخی از پروژه های منتشر شده با این برد در دیجی اسپارک را نمایش می دهد.

 

لینک شرح پروژه عنوان پروژه
لینک پروژه، کلیک کنید الان که در حال نوشتن این پروژه هستم، در سام کافه فرشته نشسته ام! برنامه نویسی ها انجام شده و سنسور در گوشه ای از میز چوبی قرار گرفته شده است. اتصال سنسور مادون قرمز اینفراد E18-D80NK را به برد وای فای Nodemcu وصل کرده ام و صفحه ی پلتفرم نمایش داده می‌شود. قرار است با عبور هر فرد از مقابل سنسور، فرد را تشخیص داده و سپس تعدا رفت و آمد در کافه را برای من نمایش دهد. پروژه افراد شمار با سنسور مادون قرمز Nodemcu و پلتفرم اینترنت اشیا uBeac

 

لینک پروژه کلیک کنید چقدر با پلتفرم های اینترنت اشیا آشنا هسنید؟ به اولین چیزی که پس از شنیدن اسم پلفترم Platfrom در ذهن خود تصور می‌کنید فکر کنید. دنیای پلتفرم ها غیر از واقعیب برای من شبیه به یک فضای ابری است که دیتاها مانند اجسام معلق در هوا در داد و ستد با یکدیگر هستند 🙂 با ترجمه‌ی کلمه ی پلتفرم به سکو میرسیم. از این سکو می‌توان به بالاترین و بهترین مکان برای مدیریت اشاره کرد. در ادامه با اجرای پروژه دما رطوبت IoT روش کار با پلتفرم ها و دریافت دیتا و نمایش را یاد خواهیم گرفت. پروژه مانیتور دما رطوبت محیط با NodeMcu و پلتفرم اینترنت اشیا uBeac

 

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

 

 


ماژول DFPLAYER MINI


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

ماژول mp3 player df mini - دیجی اسپارک

 

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

 


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


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

شماتیک پروژه یادآور دارو با esp8266 - دیجی اسپارک

 

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

DF PLAYER NODEMCU
VCC VIN
GND GND
RX D2
TX D1

 

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

 


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


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

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

 

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

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

 

پس از این مرحله، نوبت به نصب کتابخانه پخش صدای DF MINI PLAYER می رسد. مطابق مرحله، پیشین با کلیک بر روی منوی Tools وسپس انتخاب گزینه Manage Libraries، در کادر جست و جو، عبارت DFPlayer_Mini را تایپ کرده و مطابق کادر قرمز رنگ در تصویر زیر، کتابخانه DF ROBOT را نصب نمایید.

نصب کتابخانه DF MINI PLAYER - دیجی اسپارک

 


کدهای پروژه یادآور دارو


پس از بررسی شماتیک و نصب کتابخانه ها، نوبت به آپلود برنامه روی برد می رسد. به همین منظور از منوی Tools گزینه board و پس از آن برد NODEMCU را انتخاب کنید. توجه داشته باشید که ورژن NODEMCU استفاده شده در این پروژه ۰٫۹ است. کدهای زیر را روی برد آپلود کنید.

 

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

 

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

 


 اجرای پروژه یادآور دارو


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

اتصال یادآور دارو به شبکه وای فای - دیجی اسپارک

 

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

۱۹۲٫۱۶۸٫۴٫۱/?data=1,2,30

 

 با وارد کردن عبارت فوق در مرورگر، تنظیمات ارسال می شود. همانطور که در سلسله آموزش های ماژول ESP گفته شد(روی این لینک برای اطلاعات بیشتر کلیک کنید) جهت ارسال داده می توانیم از متد GET استفاده کنیم. در عبارت فوق تحت متد GET داده ها در متغیر data قرار گرفته و ارسال می گردند.  توجه داشته باشید که روز، ساعت و دقیقه پس از متغیر data(بعد از عبارت مساوی) به ترتیب از چپ به راست درج شده و با یک ویرگول از هم جدا می شوند. پس از ارسال داده ها و دریافت آن توسط سرور، عبارت زیر در مرورگر نمایش داده می شود.

وب سرور در پروژه یادآور دارو با esp8266 - دیجی اسپارک

 

 پس از دریافت زمان، صدایی که در کارت SD ذخیره کرده بودید، در موعد مقرر پخش خواهد شد. توجه داشته باشید در کارت SD تنها یک فایل صوتی وجود داشته باشد.

اجرای پروژه یادآور دارو با nodemcu و df player - دیجی اسپارک

 


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


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

 


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


برد NODEMCU

ماژول DF PLAYER

بلندگو

 


جمع بندی


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

 

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

 

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

معین صابری

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

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

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

۱۲ دیدگاه

  • سلام مهندس بسیار عالی بود
    فقط اخر پروژه کمی پیچیده شد که باید به وای‌فای دستگاه وصل بشیم

    • سلام
      خواهش می کنم
      سعی کردم دریافت ورودی از کاربر ساده باشد. اگر واسط گرافیکی روی مرورگر طراحی شود، بهتر باشد.

  • و یک مورد دیگر اینکه
    بعضی دارو ها مثلاً هر ۸ ساعت یک بار باید مصرف بشه
    که برای این مورد باید دستگاه را اپدیت کنید
    و بعضی مواقع نیاز هست که طرف مثلاً دو نمونه دارو مصرف کنه که این مورد هم باید در اپدیت بعدی قرار بدید
    و ای کاش وقتی که به دستگاه متصل می‌شدیم و ای پی مخصوص وارد مرورگر میکردیم بصورت اتوماتیک یه صفحه باز بشه که تمام این تنظیمات را بشه اتوماتیک روی دستگاه اعمال کرد

    • ممنونم از پیشنهادات شما
      بله این موارد هم باید اعمال شوند.
      من هم هم نظر هستم با شما، باید یک صفحه تنظیمات در مرورگر ایجاد کنیم.

    • سلام و ببخشید که دیر پاسخ می دهم
      ایده جالبی هست، روی آن باید کار کنیم. ولی آموزش مشابهی پیشتر منتشر شده که با کلیک بر روی این لینک قابل مظالعه هست.

  • سلام وقتتون بخیر
    چرا موقع وارد کردن کد ها ارور میده و میگه کد اشتباه !! من فقط یک هفته تا تحویل پروژم زمان دارم

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

  • سلام مهندس من وقتی کد رو کاموایل میکنم این ارور رو میده Arduino: 1.8.19 (Linux), Board: “Arduino Uno”

    WARNING: library ESPWebServer-master claims to run on esp8266 architecture(s) and may be incompatible with your current board which runs on avr architecture(s).
    In file included from /home/mohammad/Arduino/yad_avar_daro/yad_avar_daro.ino:2:0:
    /home/mohammad/Arduino/libraries/ESPWebServer-master/src/ESP8266WebServer.h:70:30: error: expected ‘)’ before ‘addr’
    ESP8266WebServer(IPAddress addr, int port = 80);
    ^~~~
    /home/mohammad/Arduino/libraries/ESPWebServer-master/src/ESP8266WebServer.h:83:16: error: ‘function’ in namespace ‘std’ does not name a template type
    typedef std::function THandlerFunction;
    ^~~~~~~~
    /home/mohammad/Arduino/libraries/ESPWebServer-master/src/ESP8266WebServer.h:84:30: error: ‘THandlerFunction’ has not been declared
    void on(const String &uri, THandlerFunction handler);
    ^~~~~~~~~~~~~~~~
    /home/mohammad/Arduino/libraries/ESPWebServer-master/src/ESP8266WebServer.h:85:49: error: ‘THandlerFunction’ has not been declared
    void on(const String &uri, HTTPMethod method, THandlerFunction fn);
    ^~~~~~~~~~~~~~~~
    /home/mohammad/Arduino/libraries/ESPWebServer-master/src/ESP8266WebServer.h:86:49: error: ‘THandlerFunction’ has not been declared
    void on(const String &uri, HTTPMethod method, THandlerFunction fn, THandlerFunction ufn);
    ^~~~~~~~~~~~~~~~
    /home/mohammad/Arduino/libraries/ESPWebServer-master/src/ESP8266WebServer.h:86:70: error: ‘THandlerFunction’ has not been declared
    void on(const String &uri, HTTPMethod method, THandlerFunction fn, THandlerFunction ufn);
    ^~~~~~~~~~~~~~~~
    /home/mohammad/Arduino/libraries/ESPWebServer-master/src/ESP8266WebServer.h:89:19: error: ‘THandlerFunction’ has not been declared
    void onNotFound(THandlerFunction fn); //called when handler is not assigned
    ^~~~~~~~~~~~~~~~
    /home/mohammad/Arduino/libraries/ESPWebServer-master/src/ESP8266WebServer.h:90:21: error: ‘THandlerFunction’ has not been declared
    void onFileUpload(THandlerFunction fn); //handle file uploads
    ^~~~~~~~~~~~~~~~
    /home/mohammad/Arduino/libraries/ESPWebServer-master/src/ESP8266WebServer.h:94:3: error: ‘WiFiClient’ does not name a type
    WiFiClient client() { return _currentClient; }
    ^~~~~~~~~~
    /home/mohammad/Arduino/libraries/ESPWebServer-master/src/ESP8266WebServer.h:143:22: error: ‘WiFiClient’ has not been declared
    bool _parseRequest(WiFiClient& client);
    ^~~~~~~~~~
    /home/mohammad/Arduino/libraries/ESPWebServer-master/src/ESP8266WebServer.h:146:19: error: ‘WiFiClient’ has not been declared
    bool _parseForm(WiFiClient& client, String boundary, uint32_t len);
    ^~~~~~~~~~
    /home/mohammad/Arduino/libraries/ESPWebServer-master/src/ESP8266WebServer.h:149:27: error: ‘WiFiClient’ has not been declared
    uint8_t _uploadReadByte(WiFiClient& client);
    ^~~~~~~~~~
    /home/mohammad/Arduino/libraries/ESPWebServer-master/src/ESP8266WebServer.h:158:3: error: ‘WiFiServer’ does not name a type
    WiFiServer _server;
    ^~~~~~~~~~
    /home/mohammad/Arduino/libraries/ESPWebServer-master/src/ESP8266WebServer.h:160:3: error: ‘WiFiClient’ does not name a type
    WiFiClient _currentClient;
    ^~~~~~~~~~
    /home/mohammad/Arduino/libraries/ESPWebServer-master/src/ESP8266WebServer.h:170:3: error: ‘THandlerFunction’ does not name a type
    THandlerFunction _notFoundHandler;
    ^~~~~~~~~~~~~~~~
    /home/mohammad/Arduino/libraries/ESPWebServer-master/src/ESP8266WebServer.h:171:3: error: ‘THandlerFunction’ does not name a type
    THandlerFunction _fileUploadHandler;
    ^~~~~~~~~~~~~~~~
    /home/mohammad/Arduino/libraries/ESPWebServer-master/src/ESP8266WebServer.h: In member function ‘size_t ESP8266WebServer::streamFile(T&, const String&)’:
    /home/mohammad/Arduino/libraries/ESPWebServer-master/src/ESP8266WebServer.h:137:10: error: ‘_currentClient’ was not declared in this scope
    return _currentClient.write(file);
    ^~~~~~~~~~~~~~
    /home/mohammad/Arduino/libraries/ESPWebServer-master/src/ESP8266WebServer.h:137:10: note: suggested alternative: ‘_currentUri’
    return _currentClient.write(file);
    ^~~~~~~~~~~~~~
    _currentUri
    /home/mohammad/Arduino/yad_avar_daro/yad_avar_daro.ino: In function ‘void setup()’:
    yad_avar_daro:27:3: error: ‘WiFi’ was not declared in this scope
    WiFi.mode(‘WIFI_AP’); //تنظیم مد ماژول در حالت نقطه دسترسی
    ^~~~
    Multiple libraries were found for “SoftwareSerial.h”
    Used: /home/mohammad/Downloads/arduino-1.8.19-linux64/arduino-1.8.19/hardware/arduino/avr/libraries/SoftwareSerial
    Not used: /home/mohammad/Arduino/libraries/EspSoftwareSerial
    Multiple libraries were found for “WiFiServer.h”
    Used: /home/mohammad/Arduino/libraries/WiFi101
    Not used: /home/mohammad/Arduino/libraries/WiFi_Link
    Not used: /home/mohammad/Downloads/arduino-1.8.19-linux64/arduino-1.8.19/libraries/WiFi
    Not used: /home/mohammad/Arduino/libraries/WiFiNINA
    exit status 1
    ‘WiFi’ was not declared in this scope

    This report would have more information with
    “Show verbose output during compilation”
    option enabled in File -> Preferences.

    • با سلام
      چند مورد کتابخانه سریال در سیستم شما شناسایی شده است به همین دلیل این مشکل را مشاهده می‌کنید. مورد بعدی هم اینکه کدها را به درستی کپی کرده و انتقال دهید.

  • سلام مهندس من وقتی کد رو کاموایل می کنم این ارور رو میده Arduino: 1.8.19 (Linux), Board: “Arduino Uno”

    WARNING: library ESPWebServer-master claims to run on esp8266 architecture(s) and may be incompatible with your current board which runs on avr architecture(s).
    In file included from /home/mohammad/Arduino/yad_avar_daro/yad_avar_daro.ino:2:0:
    /home/mohammad/Arduino/libraries/ESPWebServer-master/src/ESP8266WebServer.h:70:30: error: expected ‘)’ before ‘addr’
    ESP8266WebServer(IPAddress addr, int port = 80);
    ^~~~
    /home/mohammad/Arduino/libraries/ESPWebServer-master/src/ESP8266WebServer.h:83:16: error: ‘function’ in namespace ‘std’ does not name a template type
    typedef std::function THandlerFunction;
    ^~~~~~~~
    /home/mohammad/Arduino/libraries/ESPWebServer-master/src/ESP8266WebServer.h:84:30: error: ‘THandlerFunction’ has not been declared
    void on(const String &uri, THandlerFunction handler);
    ^~~~~~~~~~~~~~~~
    /home/mohammad/Arduino/libraries/ESPWebServer-master/src/ESP8266WebServer.h:85:49: error: ‘THandlerFunction’ has not been declared
    void on(const String &uri, HTTPMethod method, THandlerFunction fn);
    ^~~~~~~~~~~~~~~~
    /home/mohammad/Arduino/libraries/ESPWebServer-master/src/ESP8266WebServer.h:86:49: error: ‘THandlerFunction’ has not been declared
    void on(const String &uri, HTTPMethod method, THandlerFunction fn, THandlerFunction ufn);
    ^~~~~~~~~~~~~~~~
    /home/mohammad/Arduino/libraries/ESPWebServer-master/src/ESP8266WebServer.h:86:70: error: ‘THandlerFunction’ has not been declared
    void on(const String &uri, HTTPMethod method, THandlerFunction fn, THandlerFunction ufn);
    ^~~~~~~~~~~~~~~~
    /home/mohammad/Arduino/libraries/ESPWebServer-master/src/ESP8266WebServer.h:89:19: error: ‘THandlerFunction’ has not been declared
    void onNotFound(THandlerFunction fn); //called when handler is not assigned
    ^~~~~~~~~~~~~~~~
    /home/mohammad/Arduino/libraries/ESPWebServer-master/src/ESP8266WebServer.h:90:21: error: ‘THandlerFunction’ has not been declared
    void onFileUpload(THandlerFunction fn); //handle file uploads
    ^~~~~~~~~~~~~~~~
    /home/mohammad/Arduino/libraries/ESPWebServer-master/src/ESP8266WebServer.h:94:3: error: ‘WiFiClient’ does not name a type
    WiFiClient client() { return _currentClient; }
    ^~~~~~~~~~
    /home/mohammad/Arduino/libraries/ESPWebServer-master/src/ESP8266WebServer.h:143:22: error: ‘WiFiClient’ has not been declared
    bool _parseRequest(WiFiClient& client);
    ^~~~~~~~~~
    /home/mohammad/Arduino/libraries/ESPWebServer-master/src/ESP8266WebServer.h:146:19: error: ‘WiFiClient’ has not been declared
    bool _parseForm(WiFiClient& client, String boundary, uint32_t len);
    ^~~~~~~~~~
    /home/mohammad/Arduino/libraries/ESPWebServer-master/src/ESP8266WebServer.h:149:27: error: ‘WiFiClient’ has not been declared
    uint8_t _uploadReadByte(WiFiClient& client);
    ^~~~~~~~~~
    /home/mohammad/Arduino/libraries/ESPWebServer-master/src/ESP8266WebServer.h:158:3: error: ‘WiFiServer’ does not name a type
    WiFiServer _server;
    ^~~~~~~~~~
    /home/mohammad/Arduino/libraries/ESPWebServer-master/src/ESP8266WebServer.h:160:3: error: ‘WiFiClient’ does not name a type
    WiFiClient _currentClient;
    ^~~~~~~~~~
    /home/mohammad/Arduino/libraries/ESPWebServer-master/src/ESP8266WebServer.h:170:3: error: ‘THandlerFunction’ does not name a type
    THandlerFunction _notFoundHandler;
    ^~~~~~~~~~~~~~~~
    /home/mohammad/Arduino/libraries/ESPWebServer-master/src/ESP8266WebServer.h:171:3: error: ‘THandlerFunction’ does not name a type
    THandlerFunction _fileUploadHandler;
    ^~~~~~~~~~~~~~~~
    /home/mohammad/Arduino/libraries/ESPWebServer-master/src/ESP8266WebServer.h: In member function ‘size_t ESP8266WebServer::streamFile(T&, const String&)’:
    /home/mohammad/Arduino/libraries/ESPWebServer-master/src/ESP8266WebServer.h:137:10: error: ‘_currentClient’ was not declared in this scope
    return _currentClient.write(file);
    ^~~~~~~~~~~~~~
    /home/mohammad/Arduino/libraries/ESPWebServer-master/src/ESP8266WebServer.h:137:10: note: suggested alternative: ‘_currentUri’
    return _currentClient.write(file);
    ^~~~~~~~~~~~~~
    _currentUri
    /home/mohammad/Arduino/yad_avar_daro/yad_avar_daro.ino: In function ‘void setup()’:
    yad_avar_daro:27:3: error: ‘WiFi’ was not declared in this scope
    WiFi.mode(‘WIFI_AP’); //تنظیم مد ماژول در حالت نقطه دسترسی
    ^~~~
    Multiple libraries were found for “SoftwareSerial.h”
    Used: /home/mohammad/Downloads/arduino-1.8.19-linux64/arduino-1.8.19/hardware/arduino/avr/libraries/SoftwareSerial
    Not used: /home/mohammad/Arduino/libraries/EspSoftwareSerial
    Multiple libraries were found for “WiFiServer.h”
    Used: /home/mohammad/Arduino/libraries/WiFi101
    Not used: /home/mohammad/Arduino/libraries/WiFi_Link
    Not used: /home/mohammad/Downloads/arduino-1.8.19-linux64/arduino-1.8.19/libraries/WiFi
    Not used: /home/mohammad/Arduino/libraries/WiFiNINA
    exit status 1
    ‘WiFi’ was not declared in this scope

    This report would have more information with
    “Show verbose output during compilation”
    option enabled in File -> Preferences.

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