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

آموزش اتصال ربات تلگرام به آردوینو ESP8266 – ربات تلگرام در خانه

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

سرایدار تلگرامی!

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

ربات چگونه کار می کند؟

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

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

رباتی که قصد پیاده سازی آن را داریم از دستورات متنی برای کنترل لوازم و وسایل استفاده نمی کند بلکه با استفاده از inline keyboard برای کنترل و دریافت دستورات کاربر استفاده می کند. در روش دریافت دستورات به صورت متنی احتمال این که کاربر دستور مورد نظر را درست وارد نکند بالاست و یا این که ممکن است کارکرد دستورات را و یا شکل نوشتاری آن را فراموش کند ولی در روش مورد استفاده ما دستورات به صورتی لیستی در اختیار کاربر قرار می گیرد که عملکرد هر دستور به صورت متن فارسی روی آن درج شده است همین مساله باعث می شود که استفاده از ربات بسیار دلپذیرتر و ساده تر باشد.

قضیه inline keyboard چیست ؟

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

inline keyboard ها قابلیت اضافه و ویرایش شدن در هر پست ارسالی را دارا می باشند ، یعنی میتوان در انتهای هر پست لیستی از کلید ها را ایجاد کرد ، هر کلید دارای دو محتواست ، محتوای اول که به کاربر نمایش داده می شود و محتوای دوم با فشردن کلید توسط کاربر به سرور ارسال می شود و سرور تلگرام آن را از طریق CallBack آن را برای پردازش در اختیار ما قرار می دهد.

چطور inline keyboard بسازیم ؟

اصولا تلگرام تمام تبادلات را در قالب JSON انجام می دهد ، JSON یک استاندارد باز است که با ساختار خوانا برای انسان و ماشین ، می تواند اطلاعات و داده های مختلف را با استفاده از آن بین عوامل مختلف رد و بدل کرد. برای ایجاد inline keyboard باید داده های مربوط به کی برد را در قالب JSON به پیام خود اضافه کنیم. برای نمونه ، کد JSON زیر دو کلید به متن ما اضافه می کنید.

با اضافه کردن ساختار فوق به فیلد reply_markup در تابع ارسال پیام ، هنگام نمایش پیام مورد نظر به کاربر ، دو کلید یکی با نام Sisoog و دیگری با نام Google به انتهای پیام اضافه می‌شود. نوع کلید ها را ما با پارامتر url تنظیم کرده ایم که به تلگرام می گوید با کلیک بر روی این کلید به آدرس مقابل مراجعه کند و سایت مورد نظر را باز کند ، این نوع کیلد با فشرده شدن مقاداری به سرور بر نمی گرداند چرا که عملکرد آن که باز کردن صفحه وب است سمت کاربر انجام می شود. اما اگر نوع کلید را با مقدار callback_data مشخص کنیم ، به محض کلیک کاربر بر روی دکمه مقدار تعیین شده به سرور برای پردازش ارسال می شود.

چگونه پیام های ربات را مدیریت کنیم ؟

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

برای اضافه کردن قابلیت inline keyboard به ربات تلگرام ، مجبور شدیم که مقداریی تغییرات در برخی توابع ایجاد کنیم ، از آنجایی که ارسال کد های JSON از طریق GET امکان پذیر نبود و با روش های معمول سرور تلگرام خطا اعلام می کرد ، مجبور به پیاده سازی متد POST برای ارسال داده های به سرور شدیم ، قبلا متد GET را توضیح دادیم که داده ها از طریق URL به سرور انتقال می یابد ، در متد POST داده ها باید از طریق Socket به سرور ارسال شوند.

در واقع برای ارسال داده ها به عنوان POST می توان از کد های زیر استفاده کنید.

تغییر بعدی که اجتناب ناپذیر بود ، تغییر در تابع Message_Event بود ، در ورژن های قبلی چون قابلیت inline keyboard وجود نداشت ، تابع مذکور فقط شامل آیدی فرستنده ، آیدی پیام و متن پیام بود ، با توجه به اضافه شده قابلیت inline keyboard به کتابخانه “تلگرام آردوینو” باید بتوان CallBack های مربوط به فشرده شدن کلیدها را نیز مدیریت کرد پس تابع فوق به شکل زیر اصلاح شد.

همانطور که قبلا توضیح دادیم ، شما می توانید با استفاده از تابع Set_Message_Event ؛ تابعی را به کتابخانه Zeus_TgBot معرفی کنید تا در هنگام دریافت پیام جدید به صورت خودکار تابع مورد نظر فراخوانی شود. تابع مذکور باید 5 پارامتر ورودی باشد.

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

پارامتر سوم متن پیام است و پارامتر چهارم مشخص میکند که این فراخونی به دلیل دریافت پیام جدید بوده است یا فشرده شدن کلید ها ، آخرین پارامتر هم حاوی داده ذخیره شده درون کلید است این پارامتر وقتی حاوی مقدار است که کاربر بر روی کلید کلیک کرده باشد. در غیر این صورت مقداری نخواهد داشت.

عملکرد ربات

 

راه اندازی برنامه !

با توجه به توابع موجود، عملکرد و پیاده‌سازی برنامه کار بسیار ساده‌ای است. ابتدا کافی است SSID یا اسم وای فای و رمز آن و کلید ربات تلگرامی خود را در ابتدای کد وارد کنید (خطوط 9 و 10 و 11 از برنامه)، بعد برنامه را کامپایل و بر روی ESP8266 پروگرام کنید.

دانلود سورس کد

برای دانلود سورس کد می‌توانید به اکانت گیت هاب سیسوگ مراجعه کنید.



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

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

 

نوشته های مشابه

یک دیدگاه در “14”

  1. Avatar امیر محمد کوهجانی گفت:

    با سلام .
    میخواستم بدونم الان که تلگرام فیلتر شده باز هم میشه از این روش برای اتصال به سرور تلگرام استفاده کرد یا نه ؟ ممنونم

    1. زئوس Zeus زئوس Zeus گفت:

      امم با توجه به فیلترینگ تلگرام ؛ استفاده مستقیم ممکن نیست ولی اگر بتونید از پارکسی اسنفاده کنید احتمالا مشکلی پیش نمیآد

  2. Avatar امیرحسین گفت:

    سلام و وقت بخیر
    بنده این پروژه رو کامل انجام دادم و برنامه رو در محیط آردینو کپی کردم ولی موقع کامپایل کردن با این ارور مواجه شدم:
    exit status 1
    Error compiling for board Adafruit HUZZAH ESP8266.
    برنامه ی دیگه ای رو از سایت دیگه در محیط آردینو کپی کردم که تونستم جلو تر برم و برنامه کامپایل شد و آی پی رو از برنامه دریافت کردم
    ولی در مرحله بعد هیچ چیز از ربات تلگرام دریافت نمیکنم و نمیتونم جلوتر برم
    لطفا راهنمایی کنید
    ممنونم

    1. زئوس Zeus زئوس Zeus گفت:

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

      1. Avatar مهدی زارعی گفت:

        سلام
        نوروز مبارک
        سوالی داشتم
        با توجه به فیلترینگ تلگرام راه حلی برای اتصال برد با تلگرام میشناسید؟

        1. زئوس Zeus زئوس Zeus گفت:

          سلام
          نوروز شما هم مبارک
          در واقع به شکل مستقیم امکانش فراهم نیست ؛ ساده ترین و قابل پیاده سازی ترین راهش اینه که از http پراکسی استفاده کنید!

  3. Avatar میلاد رفیع گفت:

    سلام.ممنون‌از سایت خوبتون
    امکانش هست با برد اردوینو و شیلد شبکه این کار رو انجام داد؟
    اگه میشه یه اموزش براش بزارید چون من تخصص کافی توی اردوینو ندارم. ممنون

    1. زئوس Zeus زئوس Zeus گفت:

      سلام و درود
      در واقع امکانش هست ولی با تغییرات زیاد
      از اونجایی که ESP مقدار رم زیادی داره ما از متد Post و با کمک کتابخانه Json این کار رو انجام دادیم که رم زیادی نیاز داره ولی متاسفانه برد آردوینو رم کمی داره و برای این کار مجبورید که از متد GET استفاده کنید و در ضمن پیاده سازی لایه های شبکه هم هست که خودش نیاز به رم داره – پس کار راحتی نیست
      متاسفانه در حال حاضر زمان کافی در اختیار نداریم که بتونیم این پروژه رو تغییرش بدیم شاید در آینده
      ولی اگر در مسیر پیاده سازی سوالی داشتید خوشحال می شیم بتونیم کمکی کنیم.

  4. Avatar محمد گفت:

    سلام
    من نتونستم از این کتابخانه در sisoog IDE استفاده کنم
    ارور مربوط به Json میداد
    آیا اضافه کردن کتابخانه به این ویرایشگر روش خاصی دارد؟

    1. زئوس Zeus زئوس Zeus گفت:

      روش خاصی که نداره ،، البته دقت داشته باشید که کل سورس رو دانلود کنید چون کتابخونه های مزوبطه به JSON رو کنار پروژه قرار دادم و با باز کردن صحیح سورس اونام به صورت خودکار به پروژه اضافه می شوند.

  5. مهدی عبدالهی stm32 گفت:

    نگاه کنید برای من کلیدها را که زیاد کردم را نمایش میدهد ولی ماژول یکسره ریست میشود و این متن را برای من مینویسد
    Wait for WiFi… …..
    Connect to NetWork …. OK
    WiFi connected
    IP address:
    192.168.1.51

    Bot Information
    first name: STM32_bot
    last_name:
    username: microstm32_bot

    Get CallBack – Gtg

    Soft WDT reset

    ctx: cont
    sp: 3fff1250 end: 3fff1800 offset: 01b0

    >>>stack>>>
    3fff1400: 00000000 3ffeab47 00000001 4010068c
    3fff1410: 5c5c5c5c 5c5c5c5c 5c5c5c5c 00000000
    3fff1420: 000028a3 3fff2ae4 00000000 401004d8
    3fff1430: 00000000 3fff2ae4 3fff4dec 40107374
    3fff1440: 8f11318f 36363636 36363636 40230c74
    3fff1450: 3fff2ae4 00000000 3fffb8ac 00000000
    3fff1460: bedecef4 0a0a0a0b 00000000 00000000
    3fff1470: 00000000 3fff2ae4 00000000 40231000
    3fff1480: 00000000 000006c5 00000001 3fff2d8c
    3fff1490: 0000059c 00000000 00000000 3fffb8ac
    3fff14a0: 0000059c 00000018 00000000 0000000a
    3fff14b0: 3fff3451 3fff3451 3fff49a4 000006c5
    3fff14c0: 000006c5 00000000 3fff2b9c 40205c1c
    3fff14d0: 000006c5 2e51668d 3fff159c 00000000
    3fff14e0: 00000000 3fff2cd4 000006c5 40221c28
    3fff14f0: 06020317 00000091 3fff1590 402065b4
    3fff1500: 00000691 00000017 00000010 40202726
    3fff1510: 3fff2cd4 3ffea270 3fff1590 00000000
    3fff1520: 3fff2cd4 3fffb204 00000691 40221caf
    3fff1530: 00000691 3fff9fe0 3fff1590 3ffea4f4
    3fff1540: 3fff2838 00000000 3fff1590 3ffea4f4
    3fff1550: 3fff2838 3fff159c 3fff061c 40205804
    3fff1560: 3fff2838 3fff159c 3fff061c 40206bc9
    3fff1570: 3fff2838 3fff9fd8 3fff1590 40206095
    3fff1580: 00000200 3fff159c 3fff061c 40203d4a
    3fff1590: 3fff15b4 00000691 00000000 3fffb204
    3fff15a0: 0000069f 00000691 3fff7c14 0000000f
    3fff15b0: 00000000 3fff159c 3fff1610 402063d1
    3fff15c0: 3fff1610 3fff161c 00000691 00000000
    3fff15d0: 3fff15f0 3fff8ec0 3fff2838 3fff060c
    3fff15e0: 3fff9fd0 00000000 3fff2838 402044a3
    3fff15f0: 3ffe9a08 00000000 3fffa9f4 00001000
    3fff1600: 3ffe9a08 3fff16ac 3fff9fc4 00000800
    3fff1610: 3fff7b64 0000004f 00000040 40206350
    3fff1620: 3fff902c 00000495 3fff7bbc 0000004f
    3fff1630: 00000040 00000591 3fff1670 402063d1
    3fff1640: 3fff1688 00000100 3fff1694 3fff1670
    3fff1650: 3ffe95ec 3fff0608 3fff060c 3fff1708
    3fff1660: 3ffe8e7c 3fff0608 3fff060c 402020bf
    3fff1670: 3fff9904 0000049f 00000495 3fff96ec
    3fff1680: 0000020f 00000207 3fff4dd4 0000000f
    3fff1690: 00000009 3fff4dbc 0000000f 00000003
    3fff16a0: 3fff902c 0000049f 00000495 3fff94d4
    3fff16b0: 0000020f 00000207 3fff16f0 402063d1
    3fff16c0: 3fff1714 00000001 3fff16f0 40206444
    3fff16d0: 00000007 3fff48a0 40201e84 3ffe9764
    3fff16e0: 3fff060c 3fff48a0 40201e84 40203a74
    3fff16f0: 3fff4d94 0000001f 00000012 3fff2acc
    3fff1700: 0000000f 00000003 3fff2ab4 0000000f
    3fff1710: 00000009 3fff2a9c 0000000f 00000003
    3fff1720: 3fff21ac 0000000f 00000003 3fff2194
    3fff1730: 0000000f 00000009 3fff2c0c 0000000f
    3fff1740: 00000003 3fff4974 0000001f 00000012
    3fff1750: 00000000 3fff4870 3fff060c 3fff48a0
    3fff1760: 00000000 3fff4870 3fff060c 402041bc
    3fff1770: 3ffe9a08 00000000 3fff8aa4 00000800
    3fff1780: 3ffe9a08 3ffea4f4 3fff5274 00000200
    3fff1790: 3fff828c 000005ff 000005f2 3fff2a54
    3fff17a0: 0000003f 0000003b 00000000 00000000
    3fff17b0: 00000001 04f8f181 00000000 00000000
    3fff17c0: 00000000 00000000 00000000 3fff07d4
    3fff17d0: 3fffdad0 00000000 3fff07cc 4020231c
    3fff17e0: 3fffdad0 00000000 3fff07cc 402067b0
    3fff17f0: feefeffe feefeffe 3fff07e0 40100718
    <<<stack<<<

    ets Jan 8 2013,rst cause:2, boot mode:(3,7)

    load 0x4010f000, len 1384, room 16
    tail 8
    chksum 0x2d
    csum 0x2d
    v09f0c112
    ~ldÿ

    1. زئوس Zeus زئوس Zeus گفت:

      این خطا مربوط به استک هست ، ببینید می تونید استک برنامه رو زیاد کنید

  6. مهدی عبدالهی stm32 گفت:

    سلام دوست عزیزم من اینی برنامه را روی برد nodemcu بستم قشنگ جواب داد ولیکن من میخوام برنامه را بصورت سفارشی برای خودم تغییر بدم هر کار کردم نشد تعداد دمه ها را از 5 عدد بیشتر بگذارم چطور میتونم به هر تعدادی که لازم دارم دکمه قرار بدم؟

    1. زئوس Zeus زئوس Zeus گفت:

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

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

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