به نام خداوند بخشنده و مهربان!

سلام عرض میکنم خدمت دوستان عزیز و هموطنان خوبم!

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

خوب بریم سر بحث اصلی:

ببینید بهترین چیز برای کنترل کردن چیزیه که بشه از همه جا بهش دسترسی داشت! الان میتونیم بگیم اینترنت یک قابلیتی هست که میتونیم به وسیله اون با سر تا سر جهان ارتباط برقرار کنیم! پس بهترین چیز برای کنترل کردن همون اینترنته چون همه جا دردسترس هست! ما میخوایم ماژول ESP8266 مدل 01 رو به اینترنت وصل کنیم برای اینکار نیاز به یک مودم وایرلس یا همون وایفای داریم که به اون وصل بشیم و اون برای ما یک واسط باشه که به اینترنت وصل بشیم!

ببینید همونطور که گفتم من از ماژول ESP8266-01 استفاده میکنم. قسمت ارزونی داره و بیشتر در دسترسه همچنین پایه هاش بیشتر از مدل های دیگه کار باهاش آسونتره! خوب همونطور که میدونید این ماژول از AT-Command ها استفاده میکنه و ما باید با دستوراتی که بهش میدیم اونو کنترل کنیم! اما شرکت سازنده اونو به این ویژگی محدود نکرده و آیسی یا تراشه ی روی برد رو قابل برنامه ریزی قرار داده یعنی شما میتونید برنامه متناسب به نیاز خودتون رو روش بریزید! توجه داشته باشید که شاید بتونیم بگیم که این آیسی مثل یه میکروکنترلر وایفای دار میونه که میشه اونو برنامه نویسی کرد!

خوب برنامه اصلی یا همون AT-Command که به طور پیشفرض روش هست برای اتصال به اینترنت زیاد جالب نیست و برای اینکار ساخته و بهینه نشده یکی از بهترین فریمور ها (فریمور برنامه ای هست که روی آیسی میریزیم و اونو کنترل میکنیم مثل همون AT-Command) که خیلی هم معروفه nodeMCU هستش که قابلیت های بسیار زیادی همراه با کاربری بسیار ساده ای رو در احتیار ما میزاره هست! پس ما باید اول اینو روی آیسی مون پروگرم یا فلش کنیم (این دو کلمه مترادف هستن تقریبا)

برای اینکار ابتدا فایل فایل باینری مورد نیاز رو دانلود کنید توجه کنید که حافطه فلش این آیسی تنها 512 کیلوبایت هست پس این فایل طبیعتا باید کمتر از این مقدار باشه! نکته ای که حائز اهمیت هست اینه که Firmware ما همون nodeMCU همونطور که گفتم بسیار قابلیت داره و چون حجم زیادی کد براش نوشته شده پس ممکنه حجمش بیش از 512 کیلوبایت بشه! برای رفع این مشکل ما میایم قابلیت هایی که فعلا به درد ما نمیخوره رو حذف میکنیم و اون مهم هاش رو انتخاب میکنیم و آیسی خودمون رو پروگرم میکنیم!

خوب حالا چطور میشه بهش بگیم که ما کدوم قابلیت رو میخوایم و کدوم رو نمیخوایم؟ شرکت تولید کننده ی این فریمور یک سایتی زده که ما میتونیم چیز هایی که میخوایم رو توی اون انتخاب کنیم و فایل bin رو دریافت کنیم و روی ESP8266 مون فلش کنیم! پس برای اینکار به سایت زیر برید:

کلیک کنید

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

در آخر روی Start your Build کلیک کنید تا اونو براتون کامپایل کنه و بفرسته! فقط شاید کمی طول بکشه تا براتون بفرسته مثلا 2 یا 3 دقیقه و یا کمتر بیشتر

خوب لازم میدونم یه چیزایی رو الان اینجا بگم: ببینید من اولین باری که nodeMCU رو پروگرم کردم با برنامه ی ESP8266Flasher بود ولی خوب به دو دلیل اونو رها کردم دلیل اول اینکه فقط یک بار تونستم باهاش سالم فلش کنم یعنی دفعات بعد دیگه کار نکرد دلیل دوم اینکه از یک nodeMCU پیشفرض استفاده میکنه یعنی دیگه لازم نیست برید توی سایت بالا و برنامه رو کامپایل کنید! از همین برنامه که استفاده کنید خودش nodeMCU رو براتون به طور پیشفرض فلش (پروگرم) میکنه (شما میتونید این برنامه رو هم تست کنید) برای دانلود به این سایت برید و طبق معماری ویندوزی که نصب کردید Win32 یا Win64 رو دانلود کنید! (شاید فیلترشکن بخواد)

خوب اگه تونستید با این برنامه فلش کنید که بهتر اگه نتونستید از این برنامه ثانوی استفاده کنید (برای دانلود کلیک کنید) البته برای کار با این برنامه باید فایل bin رو که دانلود کردید اینجا استفاده کنید. اگه هنوز فایل bin رو از سایت بالا دانلود نکردید یا توی دانلودش مشکل دارید یا توی خود فایل مشکل دارید این فایل رو دانلود کنید و این فایل رو فلش کنید (برای دانلود کلیک کنید) توجه کنید تمام ویژگی های این فایل پیشفرض است!

باز هم اگه با مشکل برخوردید: مثلا مشکلی که من با اون بخوردم بعد از فلش اون و پروگرم کردن nodeMCU این بود که وقتی ماژول رو به کامپیوتر وصل میکردم فوری کاراکتر های نامفهموم و پی در پی ارسال میکرد و متوقف هم نمیشد کلا معلوم بود بد فلش شده و مشکل داره! اگه از شما هم اینجوری شد نگران نباشید انقدر سعی کنید تا نتیجه بگیرید و مطمئن باشید درست میشه! نکته ی دیگه ای که باید بگم اینه که من وقتی nodeMCU رو با برنامه ی ثانوی به این لینک فلش میکردم برای بار اول کار میکرد ولی دیگه نتونستم مثل اول فلشش کنم تا اینکه فهمیدم باید اول یه فایل دیگه رو فلش کنم و بعد اینو فلش کنم تا درست کار کنه اون فایل اولیه درواقع همون فریمور پیشفرض یا همون AT-Command خودمون بود (برای دانلود کلیک کنید) شما هم اگه این مشکل رو داشتید اینو تست کنید شاید درست بشه! البته اصلا اینا بهم ربطی ندارن و من شانسکی این اتفاق برام افتاد یعنی فک نکنید حتما برای فلش nodeMCU باید اول AT-Command روش فلش شده باشه بعد اونو روش فلش کرد ولی خوب چون این روش جواب داد گفتم بگم شاید به دردتون بخوره! (اگه شما میدونید چرا این روش جواب میده و راه حل اصلی این مشکل چیه بگید تا من اینجا بزارم)

خوب ولی باید بگم من تا اینجای راه رو اومدم ولی وقتی میخواستم فایلی که از این سایت دانلود کرده بودم رو فلش کنم با هیچکئوم از روش های بالا حواب نگرفتم تا اینکه با برنامه ی NodeMCU-PyFlasher-0.2.0 آشنا شدم (برای دانلود کلیک کنید) من با این برنامه فلش کردم دیدم کار نکرد (پس چطور گفتم با این برنامه موفق شدم؟) خوب بعدش که کار نکرد برای دفعه ی هزارم رفتم و با برنامه ی ثانویه به این لینک فلش کردم و کار کرد! تا الان هم دستش نزدم که خراب شه و مجبور شم دوباره فلشش کنم و دوباره بیفتم تو دردسر و خوب تا اینجا خداروشکر بعد از حدود 4 یا 5 روزی کارم راه افتاد!

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

از این به بعد باید با برنامه ESPlorer کار کنیم (برای دانلود کلیک کنید) شکل ظاهری این برنامه به صورت زیر هست

خوب لازم میدونم یه نکته مهم دیگه رو هم بگم! همونطور که گفتم این فریمور قابلیت های زیادی داره یکی از قابلیت هاش اینه که شما میتونید یه برنامه یا فایلی رو بهش بدید تا هروقت روشن بشه اونو اجرا کنه مثلا میتونید یه برنامه براش بنویسید که هروقت روشن شد به اینترنت وایفای مودم شما وصل بشه (یعنی دیگه لازم نیست با میکرو بهش دستور بدید آخه فریمور پیشفرضش همون AT-Command خیلی سخت بود و باید با میکرو بهش فرمان میدادی و...) خوب همونطور که گفتم پس میتونیم توش فایل بریزیم! بهتره فایلی بزاریم توش که وقتی روشن شد اونو به مودم (همون اینترنت) وصل کنه! 

پس این فایل رو دانلود کنید توجه کنید که حتما باید اسمش init.lua باشه تا وقتی ماژول روشن میشه این فایل اجرا بشه وگرنه اجرا نمیشه! توی این فایل متن زیر نوشته شده 

wifi.setmode(wifi.STATION)
wifi.sta.config("AP_NAME","SECURITY_KEY") -- Replace with your AP Name and security key.
wifi.sta.connect()
tmr.alarm(1, 1000, 1, function() 
if wifi.sta.getip()== nil then 
print("Obtaining IP...") 
else 
tmr.stop(1)
print("Got IP. "..wifi.sta.getip())
end 
end)

که توی خط دوم باید اسم و رمز WIFI مودمتون رو وارد کنید! برای اینکه این فایل رو به ماژول بدید نرم افزار ESPlorer رو باز کنید و بعد از اینکه پورت متصل به ماژول رو انتخاب کردید open رو بزنید تا به ماژول وصل بشه اگه وصل شدنش خیلی طول بکشه دو تا اتفاق میتونه افتاده باشه یا خوب مشکل خاصی نیست و با زدن یکی از کلید هایی مثل Heap یا Chip info یا Cheap id و.. درست میشه یا اصلا از ته مشکل داره و اصلا درست نمیشه که اگه حالت دوم باشه احتمال داره بد فلش شده باشه! برای اینکه مطمئن بشید درست فلش شده از یه نرم افزار ترمینال استفاده کنید و ببینید آیا اونجا کار میکنه یا نه!

خوب داشتیم میگفتیم چطور میشه فایل init.lua رو روی ESP8266 قرار داد! گفتیم بعد از اینکه به ماژول متصل شدید باید open سبز بشه در پایین صفحه قسمت چپ گزینه upload رو بزنید و فایل init.lua رو انتخاب کنید (توجه کنید که باید تغییرات گفته شده یعنی رمز و اسم وایفای رو درست کرده باشید) بعد اونو روی ماژول آپلود میکنه و وقتی کار تموم شد سمت راست گزینه Reload رو بزنید میبینید که init.lua به ESP8266 اضافه شده و اگه ماژول رو خاموش و روشن کنید میبینید که خودکار به مودم وصل میشه! برای اطلاعات بیشتر به این سایت و این سایت یه سری بزنید)

خوب تقریبا کار تموم میخوایم بدونیم آیا واقعا به اینترنت وصل هستیم یا نه! بنابراین کد زیر رو توی قمست چپ برنامه بریزید و گزینه Send To ESP رو بزنید (این گزینه برای اینه که کد های شما رو خط به خط به ماژول ارسال کنه و با آپلود فرق داره و کد شما ذخیره نمیشه فقط ارسال میشه و دستور داده شده توسط ماژول انجام میشه) 

conn=net.createConnection(net.TCP, 0) 
conn:on("receive", function(conn, payload)
    print(string.sub(payload,string.find(payload,"Date: ")+6,string.find(payload,"Date: ")+35))
    conn:close()
    end) 
conn:dns('google.com',function(conn,ip) ipaddr=ip end)
conn:connect(80,ipaddr) 
heap = node.heap()
conn:send("HEAD / HTTP/1.1\r\n") 
conn:send("Accept: */*\r\n") 
conn:send("User-Agent: Mozilla/4.0 (compatible; ESP8266 NodeMcu Lua;)\r\n") 
conn:send("\r\n") 

کد بالا ساعت GMT رو از اینترنت میگیره برای محاسبه ساعت ایران باید اونو 3.5 تا اضافه کنید

خوب من خودم میخواستم با قابلیت post  و get در HTML و صفحات وب کار کنم ولی نمیتونستم! برای اینکار باید از قابلیت HTTP که اول گفتم توی NodeMCU فعال کرده باشید! این سایت مرجع دستورات و کد های مربوط به NodeMCU هست حتما برید توش و ازش استفاده کنید! مثلا دستورات مربوط به HTTP رو توی این صفحه ببینید و دستورات مربوط به اتصال به وایفای رو توی این صفحه ببینید و بقیه رو میتونید توی خود سایتش مشاهده کنید!

خوب نمیدونم تا الان موفق شدید که به اینترنت متصل بشید یا نه ولی اگه نتونستید اصلا نارحت نباشید و فک نکنید که من هم با خوندن دو تا مطلب توی دو دقیقه اینارو یاد گرفتم! (راستش من وقتی نتونستم فایل bin رو که از سایت دانلود کردم رو فلش کنم رفتم لبنوکس نصب کردم و سورس NodeMCU رو دانلود کردم و رفتم کامپایل کنم دیدم میگه GCC نداری رفتم اونو دانلود کردم دیدم میگه فلان برنامه نصب نیست اونو دانلود کردم بازم کامپایل نشد لینوکس رو بی خیال شدم اومدم سراغ ویندوز اونجام یه 200 مگی دانلود کردم و به نتیجه نرسیدم شاید 4 یا 5 روزی برای تلاش کردم تا تونستم درستش کنم اینا رو گفتم که فک نکنید اگه نتونستید درستش کنید یعنی دیگه هیچ وقت درست نمیشه باید تلاش کنید حالام اومدم اینا رو برای شما گذاشتم و تمام مراحلی رو که طی کرده بودم رو شرح دادم و مشکلاتی که برام پیش اومد و راه حل هایی که بهش رسیدم رو همه رو گفتم تا شما راحت تر بتونید ماژولتون رو به اینترنت وصل کنید الان هم نزدیک 2 ساعت داشتم براتون اینا رو مینوشتم و خسته نشدم! خداییش ببینید چقدر دوستتون دارم s06 چون میخوام هموطنام پیشرفت کنن، اونا که پیشرفت کنن یعنی ایران پیشرفت کرده امیدوارم شما هم هرچیزی یاد گرفتید بیاید با هموطناتون به اشتراک بگذارید شاید گره از کار یکی باز کردید این سایت فقط هدفش این بوده که هموطنای عزیزم بیان و آموزه هاشون رو با دیگر هموطناشون به اشتراک بگذارن اشنالله که ایران خوب و پیشرفته تری داشته باشیم)

در خدمت تمام هموطنای عزیزم هستم! سوالی بود بپرسید

امیدوارم به دردتون خورده باشه!

یا علی مدد....!