کنترل GPIO های رزبریپای از طریق تلگرام، تلگرام اپلیکیشنی ایدهآل برای ترکیب شدن با برد رزبریپای و پیادهسازی پروژههای کنترل با موبایل است.
این اپلیکیشن از توسعه دهندهها پشتیبانی بالایی کرده و همچنین ویژگیهای بسیاری زیادی دارد که برخی از آنها در حال حاضر وجود دارند و برخی دیگر برنامهریزی شده است که به زودی بر روی آن منتشر شوند و عملکرد رباتهای آن را ارتقا دهند. در آموزشهای قبل یاد گرفتیم که چگونه برای یک برد رزبریپای ربات تلگرامی ایجاد کنیم و همچنین اینکه چگونه از این طریق فایلهای تصویری، صوتی و اسناد مختلف را به اشتراک بگذاریم.
اکنون در این آموزش قصد داریم یک قدم فراتر رفته و بیاموزیم که چگونه میتوان پینهای GPIO یک برد رزبریپای را از طریق تلگرام کنترل کرد. ( به این ترتیب برای بات تلگرامی یک پشتیبانی سختافزاری ایجاد کردهایم.)
در واقع میخواهیم چهار LED به پینهای GPIO رزبریپای وصل کنیم و آنها را از طریق چت کردن با تلگرام، روشن و خاموش کنیم! یک تجربه ی هیجان انگیز ! بیایید شروع کنیم.
ابزار مورد نیاز:
1 . چهار LED ( با رنگ دلخواه)
- برد رزبریپای ( دارای اتصال اینترنت)
- برد بورد
- سیم برد بوردی
پیشنیازها:
پیش از شروع مراحل این آموزش، مطمئن شوید که برد رزبریپای شما به درستی به اینترنت متصل شده باشد و همچنین اینکه میتوانید برنامهیپایتون را بدون اشکال بر روی آن اجرا کنید.
به منظور دانستن نحوهی ارتباط بات تلگرام و برد رزبریپای نیز، حتما آموزش قبلی را بخوانید چرا که در این پروژه فرض ما این است که شما با این مفاهیم پایه آشنایی دارید.
طراحی مداری GPIOهای رزبریپای
مدار مورد نیاز برای کنترل LED ها از طریق بات تلگرام، یک مدار ساده است که از چهار LED و تعدادی سیم رابط تشکیل میشود. به مقاومتهای محدود کننده جریان نیز احتیاجی نخواهیم داشت، چرا که پینهای GPIO رزبریپای با سطح ولتاژ 3.3 ولت TTL کار میکنند.
مدار را مطابق تصویرهای زیر بسازید.
جدول زیر راهنمای پینها برای اتصال هر LED است.
و تصویر بعدی نمای کلی مدار است که در آن LED ها مطابق جدول بالا به برد متصل شده اند.
و در نهایت مدار کامل شده شما باید مشابه تصویر زیر باشد:
برنامه پایتون برد رزبریپای
پس از آماده شدن بخش سختافزاری پروژه، به بخش برنامهنویسی میپردازیم. در این برنامه پایتون ما میخواهیم یک دادهی ورودی دریافت کنیم ( پیامی که از طریق بات تلگرام ارسال میشود.) و براساس آن LED ها را روشن یا خاموش کنیم. و برای اینکه کد را محسوستر سازیم، میخواهیم به جای بررسی جمله به جمله دستورات و کدنویسی براساس آنها، براساس کلمات پیش برویم.
بنابراین برنامه ما باید دو کلیدواژه را چک کند: ON و OFF
به محض مشاهده و دریافت هر یک از این دو کلمه، به جستجوی کلمات دیگری نظیر white, yellow, green و redمیپردازد. هر کدام از این رنگها که وجود داشته باشند، LED متناظر تغییر وضعیت خواهد داد. همچنین در پاسخ، یک رشته از وضعیت آپدیت شدهی روشن و خاموش بودن LED ها را نیز به بات تلگرام ارسال میکنیم.
کد کامل برنامه را میتوانید در انتهای این آموزش ببینید. اما در ادامه قسمتهای مختلف آن را به طور جداگانه توضیح میدهیم تا فهم برنامهی کلی آسان گردد.
در این برنامه هم، همچون برنامهی آموزش قبلی، ما به تابع telepot نیاز داریم و باید آن را دانلود و فراخوانی کنیم. روش این کار دقیقا مانند روشی است که در آموزش قبلی توضیح دادیم. کتابخانهی مربوط به GPIO را نیز باید فراخوانی کنیم.
گفتیم که میخواهیم از طریق این برنامه، وضعیت روشنایی یا عدم روشنایی LED ها را کنترل کنیم. LED های ما به رنگهای سفید، زرد، قرمز و سبز هستند و مطابق اتصالات مداری که در قسمت قبل گفتیم، شماره پین هر کدام از آنها مشخص است. حال میخواهیم در این قسمت از کد هر رنگ از LED ها را براساس شماره پین آن تعریف کنیم.
قدم بعدی این است که هر کدام از این پینهای متصل به LED ها را به عنوان پین خروجی تعریف کنیم و حالت پیش فرض آنها را روی وضعیت خاموش (turned off) قرار دهیم.
همانطور که در آموزش قبلی هم توضیح دادیم، تمام اعمالی که قرار است بات تلگرامی در ارتباط با برد رزبریپای انجام دهد، باید درون بدنهی تابعی به نام تابع action تعریف شود. در اینجا کاری که ما از این تابع میخواهیم این است که پیامهای ارسال شده از طرف موبایل را خوانده و آنها را با کلیدواژههای مشخصی مقایسه کند و براساس نتیجه مقایسهها، روشنایی LED ها را کنترل کند.
هر پیامی که از طریق بات ارسال میشود دارای یک chat id و یک command است. اهمیت chat id از این نظر است که برنامه به واسطهی همین id میتواند پاسخ پیام دریافتی را برای فرستنده ارسال کند. هر دوی این اطلاعات یعنی chat id و command را به ترتیب زیر ذخیره میکنیم.
به این ترتیب هر پیامی که از طریق ربات ارسال کنیم، در قالب رشتهای در متغیر command ذخیره خواهد شد. بنابراین تمام کاری که باید انجام دهیم چک کردن کلید واژهها در متغیر command در ازای هر پیام دریافتی است. پایتون دستوری دارد که این کار را به راحتی برای ما انجام میدهد. به عنوان مثال اگر بخواهیم وجود کلمهی on را در رشتهی ذخیره شده از پیام دریافتی در متغیر command بررسی کنیم، کافی ست کد یک خطی زیر را بنویسیم:
به همین ترتیب تمام کلیدواژه ها را بررسی میکنیم. اگر در پیامی کلیدواژه ی on را دیدیم، آنگاه جستجو میکنیم که کاربر کدام LED را مد نظر داشته است. کد لازم این بررسی نیز همان کد یک خطی خواهد بود.
همچنین ما در حین جستجو، متغیر دیگری به نام message را نیز که پاسخ فرستنده در آن قرار دارد، همواره و باتوجه به نتایج جستجو در هر مرحله، به روز رسانی میکنیم.
همانطور که در قطعه کد بالا میبینید، ما به دنبال کلیدواژههای مانند green’, ‘white’, ‘red’, ‘yellow’ ‘all’ و ‘Turned on’ هستیم که در مورد LED به خصوصی باشد. پس از اتمام این جستجو، پیغامی به فرستنده ارسال میکنیم که نتیجهی درخواست او چه بوده است. همین روش را برای خاموش کردن LED ها نیز میتوانیم استفاده کنیم.
مرحله نهایی کنترل LED ها با بردرزبریپای و بات تلگرام
پس از اتمام مراحل فوق (آماده سازی سخت افزار مدار و نوشتن کد) ، برنامه را بر روی پایتون اجرا کنید. اطمینان حاصل کنید که توکن دسترسی ربات خودتان را دریافت کرده و در کد به درستی جایگزین کردهاید.
حال شروع کنید و دستوراتی که میخواهید را از طریق ربات ارسال کنید. به عنوان مثال برای روشن کردن LED های زرد و قرمز ، میتوانید یکی از دستورات زیر را وارد کنید:
1.Turn on Red and Yellow Light
2.Switch on Red and Yellow colour right
3.On red and yellow
4.Please put on the yellow and red light
یا با هر نوشتار دیگری که کلیدواژه های مورد حساسیت و قابل فهم برای کد را دارا باشد. چرا که کد نوشته شده تنها با همین کلیدواژهها کار دارد و بقیهی جمله را هر کلماتی که باشند، در نظر نخواهد گرفت. عملکرد کامل پروژه را میتوانید در ویدئویی که در انتهای آموزش قرار دارد، ملاحظه کنید.
این پروژه را انجام دهید و لذت ببرید! حتی میتوانید آن را به سطوح پیشرفتهتری نیز ارتقا دهید. با کمک آموزشهای داده شده در این دو جلسه، شما میتوانید از طریق تلفن همراه خود در هرکجای دنیا، هر سختافزاری را تحت کنترل خود داشته باشید و از طریق رزبریپای برای آن پیامهای صوتی، تصویری، متنی و فایلی فرستاده و پاسخ دریافت کنید! اگر LED ها را با رله یا دستگاههای AC جایگزین کنید، آنگاه یک سیستم اتوماتیک خانگیِ قابل کنترل با گوشی های هوشمند خواهید داشت! بنابراین از خلاقیت به خرج دهید و پروژهی منحصر به خودتان را خلق کنید!
امیدواریم که این آموزش را دوست داشته و از انجام آن لذت برده باشید.
ویدئوعملکرد کنترل GPIO های رزبریپای از طریق تلگرام:
کد:
import time, datetime import RPi.GPIO as GPIO import telepot from telepot.loop import MessageLoop white = 26 yellow = 19 red = 13 green = 6 now = datetime.datetime.now() GPIO.setmode(GPIO.BCM) GPIO.setwarnings(False) #LED White GPIO.setup(white, GPIO.OUT) GPIO.output(white, 0) #Off initially #LED Yellow GPIO.setup(yellow, GPIO.OUT) GPIO.output(yellow, 0) #Off initially #LED Red GPIO.setup(red, GPIO.OUT) GPIO.output(red, 0) #Off initially #LED green GPIO.setup(green, GPIO.OUT) GPIO.output(green, 0) #Off initially def action(msg): chat_id = msg['chat']['id'] command = msg['text'] print 'Received: %s' % command if 'on' in command: message = "Turned on " if 'white' in command: message = message + "white " GPIO.output(white, 1) if 'yellow' in command: message = message + "yellow " GPIO.output(yellow, 1) if 'red' in command: message = message + "red " GPIO.output(red, 1) if 'green' in command: message = message + "green " GPIO.output(green, 1) if 'all' in command: message = message + "all " GPIO.output(white, 1) GPIO.output(yellow, 1) GPIO.output(red, 1) GPIO.output(green, 1) message = message + "light(s)" telegram_bot.sendMessage (chat_id, message) if 'off' in command: message = "Turned off " if 'white' in command: message = message + "white " GPIO.output(white, 0) if 'yellow' in command: message = message + "yellow " GPIO.output(yellow, 0) if 'red' in command: message = message + "red " GPIO.output(red, 0) if 'green' in command: message = message + "green " GPIO.output(green, 0) if 'all' in command: message = message + "all " GPIO.output(white, 0) GPIO.output(yellow, 0) GPIO.output(red, 0) GPIO.output(green, 0) message = message + "light(s)" telegram_bot.sendMessage (chat_id, message) telegram_bot = telepot.Bot('470583174:AAG7MPZc93qchp-tjqA_K2meRYcQiOR7X7Y') print (telegram_bot.getMe()) MessageLoop(telegram_bot, action).run_as_thread() print 'Up and Running....' while 1: time.sleep(10)
منابع و رفع مسئولیت: