در این آموزش از دسته آموزش اردوینو میخواهیم با استفاده از ربات پیام رسان بله پروژه اینترنت اشیاء بسازیم تا برق وسایل مختلف منزل را به راحتی از راه دور و تنها با استفاده از دکمههای ربات کنترل کنیم! همچنین دمای محیط را با استفاده از ربات اندازه گیری میکنیم!
در آموزش اتصال ربات تلگرام به آردوینو – قسمت اول و آموزش اتصال ربات تلگرام به آردوینو – قسمت دوم، در خصوص نحوهی ساخت ربات به کمک Botfather و هم چنین برقراری ارتباط با سرورهای تلگرام برای اتصال دستگاههای IOT را با این پیامرسان محبوب به همراه سورس کامل آن را نیز منتشر کردیم. همچنین در آموزش اتصال ربات تلگرام به آردوینو ESP8266 – ربات تلگرام در خانه، نگاهی کاربردیتر به مقوله ربات تلگرام داشتیم.
در این آموزشها شما یاد خواهید گرفت که چگونه بهطور عملی یک ربات تلگرام برای پروژه اینترنت اشیاء خود بسازید. همچنین پس از فیلتر شدن تلگرام، در اینترنت اشیاء و اتصال به ربات تلگرام بدون محدودیت و فیلتر، نحوه اتصال ESP8266 به سرور تلگرام بدون استفاده از پراکسی را توضیح دادیم.
خب دوستانی نظر دادند که چرا ما این آموزش را با یک پیام رسانی وطنی که قابلیت ربات هم داره انجام نمیدید و صد البته نظر اونها هم منطقی و هم پسندیده بود, پس لازم دونستیم این آموزش را هم مثل همیشه بصورت رایگان اینجا منتشر کنیم.
برای ساخت ربات جدید و راه اندازی آن در پیامرسان بله نیز، تا حد زیادی مراحل شبیه به راه اندازی ربات در تلگرام میباشد، بنابراین توصیه میکنم حتماً مقالات بالا را مطالعه کنید.
با این آموزش از سیسوگ همراه باشید.
تغییرات کتابخانه ZeusTgBot
API ربات بله، تا حد زیادی با API ربات تلگرام یکسان است ولی علی رغم ادعای بله مبتنی بر سازگاری API آن با ربات تلگرام، در برخی موارد متدها کاملاً یکسان نبوده و تطابق کامل وجود ندارد. خوشبختانه متدهایی که در کتابخانه زئوس بات وجود دارند، با متدهای مشابه آن در بله مطابقت دارند و تنها تفاوت در آدرس API میباشد.
آدرس API ربات تلگرام بهصورت زیر است:
1 | https://api.telegram.org/bot{token}/{methode} |
و آدرس API ربات بله نیز به این شکل میباشد:
1 | https://tapi.bale.ai/bot{token}/{methode} |
بنابراین در پروژه ZeusTgBot که از صفر توسط تیم سیسوگ نوشته شده است، تفاوت تنها در جایگذاری و ساخت آدرس API میباشد. اما چالش بعدی، اتصال ESP8266 از طریق SSL میباشد.
اتصال ایمن ESP8266 از طریق SSL
یکی از چالشهای مهم برای اتصال بردهای الکترونیکی به اینترنت، مبحث اتصال ایمن از طریق SSL یا همان HTTPS میباشد. یک ارتباط ایمن نیازمند پیش نیازهای متفاوتی از جمله تنظیم بودن ساعت کلاینت و سرور، داشتن fingerprint معتبر و… میباشد. در صورتی که هریک از پارامترهای اتصال ایمن برقرار نباشد، ممکن است اتصال با موفقیت صورت نگیرد. مهیا کردن این ویژگیها بر روی سخت افزار میتواند کمی پیچیده باشد. اما به کمک کتابخانههای ESP8266 به راحتی میتوان یک ارتباط ایمن برقرار ساخت.
روش های موجود
اولین روش، تست اتصال بدون استفاده از SSL است. اگر بدون استفاده از https و با http به سرور بله درخواستی ارسال نمایید، این سرور به طور خودکار شما را به SSL منتقل میکند. یعنی Force HTTPS Redirection بر روی این سرور فعال میباشد. بنابراین شما تنها باید از طریق ارتباط ایمن به این سرور درخواست ارسال نمایید. بنابراین به سراغ گزینه بعدی میرویم. گزینه بعدی، استفاده از کتابخانه WiFiClientSecureBearSSL خواهد بود. در این روش برای اتصال ایمن، شما نیاز به اثرانگشت یا fingerprint دارید. معمولاً این اثرانگشتها تنها برای یک آدرس خاص ساخته شده و دارای زمان انقضا میباشند. پس از این زمان شما میبایست مجدداً اثر انگشت جدیدی را برای ارتباط ایمن تولید کنید. اما خوشبختانه کتابخانه فوق، قابلیتی دارد که با استفاده از آن، میتوانید بدون استفاده از اثرانگشت به https متصل شوید، اما این روش از امنیت کمتری برخوردار است. شما میتوانید از هر دو روش برای اتصال استفاده کنید. برای این کار کافی است در فایل ZeusTgBot.cpp یکی از این دو خطوط را کامنت و دیگری را از حالت کامنت خارج کنید.
1 2 | //client->setFingerprint(fingerprint); client->setInsecure(); |
اثر انگشت را نیز میتوانید بهدست آورده و در فایل ZeusTgBot.h ویرایش کنید.
1 | const uint8_t fingerprint[20] = {0x5A, 0xCF, 0xFE, 0xF0, 0xF1, 0xA6, 0xF4, 0x5F, 0xD2, 0x11, 0x11, 0xC6, 0x1D, 0x2F, 0x0E, 0xBC, 0x39, 0x8D, 0x50, 0xE0}; |
نحوه راه اندازی ربات
راه اندازی ربات بسیار ساده است! کتابخانه جدید، بر پایه کتابخانه ZeusTgBot سیسوگ و با زبان آردوینو نوشته شده است. شما میتوانید فایل برنامه اصلی main.ino را در ویرایشگر آردوینو یا ویرایشگر حرفهای سیسوگ باز کنید. سپس نام کاربری و رمز عبور وای فای خود را به همراه توکن رباتی که از بات فادر بله دریافت کردید، در قسمت زیر جایگذاری کنید:
1 2 3 4 | #define Ssid "" #define Password "" #define Bot_Key "" #define ProxyPage "PROXY URL" |
این کتابخانه هم برای ربات بله و هم برای تلگرام به همراه پروکسی قابل استفاده است. برای استفاده از ربات بله، تنها کافی ست تا هنگام ساختن شیء جدید از روی کلاس ZeusTgBot ، پارامتر دوم را که isBale است، مقدار ture وارد کنید.
1 | Zeus_TgBot Bot(Bot_Key, true, true); |
همچنین برای راه اندازی سنسور دما، شما میبایست کتابخانه آن را نیز به آردوینو اضافه کنید. این کار بسیار ساده است و در ادامه خواهید خواند.
دریافت دمای محیط
قبلاً در سیسوگ راهاندازی سنسور دما DS18b20 با آردوینو و پروتکل onewire (تک سیمه) توضیح داده شده است. شما از طریق این آموزش، میتوانید کتابخانه Dallas را به آردوینو اضافه کنید. در پیام رسان بله، شما میتوانید با ارسال دستور دما به ربات هوشمند سیسوگ، دمای محیط را بهدست آورید.
تصاویری از ربات در محیط بله
وقتی کاربر برای اولین بار ارتباط با ربات را در محیط بله با دستور استارت /start شروع میکند، با پیامی مشابه زیر مواجه میشود:
کاربر به راحتی میتواند با استفاده از دکمههای تغییر وضعیت، وضعیت روشن یا خاموش بودن هریک از چراغهای متصل به ESP8266 را تغییر دهد.چراغها به طور پیش فرض خاموش هستند. پس از فشردن هر کلید، مشاهده خواهید کرد که ربات پیام جدیدی را ارسال نکرده و همان پیام قبلی را برای شما ویرایش میکند تا از شلوغی بیش از حد جلوگیری شود!
با هر بار فشردن کلیدها، همچنان همان دکمههای زیر پیام در ربات بله در دسترس هستند و میتوانید مجدداً وضعیت لامپها را کنترل کرده و حالت دلخواه خود را فعال کنید.
توجه داشته باشید که منظور از لامپها، در واقع دستگاههای متفاوتی است که شما میتوانید از راه دور کنترل کنید. در این پروژه برای نمایش صحت عملکرد ربات، از LED استفاده شده است. شما میتوانید تعداد دستگاههای بیشتری را با منوها دلخواه خود توسط این ربات کنترل کنید.
با سلام و عرض خسته نباشد . من دانشجو هستم و برای یک پروژه نیازداشتم که این کد را روی برد esp32 اجرا کنم . اگه امکان داره من رو راهنمایی کنید .
سلام میتوانم ماژول esp8266 به اردوینو متصل کنم و استفاده کنم
سلام بله باید پین TX روی ESP8266 به پین RX آردیونو متصل کنید و پین RX روی ESP8266 رو به پین TX روی برد آردیونو متصل کنید.
سرور بله که نمیتونه به ESP وصل بشه
آدرس وبهوک ربات بله را چی ثبت کردید؟
چطور وقتی کاربر توی ربات یه کلیک میزنه، اطلاعاتش به ماژول منتقل میشه؟
باید یک فایل با نام .htaccess (البته نقطه اول باید باشه) بسازید و این متنو داخلش بنویسید تا جواب بده ( باری من اینطور بود)
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]
ممنون از راهنمایی دوست عزیزم از بوشهر علی اضغر حق شناس
دوست عزیز، فایلی که شما فرمودید مربوط به تنظیمات سمت سرور هست، ما به کمک خود ESP8266 مستقیماً به سرور بله متصل شدیم و این وسط سرور دیگه ای نداشتیم که بخواهیم تنظیماتش رو تغییر بدیم! احتمالاً دیدگاهتون مربوط به مقاله “ربات تلگرام بدون فیلتر” نبوده و اشتباه اینجا نفرستادید؟
1-بله صحیح میفرمایید اما این کد برای سرور بله و برای سرور تلگرام هر دو قابل استفاده است
2- اگر این فایل در سرور میانجیمون قرار بگیره تمام کتابخونه و کد آردوینو قابل استفاده است برای تلگرام
3- پست دور زدن تلگرام با vscode نوشته شده و این کدی که در پست الان هست بسیار عالیست برای Arduino IDE
از دو مقاله ترکیب خوبی ساختید!
درود بر شما
پسوند فایل چی باید باشه و محل قرارگیری فایل ؟
چرا جواب من را نمیدهید؟
دوست عزیزم، مطالب و کامنت ها واقعا زیاده و نویسنده های زیادی هم هستند که باید پاسخ بدن، برای همین ممکنه یکی دو روز طول بکشه!
سلام خوبین
من هر کاری میکنم خطا میده و وصل نمیشه و در سریال مانیتور اردیونو مینویسه
[HTTPS] GET… failed, error: connection failed
[HTTPS] begin…
Send:{“offset”:”0″,”limit”:”1″}
سلام.
شما با یه URL دیگه چک کنید ببینید اتصال به اینترنتتون برقرار هست؟
به وای فای متصل شده؟ وای فایتون اینترنت داره؟!
setFingerprint رو کامنت کردید و client->setInsecure(); رو فعال کردید؟
خیلی عوامل میتونه باشه، باید توی قسمتای مختلف کدتون دیباگ اضافه کنید تا توی پنجره سریال ببینید مشکل از کجا میتونه باشه.
با سلام ایا در استفاده از دکمه ها در برنامه برای ربات پحدودیت در تعداد وجود دارد ؟
درود بر شما.
خیر، اما خوب چون هر پردازش درخواست توسط ESP8266 کمی زمان میبرد، ممکن است درخواستهای پشت سر هم شما در ربات، در سرور بله جمع شود و بعد یکی یکی توسط ESP8266 خوانده و اجرا شود. اگر این امر باعث ایجاد باگ احتمالی نشود، مشکلی وجود ندارد.
بهتر است کد را جوری تغییر دهید که ربات تنها به یک مدیر (یک حساب کاربری در بله یا user_id) پاسخ بدهد و دیگر درخواستها را یا رد کند، یا پاسخ دیگری بدهد.
سلام و با تشکر از شما
اگر ممکن هست لینک دانلود همه کتابخانه های مورد نیاز این پروژه رو بزارید ممنون میشم
#include
#include
#include
#include
#include “OneWire.h”
#include
با سپاس فراوان
درود بر شما.
شما کتابخانه Dallas را به آردوینو اضافه کنید، بهترین روش برای اضافه کردن اون، افزودن از طریق خود مدیر کتابخانه آردوینو است. در آموزش بالا، پاراگراف “دریافت دمای محیط”، لینک به آموزش کامل راه اندازی سنسور دما داده شده است که این مورد را بهصورت کامل به شما آموزش میدهد. فکر نمیکنم به کتابخانه دیگری نیاز باشد. اگر باز مشکلی بود، بفرمایید.
لینک:
https://8bi.ir/izy4j
سلام، روزتون بخیر
;(Zeus_TgBot Bot(Bot_Key, true, true این خط در نرم افزار آردوینو ارور میده، ولی من دوتا true حذف کنم ارور نمیده ولی بات بله راه اندازی نمیشه..
اینم ارورش
exit status 1
‘(no matching function for call to ‘Zeus_TgBot::Zeus_TgBot(const char [52], bool, bool
با تشکر
درود بر شما، احتمالاً شما دارید از فایلهای کتابخانه قبلی که برای تلگرام بوده استفاده میکنید.
سلام وقتتون بخیر
ممنون از کتابخانه عالی شما ببخشید من برای یک پروژه درسی باید علاوه بر تغییر وضعیت لامپ ها درخواست پول هم در ربات بکنم ولی مشکل دارم من درباره api پرداخت بله تحقیق کردم به انگار باید provider_token برای بله ارسال کنیم در واقع یک sendInvoice .
در تالار گفت و گو توسعه دهندگان بله گفتند باید با ارسال زیر می تواند پرداخت ساخت :
https://tapi.bale.ai/bottoken/sendInvoice \
-H ’Content-Type: application/json’ \
-d ‘{
“chat_id”:userid,
“title”:”text_title”,
“description”:”text_desc”,
“provider_token”:”6037997220200000″,
“payload”:”string”,
“prices”:[
{
“label”:”label”,
“amount”: 10
}
]}’
ببخشید من در حد متوسط هستم من نتونستم این کار را انجام بدم اگر میشه راهنمایی کنید ؟؟؟
باز هم ممنون
درود بر شما.
فرمت بالا در قالب CURL میباشد.
-d اطلاعاتی است که شما میبایست به سرور بله ارسال کنید. دیگر ویژگیها قبلاً در کتابخانه ما تنظیم شدهاند.
برای مثال در همین درخواستی که ارسال کردید، chat_id با مقدار userid (که یک متغیر است و باید با مقدار خود جایگزین کنید) و title با مقدار text_title ارسال شده است.
اگر شما به سورس کتابخانه ما نگاه کنید، در تابع
Zeus_TgBot::sendMessage
پارامترهای chat_id و text را برای سرور بله ارسال کردهایم.
به همین صورت، شما دیگر پارامترهای ضروری مثل description، provider_token، payload و … را ارسال کنید.
سلام
ممنون از کتابخانه خوبی که نوشتید بسیار کاربردی و کامل دقیق بود . فقط من برای پروژه خود در سورس کتابخانه تغییراتی انجام دادم ولی یک مشکل دارم من می خوام به جای استفاده از کلید هایی که Call DATA بر می گردانند با زدن دکمه ها در ربات Text مورد نظر ارسال شود همانند ربات های اماده بله !
برای این کار باید در اون api که کتابخانه ارسال می کند بعد از reply_markup ، به جای inline_keyboard ، عبارت keyboard ارسال شود ولی هر چقدر کتابخانه را بازبینی کردم نتوانستم این عبارات را جایگزین کنم ! لطفا به من کمک کنید .
با تشکر ساتیار
درود بر شما.
در کتابخانه 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);
اگر این فانکشن را مطالعه کنید، با ساز و کار و نحوه تنظیم آپشن ها آشنا خواهید شد.
با سلام ممنون بابت آموزش خوبتان خیلی عالی بود
فقط ممکن است در اینده امکان ارسال عکس را نیز به توابع اصلی کتابخانه اضافه نمایید که مانند کتابخانه تلگرام که امکان ارسال عکس را نیز در بله داشته باشیم
و یک نکته ای دیگر که هست من این ربات بله را که می سازم در یک گروه add می نماییم اما مشکلی که هست وقتی که از گروه به ربات پیام ارسال می نماییم دستور ارسالی توسط ربات دریافت می شود ولی ربات به دستور دریافتی از طریق همان پروفایل خودش پاسخ دستور را می دهد در واقع پاسخ در گروه ریسو نمی شود این روش به اشترک گذاشتن یک ربات برای جمعی از کاربران بسیار مناسب است که هر زمان ادمین خواست می توانست عضوی را حذف یا اضافه بنمایید ممنون می شوم راهنمایی ام نمایید که چطور این مورد را می توان حل کرد.
درود بر شما.
برای این کار کافی است تا طبق مستندات وب سایت بله، فایل تصویر را همراه با درخواست به سرور بله ارسال نمایید.
در کتابخانهای که ما نوشتیم، برای ارتباط با اینترنت از کتابخانه HTTPClient کمک گرفته شده است. این کتابخانه مثالهای بسیار زیادی دارد و توابع ارسال فایل نیز دارد. همچنین پیاده سازی آن در آردوینو راحت میباشد.
در ربات تلگرام و ربات بله، دو پارامتر به نامهای chat_id و sender_id وجود دارد.
sender_id در واقع آی دی شخصی است که پیام را به ربات ارسال کرده است و chat_id محل چت است. این محل میتواند درون گفتگوی خصوصی باشد و یا درون یک گروه. بنابراین اگر میخواهید ربات به پیامها درون گروه پاسخ دهد، باید برنامه را اصلاح کرده و chat_id را جایگزین کنید.
سلام ممکن است راهنمایی کنید که کجا را باید تغییر داد که بتوانم ربات را در گروه add نماییم
درود بر شما، از متد
Zeus_TgBot::sendMessage
الگو برداری کرده و آن را مطابق API بله تغییر دهید تا بتوانید پارامتر های لازم برای اضافه کردن در گروه را برای سرور بله ارسال نمایید.
سلام این مورد حل شد فقط یه مسئله چطوری می شود عکس ارسال ارسال کرد توی بله ؟؟؟؟؟؟؟
اگر خود کتابخانه HTTPClient متد های برای آپلود فایل نداشت، فکر میکنم این کتابخانه نیز بتواند به شما کمک کند:
https://github.com/nhatuan84/esp32-upload-download-multipart-http/
با سلام. موقع کامپایل چنین خطایی میده. در حالیکه فایل دکر شده تو مسیر کتابخونه ها هم هست.
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.
مشکل از من بود حل شد.
البته من قبلا باپیامرسان گپ یه کارهایی کرده بودم ولی ادامه ندادم چون به موردی که در بالا گفتم برخوردم و دیگه وقت تحقیقات بیشتر نداشتم…
بسیار عالی و جذاب. فقط یک سوال برای هر کاربر یا به اصطلاح مشتری نیاز هست ربات جدید ساخته بشه یا با همون ربات ساخته شده همه کاربران میتونن متصل بشن. منظورم اینه که میشه این ربات بستر ارتباط چند نفر با مثلا بورد کنترل دمای خانه خودشون باشه یا باید برای هر کدوم ربات جدید تعریف بشه.
درود بر شما.
در سورس نمونهای که ما برای شما قرار دادیم، ربات روی خود برد اجرا میشود. بنابراین اگر قرار باشد شما دو یا چند ESp8266 برای خانههای مختلف بکار ببرید، مسلماً این روش نیاز گوی شما نخواهد بود. اما همیشه در برنامه نویسی راههای بسیار زیادی وجود دارد. برای مثال شما میتوانید با تهیه سرور، مدیریت ربات را به یک سرور واحد بسپارید و اینترنت اشیا را به ESP8266. که همه اینها نیازمند بررسی و تغییراتی در کد هست. همچنین بحث امنیت را نیز باید در نظر بگیرید. برای مثال در پروژه فعلی، چون برنامه برای هدف آموزشی نوشته شده، هرکسی که ربات را اجرا کند، میتواند مدیریت را در دست بگیرد، اما به راحتی شما میتوانید دسترسی افراد مختلف به ربات را نیز (با توجه به user_id) محدود کنید.
سلام
پدرم در امد هزارتا ارور داد از کتابخونه هایی که اصلا وجود نداشت خلاصه که من نامید شدم لطفا راهنمایی کنید
سپاس
درود بر شما.
دوست عزیز، لطفاً متن خطا رو بفرستید، اگر بتونم کمک میکنم.
سلام با esp8266 و فایربیس کار کردید
چطوری میشه از طریق esp8266 یک push notification برای گوشی فرستاد؟
قسمت esp مد نظرم هست
سلام.
معمولا سرویس های پوش نوتیفیکیشن دارای API هستند که شما با استفاده از توابع کتابخانه ای کلاینت ESP8266 به راحتی می توانید با این سرویس ها ارتباط برقرار کنید.
سلام و سپاس.
درود و سپاس متقابل!
مثل همیشه عاااااااااااااالی
خیلی منتظرش بودم
واقعا خسته نباشید
خیلی ممنون، قابل شما رو نداره! لطفا ما رو به دوستانتون معرفی کنید.
vaqean dametun Garme
kheili mamnon!