اینترنت اشیاء, پروژه, پروژه های سیسوگ, توصیه شده

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

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

در آموزش اتصال ربات تلگرام به آردوینو – قسمت اول و آموزش اتصال ربات تلگرام به آردوینو – قسمت دوم، در خصوص نحوه‌ی ساخت ربات به کمک Botfather و هم چنین برقراری ارتباط با سرورهای تلگرام برای اتصال دستگاه‌های IOT را با این پیام‌رسان محبوب به همراه سورس کامل آن را نیز منتشر کردیم. همچنین در آموزش اتصال ربات تلگرام به آردوینو ESP8266 – ربات تلگرام در خانه، نگاهی کاربردی‌تر به مقوله ربات تلگرام داشتیم.

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

خب دوستانی نظر دادند که چرا ما این آموزش را با یک پیام رسانی وطنی که قابلیت ربات هم داره انجام نمیدید و صد البته نظر اونها هم منطقی و هم پسندیده بود, پس لازم دونستیم این آموزش را هم  مثل همیشه بصورت رایگان اینجا منتشر کنیم.

 

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

با این آموزش از سیسوگ همراه باشید.

 

تغییرات کتابخانه ZeusTgBot

API ربات بله، تا حد زیادی با API ربات تلگرام یکسان است ولی علی رغم ادعای بله مبتنی بر سازگاری API آن با ربات تلگرام، در برخی موارد متدها کاملاً یکسان نبوده و تطابق کامل وجود ندارد. خوشبختانه متدهایی که در کتابخانه زئوس بات وجود دارند، با متدهای مشابه آن در بله مطابقت دارند و تنها تفاوت در آدرس API می‌باشد.

آدرس API ربات تلگرام به‌صورت زیر است:

و آدرس API ربات بله نیز به این شکل می‌باشد:

بنابراین در پروژه ZeusTgBot که از صفر توسط تیم سیسوگ نوشته شده است، تفاوت تنها در جایگذاری و ساخت آدرس API می‌باشد. اما چالش بعدی، اتصال ESP8266 از طریق SSL می‌باشد.

 

اتصال ایمن ESP8266 از طریق SSL

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

 

روش های موجود

اولین روش، تست اتصال بدون استفاده از SSL است. اگر بدون استفاده از https و با http به سرور بله درخواستی ارسال نمایید، این سرور به طور خودکار شما را به SSL منتقل می‌کند. یعنی Force HTTPS Redirection بر روی این سرور فعال می‌باشد. بنابراین شما تنها باید از طریق ارتباط ایمن به این سرور درخواست ارسال نمایید. بنابراین به سراغ گزینه بعدی می‌رویم. گزینه بعدی، استفاده از کتابخانه WiFiClientSecureBearSSL خواهد بود. در این روش برای اتصال ایمن، شما نیاز به اثرانگشت یا fingerprint دارید. معمولاً این اثرانگشت‌ها تنها برای یک آدرس خاص ساخته شده و دارای زمان انقضا می‌باشند. پس از این زمان شما می‌بایست مجدداً اثر انگشت جدیدی را برای ارتباط ایمن تولید کنید. اما خوشبختانه کتابخانه فوق، قابلیتی دارد که با استفاده از آن، می‌توانید بدون استفاده از اثرانگشت به https متصل شوید، اما این روش از امنیت کمتری برخوردار است. شما می‌توانید از هر دو روش برای اتصال استفاده کنید. برای این کار کافی است در فایل ZeusTgBot.cpp یکی از این دو خطوط را کامنت و دیگری را از حالت کامنت خارج کنید.

 

اثر انگشت را نیز می‌توانید به‌دست آورده و در فایل ZeusTgBot.h ویرایش کنید.

 

نحوه راه اندازی ربات

راه اندازی ربات بسیار ساده است! کتابخانه جدید، بر پایه کتابخانه ZeusTgBot سیسوگ و با زبان آردوینو نوشته شده است. شما می‌توانید فایل برنامه اصلی main.ino را در ویرایشگر آردوینو یا ویرایشگر حرفه‌ای سیسوگ باز کنید. سپس نام کاربری و رمز عبور وای فای خود را به همراه توکن رباتی که از بات فادر بله دریافت کردید، در قسمت زیر جایگذاری کنید:

این کتابخانه هم برای ربات بله و هم برای تلگرام به همراه پروکسی قابل استفاده است. برای استفاده از ربات بله، تنها کافی ست تا هنگام ساختن شی‌ء جدید از روی کلاس ZeusTgBot ، پارامتر دوم را که isBale است، مقدار ture وارد کنید.

 

دریافت دمای محیط

قبلاً در سیسوگ راه‌اندازی سنسور دما DS18b20 با آردوینو و پروتکل onewire (تک سیمه) توضیح داده شده است. در ربات هوشمند سیسوگ، شما می‌توانید با ارسال دستور  دما ، دمای محیط را به‌دست آورید.

 

تصاویری از ربات در محیط بله

وقتی کاربر برای اولین بار ارتباط با ربات را در محیط بله با دستور استارت ‎/start شروع می‌کند، با پیامی مشابه زیر مواجه می‌شود:

آموزش ساخت ربات بله

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

با هر بار فشردن کلیدها، همچنان همان دکمه‌های زیر پیام در ربات بله در دسترس هستند و می‌توانید مجدداً وضعیت لامپ‌ها را کنترل کرده و حالت دلخواه خود را فعال کنید.

 

اینترنت اشیا و کنترل لوازم منزل با ربات بله

 

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

 

ویدئو عملکرد مدار

انتشار مطالب با ذکر نام و آدرس وب سایت سیسوگ، بلامانع است.

شما نیز میتوانید یکی از نویسندگان سیسوگ باشید.   همکاری با سیسوگ

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

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

19 دیدگاه در “آموزش اتصال آردوینو ESP8266 به ربات پیام رسان بله

  1. ساتیار گفت:

    سلام
    ممنون از کتابخانه خوبی که نوشتید بسیار کاربردی و کامل دقیق بود . فقط من برای پروژه خود در سورس کتابخانه تغییراتی انجام دادم ولی یک مشکل دارم من می خوام به جای استفاده از کلید هایی که Call DATA بر می گردانند با زدن دکمه ها در ربات Text مورد نظر ارسال شود همانند ربات های اماده بله !
    برای این کار باید در اون api که کتابخانه ارسال می کند بعد از reply_markup ، به جای inline_keyboard ، عبارت keyboard ارسال شود ولی هر چقدر کتابخانه را بازبینی کردم نتوانستم این عبارات را جایگزین کنم ! لطفا به من کمک کنید .
    با تشکر ساتیار

    1. Digi Boy Digi Boy گفت:

      درود بر شما.
      در کتابخانه ZeusTgBot
      تابعی به نام
      Zeus_TgBot::sendMessage
      وجود دارد.
      payload همان آپشن هایی است که برای ارسال پیام از آن استفاده می کنید.
      برای مثال chat_id به این صورت به آن اضافه شده است:
      payload[“chat_id”] = chat_id;
      و یا کیبرد به این نحو تعریف شده است:
      JsonObject &replyMarkup = payload.createNestedObject(“reply_markup”);
      DynamicJsonBuffer keyboardBuffer;
      replyMarkup[“inline_keyboard”] = keyboardBuffer.parseArray(reply_markup);
      اگر این فانکشن را مطالعه کنید، با ساز و کار و نحوه تنظیم آپشن ها آشنا خواهید شد.

  2. محمد رضا مسائلی محمد رضا گفت:

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

    1. Digi Boy Digi Boy گفت:

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

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

  3. درخت گفت:

    با سلام. موقع کامپایل چنین خطایی میده. در حالیکه فایل دکر شده تو مسیر کتابخونه ها هم هست.
    Arduino: 1.8.12 (Windows 8.1), Board: “NodeMCU 1.0 (ESP-12E Module), 80 MHz, Flash, Legacy (new can return nullptr), All SSL ciphers (most compatible), 4MB (FS:2MB OTA:~1019KB), 2, v2 Lower Memory, Disabled, None, Only Sketch, 115200”

    In file included from sketch\ArduinoJson.h:10:0,

    from sketch\ZeusTgBot.h:14,

    from sketch\ZeusTgBot.cpp:7:

    ArduinoJson.hpp:10:45: fatal error: ArduinoJson/DynamicJsonBuffer.hpp: No such file or directory

    #include “ArduinoJson/DynamicJsonBuffer.hpp”

    ^

    compilation terminated.

    exit status 1
    ArduinoJson/DynamicJsonBuffer.hpp: No such file or directory

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

    1. درخت گفت:

      مشکل از من بود حل شد.

  4. علی گفت:

    البته من قبلا باپیامرسان گپ یه کارهایی کرده بودم ولی ادامه ندادم چون به موردی که در بالا گفتم برخوردم و دیگه وقت تحقیقات بیشتر نداشتم…

  5. علی گفت:

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

    1. Digi Boy Digi Boy گفت:

      درود بر شما.
      در سورس نمونه‌ای که ما برای شما قرار دادیم، ربات روی خود برد اجرا می‌شود. بنابراین اگر قرار باشد شما دو یا چند ESp8266 برای خانه‌های مختلف بکار ببرید، مسلماً این روش نیاز گوی شما نخواهد بود. اما همیشه در برنامه نویسی راه‌های بسیار زیادی وجود دارد. برای مثال شما می‌توانید با تهیه سرور، مدیریت ربات را به یک سرور واحد بسپارید و اینترنت اشیا را به ESP8266. که همه این‌ها نیازمند بررسی و تغییراتی در کد هست. همچنین بحث امنیت را نیز باید در نظر بگیرید. برای مثال در پروژه فعلی، چون برنامه برای هدف آموزشی نوشته شده، هرکسی که ربات را اجرا کند، می‌تواند مدیریت را در دست بگیرد، اما به راحتی شما می‌توانید دسترسی افراد مختلف به ربات را نیز (با توجه به user_id) محدود کنید.

  6. محمد رضا گفت:

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

    1. Digi Boy Digi Boy گفت:

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

  7. سبحان گفت:

    سلام با esp8266 و فایربیس کار کردید
    چطوری میشه از طریق esp8266 یک push notification برای گوشی فرستاد؟
    قسمت esp مد نظرم هست

    1. Digi Boy Digi Boy گفت:

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

  8. حسین گفت:

    مثل همیشه عاااااااااااااالی
    خیلی منتظرش بودم

    واقعا خسته نباشید

    1. Digi Boy Digi Boy گفت:

      خیلی ممنون، قابل شما رو نداره! لطفا ما رو به دوستانتون معرفی کنید.

  9. دانیال گفت:

    vaqean dametun Garme