<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>نوشته های faraji.ali75</title><link>https://virgool.ir/feed/@faraji.ali75</link><description></description><language>fa</language><pubDate>2026-11-12 09:16:32</pubDate><image><url>https://files.virgool.ir/upload/users/54755/avatar/cW03Pz.png</url><title>faraji.ali75</title><link>https://virgool.ir/@faraji.ali75</link></image><item><title>کاربرد های جاوا اسکریپت</title><link>https://virgool.ir/@faraji.ali75/کاربرد-های-جاوا-اسکریپت-wko1lyocxnjt</link><description>جاوا اسکریپت یک زبان برنامه‌نویسی سطح بالا، پویا،  تفسیری است که برای پیاده‌سازی پیچیدگی‌هایی در صفحات وب طراحی شده‌ است. در اینجا برخی از کاربردهای اصلی جاوا اسکریپت آورده شده‌اند:1. تعاملی‌سازی وب‌سایت‌ها: جاوا اسکریپت امکان می‌دهد که صفحات وب با کاربران تعامل داشته باشند با استفاده از فرم‌ها، بازی‌ها، انیمیشن‌ها و غیره.2. برنامه‌های تک‌صفحه‌ای (Single Page Applications - SPA): به وسیله جاوا اسکریپت می‌توان برنامه‌های کاربردی وب ساخت که بدون بارگذاری مجدد کل صفحه‌، تنها بخش‌هایی از آن به روز می‌شوند.3. ساخت وب‌سایت‌های پویا: استفاده از DOM (Document Object Model) برای تغییر محتوای صفحات وب، سبک‌ها و عناصر مختلف بر اساس تعاملات کاربر.4. توسعه بازی‌های مرورگری: جاوا اسکریپت قادر است بازی‌های ۲بعدی و ۳بعدی را در مرورگرها به اجرا درآورد.5. ساخت اپلیکیشن‌های تلفن همراه: با استفاده از فریم‌ورک‌هایی مانند React Native و Ionic، توسعه‌دهندگان می‌توانند اپلیکیشن‌های تلفن همراه را با جاوا اسکریپت بسازند.6. سرور ساید: با استفاده از Node.js، جاوا اسکریپت می‌تواند برای ساخت برنامه‌های سرور ساید به کار رود که توانایی کنترل دیتابیس‌ها، فایل‌سیستم‌ها و بقیه فرآیندهای سمت سرور را دارد.7. ابزارهای توسعه وب: استفاده از اسکریپت‌هایی برای تسریع در فرآیندهای توسعه وب، مانند بسته‌بندی منابع، تست خودکار، و بهینه‌سازی عملکرد.8. آموزش و یادگیری: به دلیل جایگاه عمده‌ای که جاوا اسکریپت در توسعه وب دارد، یادگیری آن برای دانشجویان و مبتدیان در حوزه تکنولوژی اطلاعات اهمیت فراوانی پیدا کرده‌ است.9. خودکار سازی در صفحات وب: استفاده از جاوا اسکریپت برای خودکار کردن فرایندها در صفحات وب، مانند خودکارسازی تست‌ها یا پر کردن فرم‌ها.جاوا اسکریپت به دلیل انعطاف‌پذیری و قابلیت‌های فراوانش، ابزاری کلیدی در توسعه فرانت‌اند و بک‌اند وب به شمار می‌رود و نقش مهمی در اکوسیستم مدرن توسعه نرم‌افزار دارد.شما میتواند جهت یادگیری مقدماتی جاوا اسکریپت سایت کدایت را دنبال نمایید.</description><category>faraji.ali75</category><author>faraji.ali75</author><pubDate>Fri, 05 Jan 2024 18:34:34 +0330</pubDate></item><item><title>طراحی وپیاده سازی سیستم احراز هویت مبتنی بر rfid</title><link>https://virgool.ir/apieco/rfid-etliwfe0rthx</link><description>                                                                      به نام خدا      موضوع پروژه:طراحی وپیاده سازی سیستم احراز هویت       علی فرجی                                                                                                          فرشیدحبیبی                    ابزار مورد استفاده در پروژه· breadboard  · NodeMcu   OLED   · buzzer   . LED    . RFID                                                                                                                                    : NodeMcu    یک پلت فرم اوپن سورس در زمینه‌ی  IOT ( اینترنت اشیا یا به عبارت درست‌تر اینترنت چیزها)  می‌باشد. هسته‌ی NodeMCU ، چیپ ESP8266 ورژن ESP12 می‌باشد که از  WiFi پشتیبانی می‌کند و به وسیله‌ی آن می‌توان به شبکه‌ی وای فای متصل شد و اطلاعات را میان اینترنت یا سایر دستگاه‌ها جابه‌جا نمود. زبان برنامه‌نویسی این ماژول ، Lua می‌باشد. ولی از امکانات بسیار عالی این ماژول این است که می‌توان یا استفاده از IDE آردوینو  و با استفاده از دستوارات آردوینو بر روی آن به سادگی برنامه نویسی کرد. NodeMCU  یک پلت فرم اوپن سورس در زمینه‌ی  IoT ( اینترنت اشیا یا به عبارت درست‌تر اینترنت چیزها)  می‌باشد. هسته‌ی NodeMCU ، چیپ ESP8266 ورژن ESP12 می‌باشد که از  WiFi پشتیبانی می‌کند و به وسیله‌ی آن می‌توان به شبکه‌ی وای فای متصل شد و اطلاعات را میان اینترنت یا سایر دستگاه‌ها جابه‌جا نمود. زبان برنامه‌نویسی این ماژول ، Lua می‌باشد. ولی از امکانات بسیار عالی این ماژول این است که می‌توان یا استفاده از IDE آردوینو  و با استفاده از دستوارات آردوینو بر روی آن به سادگی برنامه نویسی کرد. تنظیمات اولیه در Arduino IDE صفحه setup  و configاین صفحه دارای چند قسمت مجزا می باشد قسمت اول برای connect  به wifi می باشد همانطور که در شکل زیر میبینیم میکروکنترولر ما می تواند چند حالت مختلف داشته باشد 1:station mode 2:AP_Mode 3: Multi_Mode  که در حالت اول ما به عنوان کلاینت به منبع وصل می شویم در حالت دوم از میکروکنترولر به عنوان accesspoint استفاده می نماییم و در حالت سوم که حالت multi  میباشد ما میکروکنترولر هم می تواند به صورت کلایت و هم accesspointعمل کند. میکروکنترولر درون خود یک حافظه اسپیفس دارد که حجم ان 4مگابایت می باشد ما فایل های text را که در ادامه توضیح داده خواهد شد را با استفاده از نرم افزار  winScp به حافظه ان با استفاده از FTP  انتقال می دهیم  حال با توجه به حالت های مختلف که میتواندقرار بگیرد به ان ip  اختصاص می دهیم هنگام لود شدن صفحه برخی توابع همزمان با ان اجرا می شوند.  =loading_scripts;function loading_scripts(){processwificonfig();processnetworkconfig();processauthconfig();}ابتدا تابع processwificonfig();  اجرا می شود که به صورت زیر می باشد.function processwificonfig(){reqwifi.open(&#34;POST&#34;, &#34;/WIFI.TXT&#34;, true);reqwifi. = responsewifi;reqwifi.send();  در این تابع یک تابع دیگر به نام responsewifi  فراخوانده می شودکه این تابع یک شی ایجاد کرده و از طریق JSON اطلاعات موجود در فایل WIFI.TEX که درون حافظه اسپیفس ما موجود است را پارس کرده و ان ها را داخل textbox  ها قرار می دهد.function responsewifi(){if (this.readyState == 4 &amp;&amp; this.status ==200){myObj = JSON.parse(this.responseText);document.getElementById(&#34;SSID&#34;).value = myObj.SSID;document.getElementById(&#34;presharedkey&#34;).value = myObj.presharedkey;document.getElementById(&#34;APname&#34;).value = myObj.APname;document.getElementById(&#34;APsharedkey&#34;).value = myObj.APsharedkey;var wifimodes = myObj.wifimode;if(wifimodes == &#34;WIFI_STA&#34;){document.getElementById(&#34;stationbt&#34;).checked = true;}if(wifimodes == &#34;WIFI_AP&#34;){document.getElementById(&#34;APbt&#34;).checked = true;}if(wifimodes == &#34;WIFI_AP_STA&#34;){document.getElementById(&#34;multibt&#34;).checked = true;}}}دکمه SCAN NETWORK برای پیدا کردن AP ها موجود می باشد هنگامی که دکمه زده می شود باید تمام AP های که از قبل موجود بودند باید حذف شوند بر ای این کار از تابع removeOptions()  استفاده میکنیم که به صورت زیر می باشدfunction removeOptions(){var i;for(i = combo.options.length - 1 ; i &gt;= 0 ; i--){combo.remove(i);}processscan();}در انتهای این تابع, تابع processscan()فراخوانده می شود که درون ان تابع Responsscan فراخوانی میشود از ap های که در دسترس هستند را در combobox نمایش می دهندfunction processscan(){reqscan.open(&#34;POST&#34;, &#34;/scan&#34;, true);reqscan. = responsescan;reqscan.send();}function responsescan(){if (this.readyState == 4 &amp;&amp; this.status ==200){myObj = JSON.parse(this.responseText); for ( i=0; i &lt; myObj.stations.length; i++){var option = document.createElement(&#34;option&#34;);option.value = myObj.stations[i];option = myObj.stations[i];combo(option);}document.getElementById(&#34;SSID&#34;).value = myObj.stations[0];document.getElementById(&#34;presharedkey&#34;).value = myObj.presharedkey;}} حال به قسمت دوم save network setup  می پردازیم در این قسمت می خواهیم انتخاب کنبم که ایا میخواهیم ip  اتوماتیک بدیم که این از طریق dhcp  سروری که داخل میکروکنترولر وجود دارد انجام می شود یا اینکه به صورت استاتیک ip  تخصیص دهیم. که برای این قسمت تابع processnetworkconfig();هنگام لود شدن صفحه فراخوانی می شودکه اطلاعات را از فایل NET.TXT خوانده و توسط یک تابع دیگر ان را پارس می کند و مقدار هایی را که پارسر کرده را درون المنت هاقرار می دهد.function responsenetwork(){if (this.readyState == 4 &amp;&amp; this.status ==200){myObj = JSON.parse(this.responseText);document.getElementById(&#34;IP&#34;).value = myObj.IPdocument.getElementById(&#34;SUBNET&#34;).value = myObj.SUBNET;document.getElementById(&#34;GATEWAY&#34;).value = myObj.GATEWAY;document.getElementById(&#34;DNS&#34;).value = myObj.DNS;var dhcp=myObj.DHCP;if (dhcp == &#34;on&#34;){document.getElementById(&#34;DHCP&#34;).checked = true;}}}function processnetworkconfig(){reqnet.open(&#34;POST&#34;, &#34;/NET.TXT&#34;, true);reqnet. = responsenetwork;reqnet.send();}قسمت سوم و چهارم در این قسمت ها ما می توانیم برای امنیت بیشتر یک صفحه لاگین مانند درست کنیم که وقتی برای اولین بار می خواهیم ورود کنیم باید user و password  را وارد کنیم قسمت چهارم برای ریستارت کردن برنامه به کار می رود که برایما دو انتخاب وجود 1.بازگشت به حالت اولیه 2.شروع مجدد حال به قسمت ARDUINO  ان می رسیم کتاب خانه هایی که میخواهیم از انها استفاده کنیم#include &lt;FS.h&gt;  حافظه اسپیفس      #include &lt;ESP8266WiFi.h&gt;  #include &lt;ArduinoJson.h&gt;  #include &lt;ESP8266WebServer.h&gt; #include &lt;ESP8266mDNS.h&gt;   #include &lt;DNSServer.h&gt; #include &lt;Wire.h&gt;  ارتباط I2C #include &#34;SSD1306.h&#34;    راه اندازی OLED #include &lt;ESP8266FtpServer.h&gt;در ابتدای کار باید وب سرور DNSسرور FTP سرور خود را راه اندازی کنیم که برای انها پورت هابی را تخصیص می دهیمESP8266WebServer server(80); const byte DNS_PORT = 53;DNSServer dnsServer;File myFile ;FtpServer ftpSrv;کدهایی که در اردوینو قرار می گیرند در یکی از دو قسمت setup و loop قرار میگیرند در قسمت setup حافظه اسپیفس راه اندازی می شود و تابع read_wifi_config() فراخوانده می شود اگر راه اندازی حافظه با مشکل روبه رو شود یک پیغام خطا دریافت می کنیم و پس از ان esp ما ریستارت می شودdisplay.display();if (!SPIFFS.begin()) { display.drawString(0, 26, &#34;Faild!!check SPIFFS&#34;);display.display();delay(60000);ESP.restart();}display.drawString(0, 26, &#34;SPIFFS OK&#34;);display.display();delay(1000);read_wifi_config();در قسمت وب قسمت های داشتیم که هرکدام از انها دکمه مخصوص خود را داشتند هنگامی این دکمه ها زده شوند اطلاعاتی که داخل textboxها قرار گرفته در هر یک از فایل های مربوطه دخیره می شوند به کمک دستورات زیر این کار انجام می شود.server.on(&#34;/wificonfig&#34;,wifi_config); server.on(&#34;/networkconfig&#34;,network_config);server.on(&#34;/authconfig&#34;,auth_config);server.on(&#34;/scan&#34;,scan_wifi);server.on(&#34;/command&#34;,Command);server.on(&#34;/format&#34;,SPIFFS_format);حال سراغ تابع read_wifi_config() می رویم این تابع مسول پارس کردن اطلاعاتی است که درون فایل های ما قرار گرفته اند پس به این ترتیب هنگامی که صفحه لود می شود توابعی که در قسمت وب تعریف شده اند از این مقدار ها استفاده می کنندین تابع اول سراغ فایل wifi.txt میرود اطلاعاتی که درون این فایل ذخیره شده اند درون یک متغییر ریخته می شود سپس یک شی از جنس json ساخته شده و اطلاعاتی که درون متغییر بود را به وسیله این شی پارس میشودvoid read_wifi_config(){myFile = SPIFFS.open(&#34;/WIFI.TXT&#34;,&#34;r&#34;);config_str = myFile.readString();DynamicJsonBuffer jsonBuffer1;JsonObject&amp; json1 = jsonBuffer1.parseObject(config_str); format from string_strwifi_Mode=json1[&#34;wifimode&#34;].as&lt;String&gt;();ssid=json1[&#34;SSID&#34;] ;presharedkey=json1[&#34;presharedkey&#34;];apname=json1[&#34;APname&#34;];apsharedkey=json1[&#34;APsharedkey&#34;];  myFile.close();بعد از اجرای این قسمت نوبت قسمت دوم میرسد که در این قسمت فایل net.txt خوانده شده و مانند بالا برای ان یک متغییر تعریف شده اطلاعات درون ان ریخته شده و به وسیله یک شی json  پارس می شوند لازم به ذکر است که ip ها باید به صورت رشته ذخیره شود myFile = SPIFFS.open(&#34;/NET.TXT&#34;,&#34;r&#34;);config_str = myFile.readString();DynamicJsonBuffer jsonBuffer2;JsonObject&amp; json2 = jsonBuffer2.parseObject(config_str); DHCP = json2[&#34;DHCP&#34;].as&lt;String&gt;();IP_str = json2[&#34;IP&#34;].as&lt;String&gt;();SUBNET_str = json2[&#34;SUBNET&#34;].as&lt;String&gt;();GATEWAY_str = json2[&#34;GATEWAY&#34;].as&lt;String&gt;();DNS_str = json2[&#34;DNS&#34;].as&lt;String&gt;();myFile.close();حال سراغ فایل AUTH.TXT رفته و همانند کارهایی که برای موارد بالا گفته شد براین هم انجام میشود ودر اخر تابع run_wifi() فراخوانی میشودmyFile = SPIFFS.open(&#34;/AUTH.TXT&#34;,&#34;r&#34;);config_str = myFile.readString();DynamicJsonBuffer jsonBuffer3;JsonObject&amp; json3 = jsonBuffer3.parseObject(config_str); USER_str= json3[&#34;USER&#34;].as&lt;String&gt;();PASSWORD_str = json3[&#34;PASSWORD&#34;].as&lt;String&gt;();myFile.close()run_wifi();}تابعrun_wifi() با استفاده از تابع string_to_ip() که در ادامه به می پردازیم ip های موجود را به رشته تبدیل می نمایید void run_wifi(){String_to_IP(IP_str,IP);String_to_IP(SUBNET_str,SUBNET);String_to_IP(GATEWAY_str,GATEWAY);String_to_IP(DNS_str,DNS); }دلیل استفاده از تابع string_to_ip() به این صورت می باشدکه در اردوینو امکان ذخیره ip به طور مثال صورت 192.168.1.5 نداریم و باید به صورت 192,168,1,5 ذخیره شود که به کمک این تابع انجام می شود که به صورت زیر می باشدvoid String_to_IP(String str,IPAddress&amp; IP_addr) { int c1 = str.indexOf(&#39;.&#39;); int c2 = str.indexOf(&#39;.&#39;,c1+1); int c3 = str.indexOf(&#39;.&#39;,c2+1); int ln = str.length();//last place to stopIP_addr[0] = str.substring(0,c1).toInt();IP_addr[1] = str.substring(c1+1,c2).toInt();IP_addr[2] = str.substring(c2+1,c3).toInt();IP_addr[3] = str.substring(c3+1,ln).toInt();}در قسمت command  گفته شد دو انتخاب داریم یکی بازشگت به حالت اولیه و ریستارت کردن میکروکنتروراگر (بازگشت به حالت اولیه)default  انتخاب شود به جز چند فیلد ,همه فیلد ها مقدار null  را به خود میگیرند در غیر این صورت ریستارت می شود.نحوه اتصال  سناریوکلی  در ابتدا قرار است که ما توسط ماژول rfid و nodemcu کارت های 13.56 مگاهرتز خود را بخوانیم بعد از خواندن nodemcu  به فایل (برای مثال rfid.php) که درون اپاچی سرور قرار دارد وصل میشود که درخواست های rfid  که شامل اطلاعات کارت (uid)میشودرا بگیرد پس بعد از خواندن کارت uid ان فرستاده میشود سپس چک می شود که وضعیت این uid در سرور به چه  صورت است allow  یا notallow یا تعریف نشده که این اطلاعات را به صورت json  به nodemcu فرستاده می شود nodemcu اطلاعات فرستاده شده توسط سرور را میخواند اگر allow بود مثلا قفل برای ما باز می شود و لی اگر notallow بود باز نمیشود و همچنین اگر تعریف نشده باشدکار خود ادامه می دهد.در قسمت وب دو حالت normalmode و registermode را داریم هنگامی که گزینه registermode  زده می شود یک پیغام  xhttp  به nodemcu  فرستاده می شود سپس nodemcu  فایل json  را که از سرور گرفته به صفحه وب میفرستد اطلاعات فرستاده شده توسط صفحه خوانده می شود  انها را درون عناصری که در صفحه می باشد  را نمایش می دهد حال ما سه گزینه مختلف داریم ذخیره اطلاعات,حذف و بروز کردن اطلاعات کارت, برای مثال اگر ما گزینه ذخیره کردن را بزنیم اطلاعات به صورت xhttp و اژاکس به nodemcu فرستاده می شود سپس nodemcu به فایل   (برای مثال register.php  ) وصل شده تا اطلاعاتی که از برازر درریافت کردیم را به سرور بفرستد سپس uid  ان چک شود اگر از قبل وجود داشته باشد از طریق nodemcu به برازر پیغام میدهد که این کارت از قبل وجود دارد در غیر ان صورت در سرور ذخیره شده و پیغام ذخیره کارت را به برازر می فرستد برای بروزرسانی و حذف نیز شیوه کار به همین صورت است فایل register.php  علاوه بر اطلاعاتی که می فرستد یه جدولی هم همراه ان ارسال میشود که مشخصات کارت های موجود در سرور را نشان می دهد.حال برای ثبت کردن مثلا تاریخ باید روی normalmode  قراربدیهم تا در سرور ذخیره شود.لینکهای مفید:آموزش مقدماتی جاوا اسکریپت و آموزش مقدماتی  کاتلین  را با کدایت شروع نمایید.</description><category>faraji.ali75</category><author>faraji.ali75</author><pubDate>Thu, 27 Jun 2019 01:39:59 +0430</pubDate></item></channel></rss>