آموزش های کاربردیبایگانی مطالبخانه هوشمند
مقاله جدید

GPIO رزبری پای را از هر شبکه ای کنترل کنید!

شرح مختصر پروژه

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

همراه من باشید.


اتوماسیون خانگی با رزبری پای در پروتکل MQTT , Adafruit

در این مقاله آموزشی، از  Adafruit IO به عنوان بروکر MQTT و کنترل دستگاه AC استفاده می‌کنیم که به GPIO رزبری پای متصل هست.

تبادل دیتا بین دو ماژول ESP32 توسط پروتکل MQTT


قطعات موردنیاز

قطعات مورد نیاز برای انجام پروژه اتوماسیون خانگی با رزبری پای

لوازم مورد نیاز


نمودار مدار

نمودار مدار اتوماسیون خانگی با رزبری پای

مدار الکتریکی وسایل خانگی مبتنی بر IoT با استفاده از MQTT cloud و RPi ساده است. فقط کافیه لامپ رو به همراه ماژول رله به GPIO پین 35 RPi وصل کنین.

نمونه مدار


نصب کتابخانه‌های MQTT Cloud روی RPi

در این مقاله آموزشی، از پلتفرم Adafruit IO به همراه RPi به عنوان بروکر MQTT استفاده می‌کنیم. قبلاً در پروژه‌های زیادی از پلتفرم Adafruit IO استفاده کردیم و الان هم می‌تونیم از اون در RPi استفاده کنیم.

ساخت دوربین تشخیص حرکت با رزبری پای

برای این کار کافیه یه حساب کاربری در پلتفرم Adafruit IO برین و یک feed ایجاد کنین. پس از ایجاد داشبورد، برای شروع کار با MQTT باید چند تا کتابخانه رو در RPi نصب کنین.

1- در مرحله اول، Pi و پایتون رو با اجرای فرمان‌های زیر به‌روزرسانی کنین:

sudo apt-get update
sudo apt-get upgrade
sudo pip3 install --upgrade setuptools

2- حالا با اجرای فرمان‌های زیر، کتابخانه‌های Rpi.gpio و Adafruit blink رو نصب کنین.

sudo pip3 install RPI.GPIO
sudo pip3 install adafruit-blinka

3- برای نصب کتابخانه Adafruit IO فرمان زیر رو اجرا کنین.

sudo pip3 install adafruit-io

4- برای کلون کردن (clone) نمونه‌های adafruit از github فرمان زیر رو اجرا کنین.

برای دسترسی به سورس های این پروژه به لینک زیر مراجعه کنید.

git clone https://github.com/adafruit/Adafruit_IO_Python.git

5- در مرحله بعد با اجرای فرمان زیر در terminal، پوشه نمونه‌های (examples) را بررسی کنین.

cd Adafruit_IO_Python/examples/basics

اگه نمی‌دونین تو کدوم دایرکتوری قرار دارین اجرای pwd می‌تونه تو این زمینه بهتون کمک کنه.

6- برای مثال، تو این پوشه، باید ADAFRUIT_IO_KEY و  ADAFRUIT_IO_USERNAME رو مشخص کنین (این اطلاعات رو می‌تونین در داشبورد Adafruit پیدا کنین):

اگه کلیدی که در داشبورد Adafruit IO هست رو بزنید، می‌تونین فرمان زیر رو در ترمینال PRi ببینین.

7- حالا پوشه subscribe.py رو با استفاده از ادیتور nano باز کنین. برای باز کردن اون این فرمان رو اجرا کنین:

sudo nano subscribe.py

برای اینکه بتونیم  GPOI رو از داشبورد کنترل کنیم باید این برنامه رو کمی تغییر بدیم.


کُدنویسی برای کنترل GPOI رزبری پای با استفاده از MQTT

اول، برای استفاده از پین‌های GPIO و کلاینت Adafruit MQTT باید تمامی کتابخانه‌های مورد نیاز رو بارگذاری کنین:

import RPi.GPIO as GPIO
import sys
from Adafruit_IO import MQTTClient

حالا حالت GPIO رو تنظیم کنین و شماره پین LED رو مشخص کرده و اون رو به عنوان خروجی تعریف کنین:

GPIO.setmode(GPIO.BOARD)
GPIO.setwarnings(False)
ledPin = 12
GPIO.setup(ledPin, GPIO.OUT)

حالا باید AIO key و Username رو تعریف کنیم:

ADAFRUIT_IO_KEY = 'YOUR_AIO_KEY'
ADAFRUIT_IO_USERNAME = 'YOUR_AIO_USERNAME'

نام feed رو که برای خاموش و روشن کردن لامپ مشخص کردین، وارد کنین. من اسم این feed رو “light” گذاشتم:

FEED_ID = 'light'

در این مرحله، باید یک تابع تعریف کنین تا هر زمان اتفاقی افتاد، این تابع فراخوانی بشه. به همین دلیل، Feed رو با استفاده از client.subscribe(FEED_ID) ،subscribe  می‌کنیم:

def connected(client):
    client.subscribe(FEED_ID)
    print('Waiting for feed data...')

پس از subscribe کردن فید، باید به دنبال یک مقدار (value) جدید باشیم و اون رو در متغیر payload ذخیره کنیم. در این صورت تابع message فراخونی می‌شه. بنابراین هر زمان که متغیر payload برابر با 1 بود پین LED روشن و هر زمان که برابر با 0 (صفر) بود، پین اون خاموش می‌شه.

def message(client, feed_id, payload):
  print('Feed {0} received new value: {1}'.format(feed_id, payload))
  if payload == 1:
       GPIO.output(ledPin, GPIO.HIGH)
else:
      GPIO.output(ledPin, GPIO.LOW)

حالا برای وصل شدن به پلتفرم Adafruit IO و فرستادن پیام از اون و به اون یک client ایجاد می‌کنیم.

client = MQTTClient(ADAFRUIT_IO_USERNAME, ADAFRUIT_IO_KEY)
client.on_connect = connected
client.on_disconnect = disconnected

حواستون به indentation های کد باشه، در غیر این صورت کُد خطا می‌ده. کُد کامل در پایان این مقاله آموزشی قرار داده شده است.

در پایان، با زدن کلید ctrl+x و enter برنامه رو ذخیره کنین. حالا برای subscribe کردن پیام‌ها (message) باید اسکریپت رو اجرا کنیم. حالا توی ترمینال python subscribe.py رو تایپ کنین و کلید enter رو بزنین.

python subscribe.py

یه پیام با مضمون Waiting For Feed Data به شما نشون داده می‌شه.

ماژول رله (relay) حتماً باید به پین GPIO رزبری پای وصل باشه و حالا به داشبورد Adafruit IO برید و فید لامپ (light feed) رو عوض کنین. هر زمان که پیام 1 دریافت کردیم لامپ باید روشن بشه و هر زمان که پیام 0 دریافت کردیم باید خاموش بشه (تصویر زیر).

تست اتوماسیون خانگی با رزبری پای در adafruit

کد نهایی

با این روش می‌تونیم از هر جای دنیا که بودیم وسایل و دستگاه‌ها رو با استفاده از RPi و MQTT cloud کنترل کنیم. در ادامه می تونید کد نهایی و کامل این مقاله برای اتوماسیون خانگی با رزبری پای رو مشاهده کنید.

import RPi.GPIO as GPIO
import sys
from Adafruit_IO import MQTTClient
GPIO.setmode(GPIO.BOARD)
GPIO.setwarnings(False)
ledPin = 12
GPIO.setup(ledPin, GPIO.OUT)
ADAFRUIT_IO_KEY = 'YOUR_AIO_KEY'
ADAFRUIT_IO_USERNAME = 'YOUR_AIO_USERNAME'
FEED_ID = 'light'
def connected(client):
    # Subscribe to changes on a feed named Counter.
    print('Subscribing to Feed {0}'.format(FEED_ID))
    client.subscribe(FEED_ID)
    print('Waiting for feed data...')
def disconnected(client):
    sys.exit(1)
def message(client, feed_id, payload):
    print('Feed {0} received new value: {1}'.format(feed_id, payload))
  if payload == 1:
       GPIO.output(ledPin, GPIO.HIGH)
else:
      GPIO.output(ledPin, GPIO.LOW)
# Create an MQTT client instance.
client = MQTTClient(ADAFRUIT_IO_USERNAME, ADAFRUIT_IO_KEY)
# Setup the callback functions defined above.
client.on_connect = connected
client.on_disconnect = disconnected
client.on_message = message
# Connect to the Adafruit IO server.
client.connect()
client.loop_blocking()

جمع بندی

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

 

این مقاله چطور بود ؟
+1
0
+1
0
+1
0
مشاهده بیشتر

محمد حسنی

علاقمند به حوزه IoT و الکترونیک. در حال حاضر به مدت یکسال است که در تیم سخت افزار سازان نام آور به تولید محتوا مشغول هستم.

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

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

دکمه بازگشت به بالا