همانطور که در آموزش قبلی اشاره شد، کلید وای فای همه کاره به درخواست ما، فعالیتی مشخص انجام میدهد. در آموزش قبل با استفاده از سرویسهای سایت IFTTT مانند Webhooks توانستیم تنها با یک کلیک اطلاعات مورد نیاز را دریافت کنیم. در این آموزش قصد داریم این فرآیند را در گروه تلگرامی یا کانال تلگرامی خود انجام دهیم. مثلا با تحریک کلید وای فای همه کاره یک پیام خوش آمد گویی در گروه ارسال کنیم. با استفاده از ربات تلگرامی IFTTT این مورد انجام میشود. این پروژه بر پایه سرویسهای سایت IFTTT هست که مخفف if this then that است. در ادامه این آموزش با مرجع تخصصی ESP8266 به زبان فارسی، دیجی اسپارک همراه باشید.
کلید وای فای WifiButton
همانطور که در آموزش قبلی اشاره شد، فرض کنید یک کلید فیزیکی در اختیار دارید که با هر بار کلیک کردن وظیفه ای مشخص را انجام میدهد. از سفارش غذای مورد علاقه شما از نزدیکترین رستوران تا خاموش و روشن کردن وسایل مختلف در خانه شما توسط این کلید انجام میشود. خب این ایده اولین بار توسط شرکت آمازون ارائه شد با اسم Amazon Dash Button اما به دو دلیل ما WifiButon خودمون رو میسازیم. اول اینکه هزینه خرید بالایی داره و دوم اینکه میتونیم بسازیمش!! در ضمن برای توضیحات تکمیلی خوبه که بدونید WifiButton رویداد هایی که برای اون تعریف شده باشه رو اجرا میکنه که در این آموزش رویداد مد نظر ما ارسال پیام در گروه تلگرامی یا کانال تلگرامی است.
کاربرد API در کلید همه کاره
API اختصاری برای عبارت “رابط برنامه نویسی اپلیکیشن” (Application Programming Interface) است. API ها دارای تاریخچه وسیعی هستند و توضیح کامل آن شاید نیاز به یک مقاله کامل داشته باشد. اما در این پست سعی می کنم مفهوم آن را برای شما روشنتر مطرح کنم. فرض کنید سایتی وجود دارد که اطلاعات هواشناسی را در اختیار کاربران قرار می دهد اگر این سایت بخواهد اطلاعات را در لحظه برای کاربران در پلتفرمهای مختلف ارسال کند از API استفاده میکند که کاربر با صدا زدن “Call” آن میتواند به اطلاعات دسترسی داشته باشد.
برد ESP8266 وای فای
ماژول های ESP32 و ESP8266 ساخت شرکت Espressif Systems از پر مصرفترین و در دسترسترین تراشههای اینترنت اشیا هستند. و همچنین قیمت پایینتری نسبت به دیگر تراشههای اینترنت اشیا دارند. همچنین برای توسعه کدهای آن میتوانیم از نرم افزار Arduino استفاده کنیم که دسترسی آسان تری را برای کاربر فراهم میکند.
برخی از ویژگیهای ESP8266
- ماژول شبکه و میکروکنترولر ESP8266 یکی از معروفترین و ارزان ترین و دردسترس ترین تراشه های اینترنت اشیا است.
- دارا بودن میکروکنترولر قدرتمند به همراه ارتباط شبکه WIFI داخلی،
- پشتیبانی کامل فول استک TCP/IP
- و همچنین با ارائه رابط های سخت افزاری کافی گزینه مناسبی برای کاربرد های کوچک و کم مصرف اینترنت اشیا میباشد.
- این میکروکنترولر در سال ۲۰۱۴ به بازار عرضه گردید.
سرویس IFTTT
همینطور که قبلا اشاره کردم قرار است در آموزش از سرویسهای سایت IFTTT استفاده کنیم. این سرویسها به ما امکان دسترسی به دیگر سرویسهایی مانند Telegram و Webhooks را میدهند. که در این آموزش نیاز داریم. حالا چرا سرویس IFTTT ؟ در واقع این کلمه مخفف If this then that است. به این معنی که “اگر این پس آن” که در واقع اگر رویدادی که تایین کردهایم اتفاق بیوفتد کاری که ما تایین کردهایم اتفاق میافتد. در این آموزش به این صورت بوده که با فشردن کلید وای فای بر روی ESP یک API از طرف ما Call میشود. سپس اطلاعات مورد نیاز به کانال یا گروه تلگرامی ما ارسال خواهد شد.
تنظیمات کانال تلگرام
ابتدا در ربات تلگرامی IFTTT عضو شوید “دقت کنید ربات دارای تیک تایید تلگرام باشد، ربات های دیگری نیز با نام های مشابه وجود دارند”
در این مرحله رباتی که بالا معرفی شد را به کانال یا گروه تلگرامی خود اضافه کنید، در ادامه ربات از شما درخواست میکند که به عنوان ادمین در گروه حضور داشته باشد و همچنین درخواست دسترسی هایی از شما میکند، قبول کنید.
بسیار عالی تا این مرحله کانال/گروه تلگرامی آماده میزبانی از سرویس های سایت IFTTT است. در ادامه بایستی تنیماتی IFTTT را انجام دهیم.
تنظیمات سایت IFTTT
در این مرحله به سایت IFTTT مراجعه کنید و در بخش sign up در سایت ثبت نام کنید. سپس در بالای صفحه بر روی Create/Applets کلیک کنید.
سپس در پنجره باز شده بر روی کلمه “THIS” کلیک کنید.
در این بخش باید سرویس مورد نیاز را انتخاب کنیم، که مورد مدنظر ما Webhooks می باشد؛ این سرویس به ما به یک API اختصاصی می دهد. پس در قسمت جستجو کلمه Webhooks را سرچ کنید.
پس از انتخاب سرویس Webhooks باید trigger مدنظر را انتخاب کنیم، این مورد درواقع کاری هست که بعد از هر بار Call اتفاق می افتد. پس مورد “Receive a web request” را انتخاب کنید.
حالا باید برای trigger یک اسم انتخاب کنیم “این اسم را فراموش نکنید، در ادامه به آن نیاز خواهیم داشت” در این قسمت نام مدنظر ما Telegram می باشد.
در این قسمت دوباره با صفحه “IF THIS THEN THAT” مواجه می شویم، این بار بر روی کلمه “THAT” کلیک کنید.
این بار در نوار ابزار جستجو کلمه “Telegram” را سرچ کنید.
در این مرحله باید “action” مد نظر را برای سروی تلگرام مشخص کنیم، همینطور که مشخص هست می توانیم از مواردی مانند send massage, send Photo, send video, send mp3 استفاده کنیم که ذر سناریو های مختلف کارای دارند، در این آموزش ما از مورد اول “Send Massage” استفاده می کنیم.
در صفحه جدید باید اطلاعات action انتخاب شده را کامل کنیم، در مورد “۱” دومین گزینه را انتخاب کنید که شامل نام کانال/گروه تلگرامی شما می باشد. در مورد “۲” می توانیم پیامی که برای ما ارسال خواهد شد را شخصی سازی کنیم. و در نهایت با انتخاب گزینه “Create action” فرآیند را کامل کنید.
در پنجره جدید از صحت اطلاعات اطمینال حاصل کنید و در نهایت بر روی “Finish” کلیک کنید.
در صفحه اصلی سایت بر روی گزینه “Explore” کلیک کنید.
در نوار ابزار جستجو “Webhooks” را سرچ کنید و بر روی “ٌWebhooks” کلیک کنید.
در پنجره باز شده بر روی گزینه “Documentation” که در سمت راست بالای صفحه قرار دارد کلیک کنید.
در این صفحه با وارد کردن نام Trigger که از قبل ساخته ایم می توانیم به API مدنظر در پایین صفحه دسترسی پیدا کنیم.
حالا به چند روش میتوانیم این API را تست کنیم؛
- کپی کردن لینک و جستجوی آن در مرورگر.
- استفاده از محیط CMD و استفاده از دستور curl -X POST و سپس لینک.
- استفاده از گزینه Test it.
که در نتیجه اگر همه چیز درست باشد پیام مدنظر به شکل زیر برای ما در کانال/گروه به نمایش در می آید.
خب حالا اگر بخواهیم فرآیند صدا زدن API توسط ماژول nodemcu صورت گیرد، باید از کد زیر استفاده کنیم؛ در قسمت ۱ و ۲ ssid و پسورد وای فای را وارد کنید و در قسمت ۳ , API که سایت در اختیار ما قرار داد را وارد کنید.
نحوه استفاده کلید وای فای
استفاده از این پروژه به این صورت می باشد که بار هر ریست کردن مدار، برای مثال در nodemcu با فرشدن کلید RST ماژول از حالت خواب “sleep mode” خارج می شود و API مورد نظر ما را call میکند.
تحلیل کد WifiButton
ابتدا ارتباط سریال با baud rate به مقدار ۱۱۵۲۰۰ شروع می شود، در ادامه تابع initWifi ارتباط وای فای بین ESP و روتر شما را ایجاد می کند، سپس تابع makeIFTTTRequest اجرا می شود که در خواستی به سرویس IFTTT ارسال می کند و در نهایت IFTTT به شما ایمیل را ارسال می کند.
کد پروژه کلید وای فای
کدهای زیر را روی برد ESP8266 آپلود کنید.
#include <ESP8266WiFi.h> // Replace with your SSID and Password const char* ssid = "CiferTech"; const char* password = "123456789"; // Replace with your unique IFTTT URL resource const char* resource = "https://maker.ifttt.com/trigger/button_pressed/with/key/dJQw8StSqmowG17lr3ZvEu"; // How your resource variable should look like, but with your own API KEY (that API KEY below is just an example): //const char* resource = "/trigger/button_pressed/with/key/nAZjOphL3d-ZO4N3k64-1A7gTlNSrxMJdmqy"; // Maker Webhooks IFTTT const char* server = "maker.ifttt.com"; void setup() { Serial.begin(115200); initWifi(); makeIFTTTRequest(); // Deep sleep mode until RESET pin is connected to a LOW signal (pushbutton is pressed) ESP.deepSleep(0); } void loop() { // sleeping so wont get here } // Establish a Wi-Fi connection with your router void initWifi() { Serial.print("Connecting to: "); Serial.print(ssid); WiFi.begin(ssid, password); int timeout = 10 * 4; // 10 seconds while(WiFi.status() != WL_CONNECTED && (timeout-- > 0)) { delay(250); Serial.print("."); } Serial.println(""); if(WiFi.status() != WL_CONNECTED) { Serial.println("Failed to connect, going back to sleep"); } Serial.print("WiFi connected in: "); Serial.print(millis()); Serial.print(", IP address: "); Serial.println(WiFi.localIP()); } // Make an HTTP request to the IFTTT web service void makeIFTTTRequest() { Serial.print("Connecting to "); Serial.print(server); WiFiClient client; int retries = 5; while(!!!client.connect(server, 80) && (retries-- > 0)) { Serial.print("."); } Serial.println(); if(!!!client.connected()) { Serial.println("Failed to connect, going back to sleep"); } Serial.print("Request resource: "); Serial.println(resource); client.print(String("GET ") + resource + " HTTP/1.1\r\n" + "Host: " + server + "\r\n" + "Connection: close\r\n\r\n"); int timeout = 5 * 10; // 5 seconds while(!!!client.available() && (timeout-- > 0)){ delay(100); } if(!!!client.available()) { Serial.println("No response, going back to sleep"); } while(client.available()){ Serial.write(client.read()); } Serial.println("\nclosing connection"); client.stop(); }
وسایل مورد نیاز
ماژول ESP8266 وای فای با خروجی سریال ESP8266-12E
ماژول ESP8266 وای فای با خروجی سریال Esp8266-07
چنانچه در مراحل راه اندازی و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریعترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند میتوانید از همین طریق اطلاع رسانی کنید.
در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی , از وبسایت دیجی اسپارک حمایت کنید.
سلام ایده ی جالبیه آیا محدودیتی در استفاده وجود نداره؟
با سلام. محدودیتی فعلا به چشم من نخورده، از آونجایی که IFTTT در کل بر پایه کلاود شرکت آمازون هست، سیستم قابل اعتمادی می باشد.
IFTTT بازخورد نداره و برای ایران کار نمیکنه پس بی خودی تو این سایت ثبت نکنین …بنده همه جوره تست کردم IFTTT برای ایران حتی با فیلتر شکن هم بسته و بلاک هست
در چند هفته اخیر سیاست های IFTTT تغییراتی داشته که باعث شده برای استفاده از تمام امکانات نیاز به تهیه اشتراک باشه، ولی ما هم در ایران هستیم، تست کردیم، کار کرد و آموزش نوشتیم!!