استفاده از MQTT برای کنترل IO PI

پایه های I/O (ورودی خروجی) خود را با استفاده از MQTT کنترل کنید

MQTT (Message Queue Telemetry Transport)

 


MQTT چیست؟


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

در ابتدای کار باید i2c را روی Raspberry Pi خود فعال کنید.

کتابخانه پایتون AB Electronics از کتابخانه دیگری به نام python-smbus استفاده می کند، شما می توانید با دستورات زیر آن را با استفاده از apt-get نصب کنید.
sudo apt-get update
sudo apt-get install python-smbus

برای نصب نرم افزار مورد نیاز MQTT باید mosquitto را نصب کنید.

sudo apt-get install mosquitto

همچنین باید کتابخانه پایتون paho-mqtt را با استفاده از pip3 نصب کنید.

sudo apt-get install python3-pip

اکنون می توانید paho-mqtt را نصب کنید.

sudo pip3 install paho-mqtt

 

با نصب کتابخانه ها و پیکربندی Raspberry Pi برای استفاده از i2c ، می توانیم پروژه خود را شروع کنیم.

 

مرحله ۱ – کلاینت را در Raspberry pi ایجاد کنید تا پیام های MQTT را بشنود و پردازش کند.

برای این آموزش ما با ایجاد یک فایل برنامه جدید پایتون به نام demo_mqtt_client.py کار را شروع خواهیم کرد. برای نوشتن برنامه می توانید از ویرایشگر متن مورد علاقه خود استفاده کنید. می توانید نمونه کاملی از demo_mqtt_client.py را در پوشه ABElectronics_Python_Libraries / IOPi / پیدا کنید.

در ابتدای برنامه خود باید کتابخانه های مورد نیاز را وارد کنید.

#!/usr/bin/env python
from IOPi import IOPi
import time
import paho.mqtt.client as mqtt
کتابخانه IOPI برای ارتباط با ورودی و خروجی های برد شما استفاده می شود، تقریباً همه کارهایی را که می توان با کنترل کننده MCP23017 انجام داد به شما امکان می دهد.

چون که می خواهیم از هر دو کنترل کننده MCP23017 استفاده کنیم، دو نمونه از کلاس IOPI ایجاد خواهیم کرد.

iobus = IOPi(0x20)
iobusb = IOPi(0x21)
 
0x20 آدرس I2C برای تراشه کنترل کننده در گذرگاه ۱ و 0x21 آدرس I2C برای تراشه کنترل کننده در گذرگاه ۲ است ، اگر شما انتخابهای آدرس را در IO Pi خود تغییر داده اید، برای مطابقت با شماره جدید باید این شماره را تغییر دهید.

با نمونه های جدید کلاس IOPI ما می توانیم به همه روش های موجود برای کنترل برد IO Pi دسترسی پیدا کنیم. همه پین ها را به عنوان خروجی تنظیم کنید و آنها را خاموش کنید

iobus.set_port_direction(0, 0x00)
iobus.write_port(0, 0x00)

iobus.set_port_direction(1, 0x00)
iobus.write_port(1, 0x00)

iobusb.set_port_direction(0, 0x00)
iobusb.write_port(0, 0x00)

iobusb.set_port_direction(1, 0x00)
iobusb.write_port(1, 0x00)

 

در ادامه روش ها را برای سرویس گیرنده MQTT اضافه خواهیم کرد.

def on_connect(client, userdata, flags, rc):
  print("Connected with result code "+str(rc))
  client.subscribe("topic/iopi")
اکنون تابع on_message را اضافه کرده و پیام جدید را گوش می دهد و دستور را به پین و حالت تقسیم می کند. با این کار پین انتخاب شده روی باس های IO Pi روشن یا خاموش می شود.
def on_message(client, userdata, msg):
  p,s = msg.payload.decode().split(",")
  if (int(p) <= 16):
    print("IO Bus 0 Pin: " + p)
    print("IO Bus 0 mode: " + s)
    iobus.write_pin(int(p), int(s))
  else:
    print("IO Bus 1 Pin: " + p)
    print("IO Bus 1 mode: " + s)
    iobusb.write_pin((int(p) -16), int(s))

 

بروکر=کارگزار

کد اتصال MQTT را اضافه می کنیم تا به کارگزار/سرور متصل شوید. آدرس IP را متناسب با آدرس کارگزار / سرورهای خود تغییر دهید.
client = mqtt.Client()
client.connect("10.0.0.49",1883,60)

client.on_connect = on_connect
client.on_message = on_message
client.loop_forever()
IO Pi اکنون آماده شنیدن پیام های MQTT ارسال شده به “topic / iopi” است

برای اجرای این کد و تنظیم Raspberry Pi خود برای پاسخگویی به پیام های MQTT ، باید اسکریپت را با استفاده از این موارد اجرا کنید:

python3 demo_mqtt_client.py

 

مرحله ۲ – برای ارسال و پردازش پیام های MQTT ، سرور / کارگزار را در raspberry pi یا سایر رایانه های Linux ایجاد کنید.

 

برای ارسال پیام به کلاینت Raspberry Pi شما به یک کامپیوتر سرور نیاز دارید که همان نرم افزار دستگاه کلاینت را اجرا خواهد کرد.

ما از کد اوبونتو برای کد زیر استفاده کردیم اما هر سرور / کارگزار MQTT همان عملکرد را انجام می دهد.

برای نصب نرم افزار مورد نیاز MQTT باید mosquitto را نصب کنید.

sudo apt-get install mosquitto

 

همچنین باید کتابخانه پایتون paho-mqtt را با استفاده از pip3 نصب کنید.
sudo apt-get install python3-pip

اکنون می توانید paho-mqtt را نصب کنید.

sudo pip3 install paho-mqtt

 

پس از نصب تمام نرم افزارها ، سیستم را مجدداً راه اندازی کنید و ما یک فایل جدید به نام demo_mqtt_server.py برای ارسال پیام های MQTT به Raspberry Pi ایجاد خواهیم کرد.

در اسکریپت ساده از دستورات برای روشن یا خاموش کردن پین با استفاده از “topic / iopi” مشتری استفاده می شود. با پیام شماره پین ، حالت ۵،۱ می چرخد پایه ۵ در گذرگاه دوم در IO Pi Plus دسترسی هایی است که با استفاده از پین های ۱۷ تا ۳۲ انجام می شود.

#!/usr/bin/env python3
import paho.mqtt.client as mqtt
import time

# Create client instance and connect to localhost
client = mqtt.Client()
client.connect("localhost",1883,60)

# Publish message to topic/iopi and set pin 1 on bus 1 to on
client.publish("topic/iopi", "1,1");
time.sleep(2)

# Publish message to topic/iopi and set pin 1 on bus 1 to off
client.publish("topic/iopi", "1,0");
time.sleep(2)
# Publish message to topic/iopi and set pin 1 on bus 2 to on
client.publish("topic/iopi", "17,1");
time.sleep(2)
# Publish message to topic/iopi and set pin 1 on bus 2 to off
client.publish("topic/iopi", "17,0");
client.disconnect();

 

هنگامی که این کد را اجرا می کنید ، پین ۱ در باس ۱ به مدت دو ثانیه روشن می شود، سپس پین را خاموش کرده و با استفاده از پین ۱ در گذرگاه ۲ (پین ۱۷) تکرار می کنید و دو ثانیه بعد خاموش می شود.

python3 demo_mqtt_server.py

 


در ادامه می توانید مطالعه کنید


 

محمد صداقتی

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

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