مهندس موفق الکترونیک

کنترل GPIO های رزبری‌پای از طریق تلگرام

کنترل GPIO های رزبری‌پای از طریق تلگرام، تلگرام اپلیکیشنی ایده‌آل برای ترکیب شدن  با برد رزبری‌پای و پیاده‌سازی پروژه‌های کنترل با موبایل است.

کنترل GPIO های رزبری‌پای از طریق تلگرام

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

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

پروژه قبلی با تلگرام

در واقع می خواهیم چهار  LED به پین های GPIO رزبری‌پای وصل کنیم و آن‌ها را از طریق چت کردن با تلگرام، روشن و خاموش کنیم! یک تجربه ‌ی هیجان انگیز ! بیایید شروع کنیم.

ابزار مورد نیاز :

1 . چهار LED ( با رنگ دلخواه)

  1. برد رزبری‌پای ( دارای اتصال اینترنت)
  2. برد بورد
  3. سیم برد بوردی

پیش‌نیازها:

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

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

و در انتها، چنانچه با خود برد رزبری‌پای نیز آشنایی کافی ندارید، آموزش‌های زیر را بخوانید:

طراحی مداری GPIO های رزبری‌پای

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

مدار را مطابق تصویرهای زیر بسازید.

جدول زیر راهنمای پین‌ها برای اتصال هر LED  است.

کنترل GPIO های رزبری‌پای از طریق تلگرام

و تصویر بعدی نمای کلی مدار است که در آن LED ها مطابق جدول بالا به برد متصل شده اند.

کنترل GPIO های رزبری‌پای از طریق تلگرام

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

مطلب پیشنهادی:  آموزش کنترل موتور DC با رزبری پای

کنترل GPIO های رزبری‌پای از طریق تلگرام

برنامه پایتون برد رزبری‌پای

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

بنابراین برنامه ما باید دو کلیدواژه را چک کند؛ ON و OFF

به محض مشاهده و دریافت هر یک از این دو کلمه، به جستجوی کلمات دیگری نظیر white, yellow, green  و  redمی پردازد. هر کدام از این رنگ‌ها که وجود داشته باشند، LED متناظر تغییر وضعیت خواهد داد. هم‌چنین در پاسخ، یک رشته از وضعیت آپدیت شد‌ه‌ی روشن و خاموش بودن LED ها را نیز به بات تلگرام ارسال می‌کنیم.

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

در این برنامه هم، همچون برنامه‌ی آموزش قبلی، ما به تابع telepot نیاز داریم و باید آن را دانلود و فراخوانی کنیم. روش این کار دقیقا مانند روشی است که در آموزش قبلی توضیح دادیم. کتابخانه‌ی مربوط به GPIO را نیز باید فراخوانی کنیم.

کنترل GPIO های رزبری‌پای از طریق تلگرام

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

کنترل GPIO های رزبری‌پای از طریق تلگرام

قدم بعدی این است که هر کدام از این پین‌های متصل به LED ها را به عنوان پین خروجی تعریف کنیم و حالت پیش فرض آن‌ها را روی وضعیت خاموش (turned off) قرار دهیم.

کنترل GPIO های رزبری‌پای از طریق تلگرام

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

هر پیامی که از طریق بات ارسال می‌شود دارای یک chat id و یک command است. اهمیت chat id از این نظر است که برنامه به واسطه‌ی همین id می‌تواند پاسخ پیام دریافتی را برای فرستنده ارسال کند. هر دوی این اطلاعات یعنی chat id و command را به ترتیب زیر ذخیره می‌کنیم.

کنترل GPIO های رزبری‌پای از طریق تلگرام

به این ترتیب هر پیامی که از طریق ربات ارسال کنیم، در قالب رشته‌ای در متغیر command ذخیره خواهد شد. بنابراین تمام کاری که باید انجام دهیم چک کردن کلید واژه ها در متغیر command در ازای هر پیام دریافتی است. پایتون دستوری دارد که این کار را به راحتی برای ما انجام می‌دهد. به عنوان مثال اگر بخواهیم وجود کلمه‌ی on را در رشته‌ی ذخیره شده از پیام دریافتی در متغیر command  بررسی کنیم، کافی ست کد یک خطی زیر را بنویسیم:

کنترل GPIO های رزبری‌پای از طریق تلگرام

به همین ترتیب تمام کلیدواژه ها را بررسی میکنیم. اگر در پیامی کلید‌واژه ‌ی on را دیدیم، آنگاه جستجو می‌کنیم که کاربر کدام LED را مد نظر داشته است. کد لازم این بررسی نیز همان کد یک خطی خواهد بود.

مطلب پیشنهادی:  فوت‌های کوزه‌گری در کار با ابزار Raspi-Config

هم‌چنین ما در حین جستجو، متغیر دیگری به نام message را نیز که پاسخ فرستنده در آن قرار دارد، همواره و باتوجه به نتایج جستجو در هر مرحله، به روز رسانی می‌کنیم .

کنترل GPIO های رزبری‌پای از طریق تلگرام

همان‌طور که در قطعه کد بالا می‌بینید، ما به دنبال کلیدواژه های مانند green’, ‘white’, ‘red’, ‘yellow’ ‘all’  و ‘Turned on’ هستیم که در مورد LED به خصوصی باشد. پس از اتمام این جستجو، پیغامی به فرستنده ارسال می‌کنیم که نتیجه‌ی درخواست او چه بوده است. همین روش را برای خاموش کردن LED ها نیز می‌توانیم استفاده کنیم.

کنترل GPIO های رزبری‌پای از طریق تلگرام

مرحله نهایی کنترل 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

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

مطلب پیشنهادی:  دسترسی به ورودی و خروجی‌های همه منظوره رزبری‌پای - Raspberry Pi GPIO

کنترل GPIO های رزبری‌پای از طریق تلگرام

کنترل GPIO های رزبری‌پای از طریق تلگرام

این پروژه را انجام دهید و لذت ببرید! حتی می‌توانید آن را به سطوح پیشرفته‌تری نیز ارتقا دهید. با کمک آموزش‌های داده شده در این دو جلسه، شما می‌توانید از طریق تلفن همراه خود در هرکجای دنیا، هر سخت‌افزاری را تحت کنترل خود داشته باشید و از طریق رزبری‌پای برای آن پیام‌های صوتی، تصویری، متنی و فایلی فرستاده و پاسخ دریافت کنید! اگر 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)

منبع و رفع مسئولیت: CircuitDigest

اگر این نوشته‌ برایتان مفید بود لطفا کامنت بنویسید.

مطالعه دیگر جلسات این آموزش<< جلسه قبلی                    جلسه بعدی >>

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

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

3 دیدگاه

  1. سلام خسته نباشید ممنون از اطلاعاتتون که به اشتراک گذاشتید عالی هستن !!!!

  2. سلام
    نیاز هست که همیشه vpn روی رزبری فعال باشه
    و مواقعی که در مکانی دیگر هستیم و دسترسی به رزبری نیست چاره چیه؟
    میکروتیک یا راهی دیگه هست؟

    • میلاد جهاندیده

      سلام، متاسفانه بدلیل فیلتر دسترسی به سرورهای تلگرام، بدون VPN یا روش های دیگر Tunneling protocol امکان دسترسی نیست.

      برای دسترسی به رزبری از راه دور روش اول داشتن IP Public یا IP Valid است. روش دوم Port forwarding و روش سوم و راحت تر استفاده از ابزار های کنترل از راه دور مثل Any Desk است. و البته روش های دیگر را هم شاید پیدا کنید.
      برای استفاده از روش سوم از وبسایت AnyDesk نسخه Raspberry Pi را دانلود و نصب کنید. و همچنین نسخه متناسب با سیستم عامل خودتان را نیز دانلود و نصب کنید بعد از اجرای برنامه در سمت رزبری پای یک کد تولید میشه اونو در برنامه سمت خودتان بزنید و از رزبری تایید کنید دسترسی داشته باشه و تمام.